时间
8:00~8:10 看题,T1感觉是dp,T2期望,T3第一眼感觉是KMP,T4大模拟?
8:10~9:40 T1,找到了后面的5个一定是在一起的,所以这需要去寻找前面三个的位置,这是dp吗,感觉又不像是,就这样写了前两档,下一档分是 a [ i ] ≤ 50 , n ≤ 500000 a[i]≤50,n≤500000 a[i]≤50,n≤500000,而一共就只要7个,所以 50 × 7 = 350 50×7=350 50×7=350,这样就把n减少到了350个,dp可做。最后的一档分就直接贪心的去求,(暴力出奇迹,贪心骗dp),把后6个作为连续的,就这样写完了。
9:40~10:40 T3,直接用上自己写的算法,把相同的char链接起来,然后去匹配,在调试的时候,发现:
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
这个加速的代码会影响到最终的答案输出,不理解,只好删了,应该是加上这句话后就不可以写 s t i n g s ; c i n > > s ; sting s; cin>>s; stings;cin>>s;不过 c i n cin cin写 s t r i n g string string也很快。
10:40~12:00 模拟好早就写完了,但是第二个大样例搞了好久,一直读不进去,preopen一直不知道咋去输出,一点点把超级长的数换行,麻了,必须得弄到咋用preopen去输出。
题目
T1 水数据,直接sort,从前往后只要有符合条件的连续的七个,直接输出answer。分段写错了,只有80。hack后只有50分,而写的循环中有一句话,应该是continue,但写成了back,直接wa了,但是写的时候,既然不是dp,为啥还要去设数组?用ans去不断的维护一个MAX就行,思维上的固化导致了愚昧啊。
T3 这道题的数据也有问题,只有35,但是hash直接过,hack后分数是65,但是设置的KMP是50分,所以我写的是更优解?因为是随机的数据,而且是24个字母,所以按照上次考试的思路,会往后进行大量的剪枝,离谱的是,上面↑的那个加速代码加上后,所以再试样例是是输出错误,但是加上后再交一次就直接80分,但并不知道这是为啥。正解是AC自动机,不会,但是可以学。机房大佬还有想到根号分治,优雅的暴力。
T4 超时完全了,没有想性质,甚至连自己的复杂度都不去推推,直接无脑模拟,在铁定的时间复杂度下,是完全没有必要去乱码的,浪费时间与精力,一定要确保自己的正确性后再动手,否则就会非常的被动。
T2 自己的数学期望是真的不是很会,遇见这种题只可以宣告投降,想要去避免,就得开始对待这种题目,去和它对抗吧。
反思
T1注意的还是不全,还是有细节上的失分,对于分段上的处理要再小心一点。
这次考试对于ios::…下来一个新的定义,可能会对string类型在样例层面出现问题,但是对于答案是没有影响的。并且是真的快。 还有一个分享:
char s[N];
cin>>s+1;//下标从1~n的char数组
n=strlen(s+1);//char数组的长度
但是换上之后没啥区别,还是不能过样例。。。。。。。
然后就说说freopen的问题,终于明白了为啥提交时要放到一个文件夹中,就是因为想要得到freopen的输出**,就要.in和.cpp在一个文件夹中,并且还要有return 0,这样才会有输出的answer,并且在这种方法下,ios::sy…输出是没有问题的,哇塞,以后就用这个了,感觉超级方便啊。然后就是得注意一下,在提交代码时,.in,.out,.exe都要删掉,**否则,后果有点高哦。
期望期望值得一看,有点反常识,但是总得学吧,(学习是为了充实自己,而不是面对考试)。