2020CSP-S第二轮游记

无秒

2020-11-08 12:24:50

Personal

许多话都一下子堵在心里,说不出来。 考试前翘了一周的课,每天打模板,结果到了考场后发现题目啥模板都没用上(T2的离散化太紧张都忘了,直接开了10^8的数组)。 考前爸妈还专门过来为我鼓劲,也是坐老爸的车来考试的,还有老师,同学,朋友,心里蛮温暖的。 进考场发现果然小学生和初中生有点多,信心倍增。结果旁边一个一中一个雅礼的,那打字敲键盘的声音太快了,就很慌。 T1大模拟(毒瘤出题人啊),就非常莫名其妙公元后就会多几少几,很神奇。后面发现估计是没考虑公元1年到公元1582都是按儒略历计算的。但是趁着最后半小时改改改改出来还是一样??所以就交了之前的代码上去了。总之就是思维难度低,码力要求极高。 然后民间数据一测,挂了,唉,爆0了,但是考场测大数据的时候没问题啊,希望真实成绩高点吧。 ```cpp #include<cstdio> #include<iostream> using namespace std; #define ri register int int q,x,ax=1461,ay=1721058,tmp; int y2,m1,d1,flag; int mouth[12]={31,28,31,30,31,30,31,31,30,31,30,31}; inline void read(int &x){ x=0;int f(0);char ch=getchar(); while(ch<'0'||ch>'9') f|=(ch=='-'),ch=getchar(); while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); x=f?-x:x; } int main(){ freopen("julian.in","r",stdin); freopen("julian.out","w",stdout); read(q); while(q--){ read(x); if(x<1721424){ x++; flag=0; y2=-4713+x/1461*4; x%=1461; if(x<=366) flag=1,mouth[1]++; else x-=366,y2++; y2+=x/365; x%=365; for(m1=0;m1<12;m1++){ if(x<mouth[m1]) break; x-=mouth[m1]; } if(x==0){ m1--; if(m1<0) m1+=12,y2--; x=mouth[m1]; } printf("%d %d %d BC\n",x,m1+1,-y2); if(flag) mouth[1]--; } else{ flag=0; x-=1721424; if(x>579090) x-=2; else x-=6; x++; y2=x/146097*400; x%=146097; y2+=x/36524*100; x%=36524; y2+=x/1461*4; x%=1461; if(x>1095){ y2+=3; flag=1; mouth[1]++; } else{ y2+=x/365; } x%=365; for(m1=0;m1<12;m1++){ if(x<mouth[m1]) break; x-=mouth[m1]; } if(flag) mouth[1]--; if(x<=0){ m1--; if(m1<0) m1+=12,y2--; x+=mouth[m1]; } printf("%d %d %d\n",x,m1+1,y2+1); } } return 0; fclose(stdin); fclose(stdout); } ``` T2本来打了个暴力后面发现可以优化就直接上了,是我唯一觉得很稳100的题,但是考完发现10^8的数组可能MLE,但是民间测试有一个点WA,几个点TLE(貌似nlogn都被卡),然后就呵呵了,65. ```cpp #include<cstdio> #include<iostream> using namespace std; #define ri register int int n,m,c,k,x,y,ans; long long a[1000010],s[66][1000010],tmp,maxn=1; bool vis[100000010],pd[66],flag; inline void read(int &x){ x=0;int f(0);char ch=getchar(); while(ch<'0'||ch>'9') f|=(ch=='-'),ch=getchar(); while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); x=f?-x:x; } bool check(long long z){ int i=0; tmp=z; while(tmp){ i++; if(tmp&1){ for(ri j=1;j<=s[i][0];j++) if(!vis[s[i][j]]) return 0; } tmp>>=1; } return 1; } int main(){ freopen("zoo.in","r",stdin); freopen("zoo.out","w",stdout); read(n),read(m),read(c),read(k); for(ri i=1;i<=n;i++) scanf("%lld",&a[i]); for(ri i=1;i<=m;i++){ read(x),read(y); ++s[x+1][0]; s[x+1][s[x+1][0]]=y; } for(ri i=1;i<=n;i++){ tmp=a[i]; x=0; while(tmp){ x++; if(tmp&1){ pd[x]=1; for(ri j=1;j<=s[x][0];j++) vis[s[x][j]]=1; } tmp>>=1; } } for(ri i=1;i<=k;i++){ if(pd[i]){ ans++; continue; } flag=0; for(ri j=1;j<=s[i][0];j++) if(!vis[s[i][j]]){ flag=1; break; } if(!flag) ans++; } for(ri i=1;i<=ans;i++) maxn<<=1; printf("%lld\n",maxn-n); return 0; fclose(stdin); fclose(stdout); } ``` T3直接暴力了,后面hsx大佬说的乘法逆元真的没想到,可能我太蒻了。暴力25. ```cpp #include<cstdio> #include<iostream> #include<vector> using namespace std; #define ri register int const int mo=998244353; int n,m,x,y,q; int a[100010],v[100010],p[100010],b[100010]; vector<int>s[100010]; inline void read(int &x){ x=0;int f(0);char ch=getchar(); while(ch<'0'||ch>'9') f|=(ch=='-'),ch=getchar(); while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); x=f?-x:x; } void f(int x){ if(b[x]==1) a[p[x]]=(a[p[x]]+v[x])%mo; else if(b[x]==2){ for(ri i=1;i<=n;i++) a[i]=(1ll*a[i]*v[x])%mo; } else{ for(ri i=1;i<=s[x][0];i++){ f(s[x][i]); } } } int main(){ freopen("call.in","r",stdin); freopen("call.out","w",stdout); read(n); for(ri i=1;i<=n;i++) read(a[i]); read(m); for(ri i=1;i<=m;i++){ read(b[i]); if(b[i]==1) read(p[i]),read(v[i]); else if(b[i]==2) read(v[i]); else{ read(x); s[i].push_back(x); for(ri j=1;j<=x;j++){ read(y); s[i].push_back(y); } } } read(q); while(q--){ read(x); f(x); } for(ri i=1;i<=n;i++) printf("%d ",a[i]); return 0; fclose(stdin); fclose(stdout); } ``` T4不会,但是没看到有3这种特殊情况,所以就直接贪心的做法,民间5分。 ```cpp #include<cstdio> #include<iostream> #include<algorithm> using namespace std; #define ri register int int t,n,tmp,num,k,x,y; int a[1000010]; int q[1000010]; bool cmp(int a,int b){ return a>b; } inline void read(int &x){ x=0;int f(0);char ch=getchar(); while(ch<'0'||ch>'9') f|=(ch=='-'),ch=getchar(); while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); x=f?-x:x; } inline void solve(){ sort(q+1,q+1+n,cmp); tmp=num=n; while(1){ for(ri i=1;i<num-1;i++){ if(q[i]-q[num]>=q[i+1]) q[i]-=q[num],num--; } if(tmp==num) break; tmp=num; } printf("%d\n",num); } int main(){ freopen("snakes.in","r",stdin); freopen("snakes.out","w",stdout); read(t);read(n);t--; for(ri i=1;i<=n;i++) read(a[i]),q[i]=a[i]; solve(); while(t--){ read(k); while(k--){ read(x),read(y); a[x]=y; } for(ri i=1;i<=n;i++) q[i]=a[i]; solve(); } return 0; fclose(stdin); fclose(stdout); } ``` 所以总共0+65+25+5=95.希望分数线第一点吧,然后考出来的高一点。 实际:10+80+35+0=125. 一年的OI了,多少辛酸说出来谁能懂呢?幸好我还有点信念,能够支撑我下去了,疫情一来,强基计划一打,我们之后,没有下一届了,本来十多个,到7个,5个,4个,3个。队长?这算队吗,自嘲一下。 回想一下,当时进入信息奥赛也是偶然,或者说是缘分吧。初中时我就参加过,从一个没碰过电脑的垃圾,连a+b都会打哭的人,到了后面高精a+b都能打出了。然后呢,就去了一中本部上了一年的样子吧,我承认,那时的我不懂事,没将信息奥赛学好。结果就被淘汰了,是很菜吧?苦笑.jpg. 然后到了中考后,因为我之前考中了一中的理实班,所以我先去那搞了一下的夏令营。虽然在故地,但当时选竞赛的时候不愿选信息了,选了物理。(所以我现在物理还挺好,一下就搞完了)但是最后出中考成绩的时候,只有4A,然鹅当时我们班上只有我一个4A和另外一个5A,全班不是直升就是6A,所以我不配有资格了呗,就滚到明德来了。 明德也举办了选竞赛的考试,每人可以报两门,我就报了物理和信息。本来报了信息以后我就后悔了,因为它看成绩进哪个竞赛,所以报了信息我肯定会进但是进不了物理。结果因为人少,加上学习委员的助攻和班主任的主攻,我去考了然后进了信息。还别说,物理就很离谱没有,那上面的题目我明明都会,只有一题写了个答案(这题我之前在一中上竞赛的时候学过,所以我直接把答案写上去了,但是过程忘了),可能是它怀疑我抄的然后判的0?不过算了。 进了信息以后,那就是拼命的学了,其中的艰辛也不想讲了,因为没人在意吧,记得有人说过:“考试完了后,只有人关注你的成绩,没人关注你有多累”。没有人知道。但是我想讲一下几个节点吧。一开始学一本通时很慢,学长他们一个月都不用就可以学完,但是我们很慢,所以老师批评了我们,我就更加抓紧了;到了寒假,只有7个人,郑学长给我们讲课,虽然当时挺痛苦的,毕竟学新的知识,新的难度,但是因为我是OI,我热爱信息,我才发现打那些头皮发麻的程序是痛并快乐着的,有一种孤傲的感觉在其中。结果途中有2人因为文化,走了。疫情,网课,别人虽然挺闲的,但是我们天天都要打程序到很晚,很晚,每次上床脚都是麻到毫无知觉了。有1个坚持不了了,而且他文化课本身就很好,所以干脆不搞了,直接靠裸分。还有1个,我觉得最可惜的一个,本身是真的热爱竞赛,但文化不行,实在是可惜。然后,不就3个了吗? # ~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~·~ 差不多,也就这些了吧,明天就出成绩了,希望明德最后一届的考试,能好一点吧。 ## 他也许明天就会回来,也许永远都不会回来。——《边城》 # 我是OI,孤傲的OI,永远的OI. 感触最深的一篇文章,来着NOIP吧:行走在镜面边缘的人---献给所有Oier ``` 我们都是行走在镜面边缘的人。 低下头看到的,是半个迷茫的自己,和半个不见底的深渊。 ——以此献给所有OIer,以及所有竞赛生,以及所有为梦想而不顾一切的人。 (名词简介:OIer,以信息学系列竞赛为目标的竞赛生的简称。) 理想在哪里?未来在哪里? 当初我们或犹豫或坚决地走上了学科竞赛这条路,在现实的大门面前。 我们有着这样那样的理由,或者是兴趣,或者是保送。 但是在我们踏上这条路的时候,几乎就没有了退路。 今天是河南省信息学竞赛省队选拔赛。 vani发来短信说,他挂了,求安慰。 我无言。大概去年秋天,我败在联赛赛场上的时候,也说过类似的话。 包括去年夏天在烟台,去年五月在北京。 学科竞赛是一条难以预料的路。就算你有超神的实力,也会考出2B的成绩。 虽然高考也是,但我想高考还不及学科竞赛这样难以捉摸。 数学二试,只有4道大题,一道大题40或50分,基本拿不到过程分,要么就是做出来,要么就是做不出来。高考一道题,不会让你从一本A类栽倒二本;而数学一道题,可能就是保送和二等的区别。 信息国赛,每试5个小时3道题,一道100分;更忐忑的是,数学你写错一个字可能还会蒙混过关,但在信息竞赛里,打错一个字,很可能100分的程序就是零蛋。因为失误丢掉一百多分的例子,比比皆是。 如果只是这样,也就算了;如果只是付出不一定得到回报,也就算了。 竞赛的苦不在出成绩的那一刻;你要付出的,也远远不是考砸的几滴泪水。 没有战友。没有同伴。一群同是天涯沦落人的OIer,在网上结识,互相鼓励,一同努力。 而当你掐掉本机电源回到现实的时候,是鄙夷的老师,是遥远的同学,是叹息的家长,是堆积成山的小卷子,是不堪入目的月考分。 高考是主流,竞赛是非主流,而学信息的更是非主流中的非主流。 “学那有什么用?高考又不考。” 看到高考生捧着一张张流光溢彩的月考卷子,只有一声叹息。 看到数学(物理/化学/生物)老师赞许地看看那些上课看数学(物理/化学/生物)竞赛的尖子,只有一声叹息。 看到其他学科竞赛的同学三五成群激烈地讨论,还是只有一声叹息。 自习课,班主任抽走来不及藏的《算法设计》,面无表情地“你下课来一趟”。 考试后,同学小心翼翼地发给你一张满是红叉的卷子。 遇到难题不会做时,一个人苦思冥想,看着QQ里的灰色头像,不知该求助谁。 因为条件所限,只能在晚自习回家后编码到半夜,第二天头晕脑胀地再去学勒夏特列原理。 最难过的是父母一次次地无奈询问,“现在文化课还能跟得上么?不行就别学了……” …… 大家都说,高考是千军万马过独木桥,不容易。 可是又有几个“大家”知道,竞赛是一个人摸黑走路,盲人骑瞎马,半夜临深池? 在无数个孤独清冷的深夜,无数次羡慕已经安然入梦的同学们。 我们都是行走在镜面边缘的人。 低下头看到的,是半个迷茫的自己,和半个不见底的深渊。 到哪里,会不会跌倒,是到终点还是滑进深渊,都不知道。 唯一确定的是,自己只有一个人。 世界上有天才,这无可否认; 但天才不是我,想到终点,只有靠努力。 所以从高一开始就过上高三的生活,所以无奈地跟社团活动集体活动等等等等说再见。 所以从高一开始就习惯在半夜以后入睡,习惯一个人在寒冷的夜里机械地敲动手指,而双脚因为长时间坐姿已经冰凉。 戒掉游戏。戒掉小说。戒掉感情。戒掉漫画。戒掉泡吧。最终甚至戒掉文化课。 这就是OIer的选择。 只剩下孤身一人的卑微,和遍体鳞伤的坚强。 刚刚vani说,他卡线进队了。 心里一块石头总算落了地。 他又说,去年联赛满分的xmz神牛,没有进队。 想起去年在烟台,我邻桌的湖北女生失声痛哭。 想起在长沙认识的另一位湖北神牛短信里,无奈的“挂了”。 想起连挂六次决然高考的小胖。 想起去年五月的我,去年八月的我,去年十一月的我。 选择了做一名OIer,就选择了要孤独,要坚强,要百折不挠,要在跌倒之后擦干血和泪,继续在无尽的夜里走下去。 六月份省选,八月份全国赛,能走多远,我不知道。 已经想好要做两手准备,如果兵败吉林,我还可以回来搞保送生考试。 可是如果保送生考试再输了呢? …… 可是如果自主招生考试再输了呢? ………… 可是如果高考还是输了呢? ………………………… 镜面的边缘,滑一步就是万丈深渊。 为了兴趣或者为了保送——总之我们赌上了我们的高中。 记得有一次,一个家长讽刺我说,“计算机竞赛有什么了不起,数学物理拿了保送才叫真本事。” 更多的家长讽刺说,“竞赛拿保送有什么了不起,高考才是真本事。” 本事你妹。没什么了不起,您来试试?或者您家公子来试试? 可是冷静下来,这就是竞赛生,以至OIer的现状。 不成功没人看得起。成功了还是没人看得起。 老师看不起,家长看不起,有些同学也看不起。 总之就是没人看得起。 你可以说,这是潇洒,逍遥,特立独行。 但心里清楚,这是孤独,卑微,前途暗淡。 虽然这也让我们多了一份磨砺,多了一份坚强。 物理竞赛吧有人说,PhO makes a man man. 我想不管哪一门竞赛都是一样。 选择竞赛,选择OI,既是痛苦,亦是福祉。 5月生物联赛。6月信息省选。8月信息全国赛。9月物理化学联赛。10月数学联赛。 Bless all. ```