2013年5月11日 zoj比赛三道水题:zoj4998 Break Standard Weight && zoj5004 Hard to Play && zoj5006 Java Beans

都是水题,特别水的内种,题目意思、思路神马滴就不说了……

Break Standard Weight

题目链接:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=4998

范围只有100,并且只有3个数字,直接枚举,代码好挫……o(╯□╰)o

只有一个需要注意的地方,就是绝对值为0的时候要考虑到!因为如果绝对值为0,那么根本就称不出什么重量来。。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <cctype>
 6 #include <stack>
 7 #include <queue>
 8 #include <map>
 9 #include <set>
10 #include <vector>
11 #include <cmath>
12 #include <algorithm>
13 #define lson l, m, rt<<1
14 #define rson m+1, r, rt<<1|1
15 using namespace std;
16 typedef long long int LL;
17 const int MAXN =  0x7fffffff;
18 const int  MINN =  -0x7fffffff;
19 const double eps = 1e-9;
20 const int dir[8][2] = {{0,1},{1,0},{0,-1},{-1,0},{-1,1},
21   {1,1},{1,-1},{-1,-1}};
22 map<int, bool>mymap; 
23 int main(void){
24 #ifndef ONLINE_JUDGE
25   freopen("zoj4998.in", "r", stdin);
26 #endif
27   int t, x, y, max, sum, i, j, k, a, b, c;
28   scanf("%d", &t);
29   while (t--) {
30     scanf("%d%d", &x, &y);
31     max = 0;
32     for (i = 1; i < x/2; ++i) {
33       a = i; b = x - i; c= y;
34       sum = 0;
35       mymap.clear();
36       mymap[a] = true; sum++;
37       if (!mymap[b]) {mymap[b] = true;sum++;}
38       if (!mymap[c]) {mymap[c] = true;sum++;}
39 
40       if (!mymap[abs(a+b)]) {mymap[abs(a+b)] = true;sum++;}
41       if (!mymap[abs(a+b-c)] && a+b-c!=0) {mymap[abs(a+b-c)] = true;sum++;}
42       if (!mymap[abs(a+b+c)]) {mymap[abs(a+b+c)] = true;sum++;}
43 
44       if (!mymap[abs(a-b)] && a-b!=0) {mymap[abs(a-b)] = true;sum++;}
45       if (!mymap[abs(a-b+c)] &&a-b+c!=0) {mymap[abs(a-b+c)] = true;sum++;}
46       if (!mymap[abs(a-b-c)]&&a-b-c!=0) {mymap[abs(a-b-c)] = true;sum++;}
47 
48       if (!mymap[abs(c+b)]) {mymap[abs(c+b)] = true;sum++;}
49       if (!mymap[abs(c+b-a)]&&c+b-a!=0) {mymap[abs(c+b-a)] = true;sum++;}
50 
51       if (!mymap[abs(c-b)] &&c!=b) {mymap[abs(c-b)] = true;sum++;}
52       if (!mymap[abs(c-b+a)]&&c-b+a!=0) {mymap[abs(c-b+a)] = true;sum++;}
53       if (!mymap[abs(c-b-a)]&&c-b-a!=0) {mymap[abs(c-b-a)] = true;sum++;}
54 
55       if (!mymap[abs(a+c)]) {mymap[abs(a+c)] = true;sum++;}
56       if (!mymap[abs(a+c-b)]&&a+c-b!=0) {mymap[abs(a+c-b)] = true;sum++;}
57 
58       if (!mymap[abs(a-c)]&&a-c!=0) {mymap[abs(a-c)] = true;sum++;}
59       if (sum > max) max = sum;
60     }
61     for (i = 1; i < y; ++i) {
62       a = i; b = y - i; c= x;
63       sum = 0;
64       mymap.clear();
65       mymap[a] = true; sum++;
66       if (!mymap[b]) {mymap[b] = true;sum++;}
67       if (!mymap[c]) {mymap[c] = true;sum++;}
68 
69       if (!mymap[abs(a+b)]) {mymap[abs(a+b)] = true;sum++;}
70       if (!mymap[abs(a+b-c)] && a+b-c!=0) {mymap[abs(a+b-c)] = true;sum++;}
71       if (!mymap[abs(a+b+c)]) {mymap[abs(a+b+c)] = true;sum++;}
72 
73       if (!mymap[abs(a-b)] && a-b!=0) {mymap[abs(a-b)] = true;sum++;}
74       if (!mymap[abs(a-b+c)] &&a-b+c!=0) {mymap[abs(a-b+c)] = true;sum++;}
75       if (!mymap[abs(a-b-c)]&&a-b-c!=0) {mymap[abs(a-b-c)] = true;sum++;}
76 
77       if (!mymap[abs(c+b)]) {mymap[abs(c+b)] = true;sum++;}
78       if (!mymap[abs(c+b-a)]&&c+b-a!=0) {mymap[abs(c+b-a)] = true;sum++;}
79 
80       if (!mymap[abs(c-b)] &&c!=b) {mymap[abs(c-b)] = true;sum++;}
81       if (!mymap[abs(c-b+a)]&&c-b+a!=0) {mymap[abs(c-b+a)] = true;sum++;}
82       if (!mymap[abs(c-b-a)]&&c-b-a!=0) {mymap[abs(c-b-a)] = true;sum++;}
83 
84       if (!mymap[abs(a+c)]) {mymap[abs(a+c)] = true;sum++;}
85       if (!mymap[abs(a+c-b)]&&a+c-b!=0) {mymap[abs(a+c-b)] = true;sum++;}
86 
87       if (!mymap[abs(a-c)]&&a-c!=0) {mymap[abs(a-c)] = true;sum++;}
88       if (sum > max) max = sum;
89     }
90     printf("%d\n", max);
91   }
92 
93   return 0;
94 }

