【NOIP2016】普及组复赛赛后总结
虽然真实成绩还没出来,但也在一个OJ上自己测了(民间数据):
https://www.luogu.org/contest/show?tid=1265
(比赛已关闭,但题是可以交的)
PS:带蓝色是题解链接
以下总结下普及组考后各种恶心,想吐,难受,想哭的东西:
1.第一题,额……不用说,只是为了不打击我们脆弱的心灵而已。
2.第二题,辛辛苦苦写了100行,调了1小时的代码只得了50分……(。•ˇ‸ˇ•。)不服!一个pascal的11行代码骗了60分(请欣赏):
var x,y:string; i:integer; begin readln(x); readln(y); for i:=1 to 4 do if(x[i]<>x[8-i+1]) then begin writeln(0);exit;end; writeln(1); end.虽然是学的C++,但这种代码还是没问题的,他只是完成60%的子任务,早知道我也只看第一个子任务了,我的10分,❤疼……
还是把自己看高了,信心满满地打了一大篇……还不如完成子任务,so,以后还是自持点……好好骗分就够了
最后两道就极其爽……猥琐!了,一道爆空间,一道爆时间……
3.我很伤心(;′⌒`)整整30分,只是因为不会算空间(狂扇自己巴掌)!请看暴搜代码:
#include<cstdio> #include<cstring> #define H 86400 #define MAXN 350//就是这里 int n; int t[MAXN+5],na[MAXN+5][MAXN+5],p[MAXN+5]; bool f[MAXN+5]; int main() { //freopen("port.in","r",stdin); //freopen("port.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) { int sum=0; scanf("%d%d",&t[i],&p[i]); for(int j=1;j<=p[i];j++) { scanf("%d",&na[i][j]); if(!f[na[i][j]]) { sum++; f[na[i][j]]=true; } } int tb=t[i]-H; for(int j=1;j<=i;j++) { if(t[j]<=tb) continue; for(int k=1;k<=p[j];k++) if(!f[na[j][k]]) { sum++; f[na[j][k]]=true; } } printf("%d\n",sum); memset(f,false,sizeof(f)); } //fclose(stdin); //fclose(stdout); return 0; }
其他的不想多说只是看看第四行,350……知道我怎么算的空间吗?
printf("%d",(sizeof(t)+sizeof(na)+sizeof(p)+sizeof(f))/1024);只除了一个1024!!然而,前面是字节!字节!字节!(B)
甜辣卤!我其实一直在想这个问题,这样好大啊,但,我却一直在跟KB较真,事实上KB的确只需要除以一个1024即可,请允许我再说一遍:前面是字节!字节!字节!(B) -->前面是字节!字节!字节!(B)(重要的事情说9遍)
所以……要除2遍1024!!于是我们愉快地失去了30分……烦啊!!
4.暴搜嘛,然而还是少了5分……大家先看看这样一道题:
输入3个数,如果它们是升序排列,输出yes,反之输出no
好简单啊,好的,请看我的:
if(x[a]<x[b]&&x[a]<x[c]&&x[a]<x[d]&&x[b]<x[c]&&x[b]<x[d]&&x[c]<x[d])//不用在意用的数组 printf("yes");你知道咩(反正我当时不知道(再次扇巴掌)),事实上直接这样就行了:
if(x[a]<x[b]&&x[b]<x[c]&&x[c]<x[d]) printf("yes");好像也无伤大雅……这道题是的,但如果改成了:有多组数据(<100^4)总时间限制1S,用第一种显然会慢很多(所谓小流积大河),而后一种是较快的……
so考试这道题爆搜四重循环,让我们算算,(6-3)*100^4……呵呵呵呵我就呵呵。于是又少了5分(一个点)。
最后,这次一共不该失的分有45分!!整整45分啊……(ㄒoㄒ)~~
ps:成绩出来才发现事实上数据很水,第二题我竟然得了70分……
By WZY