CCPC-2020网络选拔赛总结
本次比赛,是我们小队第一次线下面对面参加比赛,比赛前夕,我们三个在交流中都表示很紧张,在比赛经验上都很欠缺。赛后总结了一下原因:
- 交流不及时,对于“Express Mail Taking”这一题,我们队因为交流不当提交了十多次,wa掉16次。在此过程中,我们交流完思路之后只顾各自完成自己的代码。中间没有进行交流,比赛过程看到别的队伍充分交流,于是试着交流,但还是需要改进。
- 不注意罚时,“Express Mail Taking”这一题我们wa了16次,“Lunch”一题在没有把握的情况下提交了两次,我们做题过程中只顾着提交不注重代码的正确性和编译问题。赛后和其他队伍交流,我们认识到,提交代码需要谨慎他们在提交时都是再三考虑并且三位队友同意之后提交。
- 对于题目思路无法正确理解,掌握技巧不足。对于“CCPC Training Class”一题,开始认为题意不好理解,并不在意,最终通过观察所给的样例队友发现目的是要输出字符串中出现最多的字母,然后一遍过。而在“Express Mail Taking”中,我们由于没有理解题目中的要求,前前后后换了4种思路。而在赛后通过和其他队伍的同学交流发现“3*3 Comvolution”通过观察输出可以发现最终输出是零矩阵或者原矩阵,也可以过。我们的经验不足,同时知识储备不足。
- 分工不合理。我们三人在比赛时都在敲代码,时不时交流,这样的效率极慢,我认为问应当分工明确,根据正规比赛的规矩,我们需要一个人编辑代码,一个人提供解题思路,一个人读懂题目。
这就是我在本次比赛中一些反思,本次比赛我们队一共做出3道题,下面是对本次做题过程的反思。
1003 Express Mail Taking
题意:邮递员需要在快递箱中取快递,快递箱依次排列,入口在1号箱子,每个箱子距离为1,其中有一个控制的箱子输入箱号可以打开对应箱子,为了防止偷盗,快递员一次只能打开一个箱子,回到控制箱再打开下一个箱子。
失误:我们由于对题意产生错误理解思路错了4次,在最后提交还因为小的语法失误wa了一次。
#include<bits/stdc++.h> using namespace std; int t,m; const int N=1e6+10; int a[N]; long long k,n; int main() { cin>>t; while(t--){ scanf("%lld %d %lld",&n,&m,&k); for(int i=0;i<m;i++){ scanf("%d",&a[i]); } sort(a,a+m); long long sum=k-1; if(a[0]>k){ for(int i=0;i<m-1;i++){ sum+=2*(a[i]-k); } sum+=2*a[m-1]-k-1; cout<<sum<<endl; } else if(a[m-1]<k){ for(int i=m-1;i>0;i--){ sum+=2*(k-a[i]); } sum+=k-1; cout<<sum<<endl; } else{ for(int i=m-1;i>0;i--){ if(a[i]<k){ sum+=2*(k-a[i]); } else{ sum+=2*(a[i]-k); } } sum+=k-1; cout<<sum<<endl; } } }
1007 CCPC Training Class
题意:我们通过输出发现只需要输出字符串中出现最多的字母
失误:在题意上花费了时间,同时注意输出里面需要注意的格式
#include<iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 2e5 + 10; int t,n, m, k; int a[N]; 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\n", ++ cnt, res); } }
1010 Reports
题意:当且仅当不存在两个连续的相同报告时,报告序列才是正确的。
失误:两个人同时做浪费了时间
#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"); } }