Codeforces Round #417 (Div. 2)
来源:互联网 发布:思迅收银软件操作手册 编辑:程序博客网 时间:2024/06/03 21:45
雪崩,不知道为何,一脸懵逼一堆小问题。感觉这次思路挺好的,做的两题都是一上来就有思路,没出现什么卡壳。然而,莫名的一堆失误造就了这场血虐……
A. Sagheer and Crossroads
思路:很常规的情景题,细心读题,判断就好了,关键就是耐心分析情景,注意细节(人行道位置),一定不能着急,确保正确理解题意,看完全部样例再做题。
不过这题这次失败的真正原因在于,改了一波程序后最后居然在循环节处忘了取余,这种小失误让人痛心啊,最后得到最坏结果可能数组越界两倍了,这都能过pre我也是惊呆了,还好被hack了。否则cf生涯第一次光头可能就要这么诞生了,很无奈啊
#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;bool light[4][4];int main(){ for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { int temp; scanf("%d",&temp); light[i][j] = (temp == 1 ? true : false) ; } } bool accident = false; for(int i=0;i<4;i++) { if(!light[i][3]) { continue; } for(int j=0;j<3;j++) { if(light[i][j]) { accident = true; break; } if(light[(i+j+1)%4][j]) { accident = true; break; } } } if(accident) { printf("YES\n"); } else { printf("NO\n"); } return 0;}
B. Sagheer, the Hausmeister
思路:这题由于规定关完一层楼所有灯后再上楼,于是就相当于一个局部贪心问题。不过由于每次贪心不仅有步数,不同结果还会对位置造成影响,于是添加一个dp,对于两边不同位置分别求一个贪心,再选取最小值进行转移。其实这题的思路还是挺顺畅的,不过卡了不少位置
1.数据读入时数值相连,要以字符串读取(这个小细节被卡了好多次了,值得加以重视啊)
2.楼层数据读入时倒序(我居然做了这么长时间才发现)
3.上楼数未计入(这个都能忘,我也是醉了)
4.i,j混淆导致楼层跳跃(这个手误我还能说什么)
5.由贪心向dp转化(好吧,这个确实是一开始考虑不周)
6.初始化问题(也不知道自己原来初始化的是什么鬼)
7.一楼独立考虑(要不然没法初始化啊)
8.修改位置变量(坐标与距离不统一,感觉自己都被绕进去了)
9.将不可能数据与相同数据归一化处理(反正都没用,不如常态化,何必单独处理惹事端)
10.中间结果的修改对后方结果造成影响(一定要单独处理中间变量啊,不能随意更改)
这么多小问题,我不失败谁失败,不知道今晚自己什么情况……
#include <iostream>#include <cstdio>#include <algorithm>#include <vector>#include <cstring>using namespace std;bool light[15][110];int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { //cout << m << "*" << n << endl; for(int i=n-1;i>=0;i--) { bool unready = false; char temp[110]; scanf("%s",temp); for(int j=0;j<m+2;j++) { //cout << i << "**" << j << endl; if(temp[j] == '1') { unready = true; light[i][j] = true; } else { light[i][j] = false; } } light[i][0] = unready; } //cout << "***" << endl; bool ready = true; for(int i=n-1;i>=0;i--) { if(light[i][0]) { ready = false; } light[i][m+1] = ready; } if(light[0][m+1]) { printf("%d\n",0); continue; } int lefsum = 0; int rigsum = 0; int lef = 0; int rig = 0; if(light[0][0]) { int newlef = 0; int newrig = 0; for(int j=1;j<=m;j++) { if(light[0][j]) { newlef = j; break; } } for(int j=m;j>=newlef;j--) { if(light[0][j]) { newrig = j; break; } } lefsum = newrig; lef = newrig; rigsum = newrig; rig = newrig; } else { lefsum = m+1; lef = m+1; rigsum = 0; rigsum = 0; } for(int i=1;i<n;i++) { if(light[i][m+1]) { break; } lefsum++; rigsum++; if(!light[i][0]) { continue; } int newlef = 0; int newrig = 0; for(int j=1;j<=m;j++) { if(light[i][j]) { newlef = j; break; } } for(int j=m;j>=newlef;j--) { if(light[i][j]) { newrig = j; break; } } int sum1,sum2; int templefsum,templef; sum1 = lefsum; sum2 = rigsum; sum1 += (lef + newrig); sum2 += (rig + newrig); //cout << i<<"*"<<sum << "*" << minlen <<"*" << newlef <<"*" <<newrig<< endl; templef = newrig; templefsum = sum1 < sum2 ? sum1 : sum2; int temprigsum,temprig; sum1 = lefsum; sum2 = rigsum; sum1 += (m + 1 - lef + m + 1 - newlef); sum2 += (m + 1 - rig + m + 1 - newlef); //cout << i<<"*"<<sum << "*" << minlen <<"*" << newlef <<"*" <<newrig<< endl; temprig = newlef; //cout << newlef<<"**"<<newrig<<"*"<<sum1 << "**" <<sum2 << endl; temprigsum = sum1 < sum2 ? sum1 : sum2; lefsum = templefsum; rigsum = temprigsum; lef = templef; rig = temprig; //cout << lefsum <<"*" <<lef<< "*" << rigsum <<"*"<<rig<< endl; } //cout << light[0][0]<<light[0][3] << light[1][0] << light[1][3]<<endl; int sum = lefsum < rigsum ? lefsum : rigsum; printf("%d\n",sum); } return 0;}
最后,吐槽一下这期cf的一个很奇葩的地方,c题提交数和过题数都远大于b(然而我并没有看c题),e题提交数和过题数都远大于d(d基本成防ak的题了),a题hack一片(我也不知道为什么,感觉我被hack纯属脑残,不属于技术问题啊),e题居然是本场比赛正确率最高的题(在交题数量相当可观的情况下)。
不过,总而言之,这是一场小失误连天的比赛,虽然没反映什么技术问题,但也一定要慎重对待啊。
- Codeforces Round #417 (Div. 2)
- Codeforces Round #417 (Div. 2)
- Codeforces Round #417 (Div. 2)总结
- Codeforces Round #417 (Div. 2) B
- Codeforces Round #417 (Div. 2) 题解
- Codeforces Round #102 (Div. 2)
- Codeforces Round #103 (Div. 2)
- Codeforces Round #103 (Div. 2)
- Codeforces Round #104 (Div. 2)
- Codeforces Round #105 (Div. 2)
- Codeforces Round #105 (Div. 2)
- Codeforces Round #107 (Div. 2)
- Codeforces Round #108 (Div. 2)
- Codeforces Round #110 (Div. 2)
- Codeforces Round #122 (Div. 2)
- Codeforces Round #121 (Div. 2)
- Codeforces Round #124 (Div. 2)
- Codeforces Round #124 (Div. 2)
- TensorFlow入门基本使用
- Win 7 配置FTP权限
- 从《2017年互联网趋势报告》看人工智能的发展
- 十段均衡器的设置和参数
- multer模块的使用 +文件上传+ 评论
- Codeforces Round #417 (Div. 2)
- java 多线程 总结三
- 75道面试逻辑智力测试题内附详细答案
- Codeforecs 812B Sagheer, the Hausmeister DP
- 01背包
- C# 2、10、16进制的相互转换
- 面试常见的逻辑推理题
- torch安装
- oracle数据库面试题目汇总