嗯.......这次只考了280,心情非常不好的说。关于这次只考了280的原因,主要是这样的:前三道敲太快了,第四道卡的时间太长了,敲完第四道还不仔细看前三道,而且因为第四道改的程序太多了,本来有些简单的地方也被复杂化了,导致数据超时了4组,本来只会超时三组的.....心累.....因为自己想出来的数据测试死活不对,然后就改了好多,然后......就没有然后了。So,
警告一:当你的程序有地方不对的时,可以改;但要记得先将你的原程序找个文本文档存下来。然后当你改对之后,记得将原程序和现在的对比,如果原程序有比现在的处理更简单的,一定要优化现在的程序。不然....你就等着超时的数据更多吧,除非你可以肯定一定不会超,但最好是改过来。
而且到现在为止,我都没想通自己第一题为什么会错。评测成绩出来,我一直就很诧异为什么第一题只拿了70。明明我的思路是对的,而且代码和100的基本上也一样。但看完最简洁的,顿时心灵受伤了....就这样,又一个道理:
警告二:理解题意后,即使发现这道题 very easy也照样不能放松。说不定,极端数据和特殊数据就会在这种时候坑掉你二三十分甚至更多。而且,代码能够简单就不要把它复杂化,前提在于简单的代码是复杂代码的精髓,没有少了哪一部分。如果你不能100%的保证,那就用原来复杂的吧,在确认能拿分的前提下,再考虑复杂度,否则方法是简单了,照样拿不到分。
第三题也没想通为什么会错,但慢慢分析,得出的结论和警告二是差不多的,就不再敲出来了。还是那句话,能简单就不要复杂。
第四题是让我最心累的一题,直到现在,还是没有AC。因为数据太大,如果想要AC,用的是散离化的思想,因为数据太大了,二重循环也会超时,如果不想让超时,只能用散离化的想来做。AC的那段代码虽然用的是散离化,但理解起来却有些困难。我是按照自己的思路来敲的,可是才拿了40....无语...代码也贴出来了
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int yt[1000100]={},s[30000],f[30000];
int main()
{
freopen("t4.in","r",stdin);
freopen("t4.out","w",stdout);
int n,k,j=1;
cin>>n>>k;
for(int i=1;i<=k;i++)
cin>>s[i]>>f[i];
while(j<=n+1)
{
if(s[j]>f[j]) j++;
yt[s[j]]++;
s[j]++;
}
sort(yt+1,yt+1+n);
cout<<yt[(n+1)/2];
return 0;
}
第四题的题简单来说,有n个盒子,k次操作,每次往编号从a到b的盒子里放一块糖(盒子的编号是1到N),再将糖的数量排序,输出中位数。
其实关于第四题的总结和反思,就是警告一了,但还有要补充的。
警告三:关于大数据的一些题,先不要想着一下子所有的数据都可以过,也就是不要想着可以一次AC,这是最不现实的。一点一点来,先保证小数据和特殊数据没问题。将这样的代码先复制到文本文档里之后,在修改。举个例子,如果原来用的是二重循环,但是如果想要全部AC的话,只能用一重循环。那么就可以加一些预处理,如果不行的话,可以重敲,但记得注意时间。当你改完过后,如果对你敲的代码没有信心,可以自己多编几组数据试试,前提在于自己不能算错。如果对了(前提在于记得要多试几组),那可以提这个;如果没对你又没时间改了,那你就提交原来的吧,能拿一点是一点,不要太贪心。太贪心结果就有可能是搬起石头砸自己的脚。
警告四:当剩时间不多时,就像还剩10分钟左右时,如果你还没敲完,那可以选择放弃了,除非你有把握能在四五分钟内结束。只剩五六分钟了,不管你原来在干什么,都停下来,检查文件名,输入输出,以及和题上要求的一不一样,代码弄错了没。尤其记得,文件名每道题的都不同,千万不能弄错。否则小心零分哦。
好了,就这样了。
本次分享主要围绕编程竞赛中出现的问题及解决策略展开,包括代码优化、数据处理技巧、时间管理等,适合所有热爱编程竞赛的朋友。
2549

被折叠的 条评论
为什么被折叠?



