这次比赛只做出了三个题,而且Wa了十多次,罚时太多,排名很靠后。主要原因是比赛知识储备不够,导致大多数题没法做;题做的少,导致一些题没思路;比赛经验不足,总结不够。
1003题,这题错了太多次,主要原因是没有仔细读题,理解错题意,并且用cin输入超时多次。题意是每次取完快递,必须回到放钥匙的地方(最后一次除外),这题的思路是判断这个位置是否大于那个钥匙的位置,若是大于那个位置的话,那么最终的步数就必然就要加上2倍的它的位置和钥匙的位置差;若不是,则考虑位置最靠近门的那个,即位置最小的那个,因为它和钥匙离得最远,所要走的步数最多,最后拿完钥匙顺便开它就好,所走步数最少,其他的则拿完快递都得回去。所以每次都记录快递和门的位置差 * 2 , 最后 加上到门的距离 , 再减去位置最小和钥匙的距离差,再加上最小位置 - 1...
下附代码。
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; ll res, sum; int t, n, x, k, m, min_num; int main() { scanf("%d", &t); while(t--){ sum = 0; min_num = 1e9 + 10; scanf("%d %d %d", &n, &m, &k); for(int i = 1;i <= m; ++ i){ scanf("%d",&x); sum += 2 * abs(x - k); min_num = min(min_num, x); } res = sum - abs(min_num - k) + min_num - 2 + k; printf("%d ", res); } }
1007题,大意就是找出字符数组中出现的最多次的字符个数。下附代码:
#include<iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 2e5 + 10; int t,n, m, k; int a[200]; int res = 0, cnt; char str[N]; int main() { scanf("%d", &t); while(t--){ for(int i = 'a';i <= 'z'; ++ i){ a[i] = 0; } res = 0; cin >> str; int len = strlen(str); for(int i = 0;i < len; ++ i){ a[str[i]] ++; res = max(a[str[i]], res); } printf("Case #%d: %d ", ++ cnt, res); } }
1010题,给出一个数组,若是有两个连续相同的数字,则输出"NO", 否则输出"YES", 下附代码:
#include<bits/stdc++.h> using namespace std; int t,n; int a[100]; int main() { cin >> t; while(t--){ cin >>n; cin >> a[0]; int flag = 0; for(int i = 1;i <= n-1; ++i){ cin >> a[i]; if(a[i] == a[i-1] && !flag){ puts("NO"); flag = 1; } } if(flag) continue ; puts("YES"); } }
反思:
1.应该分工明确,积极发挥团队作用。正式比赛是三人用一台电脑,所以敲代码应是一个人敲,提交时也时一台电脑提交,这次比较特殊,三台机子都可以提交,而且我们也没有限制提交(实际上主要是我那个错的题提交的最多。。),导致罚时过多。总之,弄得有些像个人赛,没有很好的发挥团队的作用。
2.应该多学一些新知识,积极学习一些算法、题型,可能要不同的人负责不同的题型。具体学习应该有一个规划。
3.应该多做题,多练习