TJU 2460 Ticket Discount (Asia - Beijing 2003)
WA 了很多次...有幾個小細節(jié)需要處理就是讀入數(shù)據(jù) 控制精度 判斷閏年 還有最重要的是理解清楚題意。。。
1
#include<stdio.h>
2
#define SIZE 400
3
4
int flag , flag2;
5
char s1[SIZE],s5[SIZE],s3[SIZE];
6
int s4,s2,s6;
7
char month[12][5]=
{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
8
int dat[12]=
{31,28,31,30,31,30,31,31,30,31,30,31};
9
int date;
10
struct Q
{
11
int qn;
12
int qy;
13
int qr;
14
15
int en;
16
int ey;
17
int er;
18
19
int way;
20
int num;
21
};
22
Q a;
23
int shu()
{
24
int nn = 0;
25
while(1)
{
26
if( a.qn == a.en && a.er ==a.qr && a.ey == a.qy) break;
27
if(nn>31) break;
28
if(flag == 1) dat[1] = 29;
29
else
30
dat[1] = 28;
31
32
a.qr++;
33
if(a.qr>dat[a.qy-1])
34
{
35
a.qr = a.qr - dat[a.qy-1];
36
a.qy++;
37
if(a.qy>12)
{
38
a.qy = a.qy -12;
39
a.qn++;
40
if(flag2 ==1 )
{
41
flag = 1;
42
}
43
}
44
}
45
nn++;
46
}
47
return nn ;
48
}
49
50
int main()
{
51
int key ;
52
int i ;
53
while(1)
{
54
key = 0 ;
55
int num =0;
56
57
scanf("%s %d %s %d %s ",s1,&s2,s3,&s4,s5);
58
if(s5[0] == 'a')
{
59
while(1)
{
60
char temp;
61
scanf("%c",&temp);
62
if(temp == '<')
63
num++;
64
if(temp == '>')
65
num--;
66
if(num == 0) break;
67
}
68
}
69
scanf("%d",&s6);
70
//printf("%s %d %s %d %s %d\n",s1,s2,s3,s4,s5,s6);
71
if(s6 == 0) break;
72
a.en = s4;
73
a.qn = s2;
74
a.num = s6;
75
for(i = 0 ; i <12 ;i++ )
76
if(s1[0] == month[i][0] && s1[1] == month[i][1] && s1[2] ==month[i][2] )
{
77
a.qy = i+1;
78
break;
79
}
80
a.qr = 10*(s1[4]-'0')+(s1[5]-'0');
81
for(i = 0 ; i <12 ;i++ )
82
if(s3[0] == month[i][0] && s3[1] == month[i][1] && s3[2] ==month[i][2] )
{
83
a.ey = i+1;
84
break;
85
}
86
a.er = 10*(s3[4]-'0')+(s3[5]-'0');
87
88
int m = 100 ;
89
90
switch(s5[0])
{
91
case 'p':a.way = 1 ;m = 90*m; break;
92
case 'o':a.way = 2 ;m = 85*m; break;
93
case 'a':a.way = 3 ;m = 80*m; break;
94
}
95
if(a.num>=20)
{
96
m = 80*m;
97
}
98
else
99
if(a.num>=5 && a.num<=19)
{
100
m = 90*m;
101
}
102
else
103
m = m*100;
104
105
date = 0;
106
flag = 0;
107
if(a.qn%400 == 0)
{
108
flag = 1;
109
}
110
else
{
111
if(a.qn%4 == 0 && a.qn%100!=0)
{
112
flag = 1;
113
}
114
}
115
flag2 = 0;
116
if(a.en%400 == 0)
{
117
flag2 = 1;
118
}
119
else
{
120
if(a.en%4 == 0 && a.en%100!=0)
{
121
flag2 = 1;
122
}
123
}
124
date = shu();
125
if(date>=30) m = m*60;
126
else
127
if(date>=15) m = m*70;
128
else
129
if(date>=7) m = m*90;
130
else
131
m = m*100;
132
133
char ss[SIZE];
134
135
sprintf(ss,"%d\n",m);
136
137
printf("%c%c",ss[0],ss[1]);
138
if(ss[2]=='0'&&ss[3] == '0')
{printf("\n");continue;}
139
else
140
printf(".");
141
142
printf("%c",ss[2]);
143
if(ss[3]=='0')
{printf("\n");continue;}
144
else
145
{
146
printf("%c\n",ss[3]);
147
}
148
149
}
150
151
return 0 ;
152
}
153
154

2

3

4

5

6

7



8



9

10



11

12

13

14

15

16

17

18

19

20

21

22

23



24

25



26

27

28

29

30

31

32

33

34



35

36

37



38

39

40



41

42

43

44

45

46

47

48

49

50



51

52

53



54

55

56

57

58



59



60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76



77

78

79

80

81

82



83

84

85

86

87

88

89

90



91

92

93

94

95



96

97

98

99



100

101

102

103

104

105

106

107



108

109

110



111



112

113

114

115

116



117

118

119



120



121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138



139

140

141

142

143



144

145



146

147

148

149

150

151

152

153

154
