无秒 的博客

无秒 的博客

2020CSP-S第二轮游记

posted on 2020-11-08 12:24:50 | under NOIP |

许多话都一下子堵在心里,说不出来。

考试前翘了一周的课,每天打模板,结果到了考场后发现题目啥模板都没用上(T2的离散化太紧张都忘了,直接开了10^8的数组)。

考前爸妈还专门过来为我鼓劲,也是坐老爸的车来考试的,还有老师,同学,朋友,心里蛮温暖的。

进考场发现果然小学生和初中生有点多,信心倍增。结果旁边一个一中一个雅礼的,那打字敲键盘的声音太快了,就很慌。

T1大模拟(毒瘤出题人啊),就非常莫名其妙公元后就会多几少几,很神奇。后面发现估计是没考虑公元1年到公元1582都是按儒略历计算的。但是趁着最后半小时改改改改出来还是一样??所以就交了之前的代码上去了。总之就是思维难度低,码力要求极高。

然后民间数据一测,挂了,唉,爆0了,但是考场测大数据的时候没问题啊,希望真实成绩高点吧。

#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.

#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.

#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分。

#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.