一片伟大的净土

灵魂的归处,肉体的坟墓。

蓝桥杯备赛

2024/2/28

点击查看详情

upd:2024-4-1 关于离散化
如果离散化之后用到的不是点,而是点和点之间的关系,线段。
那么可能会有 1-2覆盖3 2-3覆盖2 3-4覆盖1,可以发现中间的2-3,被左右两边抵消看不到了。
此时离散化需要将点x,右边的x+1,也进行离散化。
注意使用set和map离散化时候,x+1会出现重复的情况,注意判断,if(!f[x])f[x]=cnt++;

upd:2024-3-14 一些细节问题
提交代码的时候记得选择编译器版本,如果使用DevC5.11的就提交C++11
DevC仅支持C++11及以下的版本
据说目前蓝桥可以使用C++14,注意选择编译器版本,没有的话就不要用
lambda表达式和auto自动变量

upd:2024-3-12 无限制输入问题
没有告诉输入多少行,就要用while(cin>>n)
或者while(getline(cin,s))了,输入结束之后会自动结束
需要学习getline的用法。(注意getline和cin混用的问题,最好不要混用,往下看有提到)
输入数据最后都是EOF,输入到这个循环就自动结束了,
但是本地调试的时候不会结束,需要自己按ctrl+D,会显示^D,也就是输入了EOF(即终止程序)

upd:2024-3-12 不能提交查看对错,自己造数据测。
这个OI赛制摆在这没办法,但是我们可以自己造数据
暴力代码先写出来,如果算过不会超时,那就直接提交暴力代码(一定要保证暴力代码是对的)
如果会超时,暴力代码放一边,写正确代码,写完之后再写一个程序随即跑数据。
srand(time(NULL)),然后用rand函数随机生成测试数据,往暴力代码和正确代码里面放
然后对一下输出结果就行了。
rand返回的是 0~MAX,左闭右开,用取模和加法来定范围。
另外的,数据范围里面的极限情况多测试,最小值和最大值,很容易出问题。

upd:2024-2-28 cin和getline混用的问题
诡异的蓝桥杯拥有与众不同的输入数据。
假设有输入
1 
10 12
正常都是
1\n
10 12\n
蓝桥杯就有可能是
1\r\n
10 12\r\n
如果有需要输入一行的问题(带着空格输入),要用到string s,getline(cin,s)和cin。
那么需要在cin完毕之后,使用cin.ignore(1024,'\n')来消除输入对getline的影响。