2020CSP-S第二轮游记
无秒
2020-11-08 12:24:50
许多话都一下子堵在心里,说不出来。
考试前翘了一周的课,每天打模板,结果到了考场后发现题目啥模板都没用上(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.
```