就是有个困惑,写这样的代码,如果没有vim,日子该怎么过……

还是把上面的代码修改一下吧,用mymap.size(),依然还是得去掉0的情况。看来自己STL还是需要好好学习啊!不然搞的那么繁琐。。o(╯□╰)o

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <cctype>
 6 #include <stack>
 7 #include <queue>
 8 #include <map>
 9 #include <set>
10 #include <vector>
11 #include <cmath>
12 #include <algorithm>
13 #define lson l, m, rt<<1
14 #define rson m+1, r, rt<<1|1
15 using namespace std;
16 typedef long long int LL;
17 const int MAXN =  0x7fffffff;
18 const int  MINN =  -0x7fffffff;
19 const double eps = 1e-9;
20 const int dir[8][2] = {{0,1},{1,0},{0,-1},{-1,0},{-1,1},
21   {1,1},{1,-1},{-1,-1}};
22 map<int, bool>mymap; 
23 int main(void){
24 #ifndef ONLINE_JUDGE
25   freopen("zoj4998.in", "r", stdin);
26 #endif
27   int t, x, y, max, sum, i, j, k, a, b, c;
28   scanf("%d", &t);
29   while (t--) {
30     scanf("%d%d", &x, &y);
31     max = 0;
32     for (i = 1; i < x/2; ++i) {
33       a = i; b = x - i; c= y;
34       mymap.clear();
35       mymap[a] = mymap[b] = mymap[c] = true;
36       mymap[abs(a+b)] = mymap[abs(a+b-c)] = mymap[abs(a+b+c)] = true;
37       mymap[abs(a-b)] = mymap[abs(a-b+c)] = mymap[abs(a-b-c)] = true;
38       mymap[abs(c+b)] = mymap[abs(c+b-a)] = true;
39       mymap[abs(c-b)] = mymap[abs(c-b+a)] = mymap[abs(c-b-a)] = true;
40       mymap[abs(c+a)] = true;
41       mymap[abs(c-a)] = true;
42       sum = mymap.size();
43       if (mymap[0]) sum--; 
44       if (max < sum) max = sum;
45     }
46     for (i = 1; i < y; ++i) {
47       a = i; b = y - i; c= x;
48       mymap.clear();
49       mymap[a] = mymap[b] = mymap[c] = true;
50       mymap[abs(a+b)] = mymap[abs(a+b-c)] = mymap[abs(a+b+c)] = true;
51       mymap[abs(a-b)] = mymap[abs(a-b+c)] = mymap[abs(a-b-c)] = true;
52       mymap[abs(c+b)] = mymap[abs(c+b-a)] = true;
53       mymap[abs(c-b)] = mymap[abs(c-b+a)] = mymap[abs(c-b-a)] = true;
54       mymap[abs(c+a)] = true;
55       mymap[abs(c-a)] = true;
56       sum = mymap.size();
57       if (mymap[0]) sum--; 
58       if (max < sum) max = sum;
59     }
60     printf("%d\n", max);
61   }
62 
63   return 0;
64 }

谢谢speedcell~

Hard to Play

题目链接:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5004

水题,也木有什么可以总结的。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <cctype>
 6 #include <stack>
 7 #include <queue>
 8 #include <map>
 9 #include <set>
10 #include <vector>
11 #include <cmath>
12 #include <algorithm>
13 #define lson l, m, rt<<1
14 #define rson m+1, r, rt<<1|1
15 using namespace std;
16 typedef long long int LL;
17 const int MAXN =  0x7fffffff;
18 const int  MINN =  -0x7fffffff;
19 const double eps = 1e-9;
20 const int dir[8][2] = {{0,1},{1,0},{0,-1},{-1,0},{-1,1},
21   {1,1},{1,-1},{-1,-1}};
22 
23 int main(void){
24 #ifndef ONLINE_JUDGE
25   freopen("zoj5004.in", "r", stdin);
26 #endif
27   int t, i, sum, Max, Min, a, b, c, j, cnt;
28   scanf("%d", &t);
29   while (t--) {
30     scanf("%d%d%d", &a, &b, &c);
31     Max = Min = 0; cnt = 0; sum = 0;
32     for (i = 0; i < a; ++i) {sum += (300*(cnt*2+1));cnt++;}
33     for (i = 0; i < b; ++i) {sum += (100*(cnt*2+1));cnt++;}
34     for (i = 0; i < c; ++i) {sum += (50*(cnt*2+1));cnt++;}
35     Min = sum; sum = 0; cnt = 0;
36     for (i = 0; i < c; ++i) {sum += (50*(cnt*2+1)); cnt++;}
37     for (i = 0; i < b; ++i) {sum += (100*(cnt*2+1)); cnt++;}
38     for (i = 0; i < a; ++i) {sum += (300*(cnt*2+1)); cnt++;}
39     Max = sum;
40     printf("%d %d\n", Min, Max);
41   }
42 
43   return 0;
44 }

就是枚举一下,o(╯□╰)o

Java Beans

题目链接:http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5006

注意到范围只有200,就是暴力……o(╯□╰)o

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <cctype>
 6 #include <stack>
 7 #include <queue>
 8 #include <map>
 9 #include <set>
10 #include <vector>
11 #include <cmath>
12 #include <algorithm>
13 #define lson l, m, rt<<1
14 #define rson m+1, r, rt<<1|1
15 using namespace std;
16 typedef long long int LL;
17 const int MAXN =  0x7fffffff;
18 const int  MINN =  -0x7fffffff;
19 const double eps = 1e-9;
20 const int dir[8][2] = {{0,1},{1,0},{0,-1},{-1,0},{-1,1},
21   {1,1},{1,-1},{-1,-1}};
22 int a[220];
23 int main(void){
24 #ifndef ONLINE_JUDGE
25   freopen("zoj5006.in", "r", stdin);
26 #endif
27   int t; scanf("%d", &t);
28   int n, m, i, j, k, sum, max;
29   while (t--) {
30     scanf("%d%d", &n, &m); max = -1;
31     for (i = 0; i < n; ++i) scanf("%d", a + i);
32     for (i = 0; i < n; ++i) {
33       sum = 0;
34       for (j = i; j < i + m; ++j) {
35         sum += a[j%n];
36       }
37       if (max < sum) max = sum;
38     }
39     printf("%d\n", max);
40   }
41 
42   return 0;
43 }

  好吧……这比赛就过了这三道水题,赶脚没什么收获,因为本来就没有用心做,态度都不端正,就想着试着做做就行了,结果什么收获都没有,以后,不管什么比赛,都要认真对待,否则就不要做!做水题真的木有意思,虽然这三道都是1A的,可是,那又有什么意义呢?不会的题目还是不会,会的题目还是会的,还不是原地踏步么?

  为了让这次比赛有点儿意义,这次要把剩下的题目切掉!

原文地址:https://www.cnblogs.com/liuxueyang/p/3072991.html