CSP2024-J2 游寄

All_Wrong_Answer

2024-11-05 20:04:42

Life & Travel

初赛:见初赛游寄,J89,

S32

不要问我为什么初赛有S的复赛只有J的。

游寄正文:

Day-1:

中午跟着学校大巴去了东莞,带了电脑去玩游戏复习。

在车上和室友@ni_ju_ge红名大佬pyh,pyh在刷B站

坐了4h车才到了酒店,吃了晚饭就回房间了,背模板,背了快读快写、优先队列和最小生成树,但是一个都没考QAQ

pyh在偷流量下载原神,偷了40G

晚上8点,背不动了,开始玩yorg.io,打到了两百多天。

晚上9:30,去教练房间交电脑,pyh把原神挂在后台接着下载。

晚上11点,看了一场CBA,pyh还想看,但我实在太困了,直接关灯睡了。

Day1:

上午6:50起床,洗漱了一下吃了个早饭,酒店的早餐不好吃。

买了一杯果粒橙和2版巧克力还有一包好丽友。

进考场,填考试须知,果粒橙还没开考就要被我喝光了,只能装了一杯水。

开考:

T1:

入机题目,出题人甚至贴心地打上了:输入的 n 个字符串每个都代表一张合法的扑克牌

用了map切了,代码:

#include <bits/stdc++.h>//RP++
using namespace std;//RP++
map<string,bool>f;//RP++
string a;//RP++
int x,s=0;//RP++
int main(){//RP++
    freopen("poker.in","r",stdin);//RP++
    freopen("poker.out","w",stdout);//RP++
    cin>>x;//RP++
    for(int i=1;i<=x;i++){//RP++
        cin>>a;//RP++
        if(f[a]==false){//RP++
            s++;//RP++
            f[a]=true;//RP++
        }//RP++
    }//RP++
    cout<<52-s;//RP++
    return 0;//RP++
} 

T2:

考场上感觉就一模拟题,直接模拟就OK,代码:

#include <bits/stdc++.h>//RP++
using namespace std;//RP++
int x;//RP++
int a,b,c,d,e,f;//RP++
char m[1005][1005];//RP++
bool flag[1005][1005];//RP++
int main(){//RP++
    freopen("explore.in","r",stdin);//RP++
    freopen("explore.out","w",stdout);//RP++
    cin>>x;//RP++
    for(int i=1;i<=x;i++){//RP++
        int da=1;//RP++
        for(int j=1;j<=1000;j++){//RP++
            for(int k=1;k<=1000;k++){//RP++
                flag[j][k]=false;//RP++
            }//RP++
        }//RP++
        cin>>a>>b>>c>>d>>e>>f;//RP++
        flag[d][e]=true;//RP++
        for(int j=1;j<=a;j++){//RP++
            for(int k=1;k<=b;k++){//RP++
                cin>>m[j][k];//RP++
            }//RP++
        }//RP++
        for(int j=1;j<=c;j++){//RP++
            if(f==0&&(e+1)<=b&&m[d][e+1]=='.'){//RP++
                e++;//RP++
                if(flag[d][e]==false){//RP++
                    da++;//RP++
                    flag[d][e]=true;//RP++
                }//RP++
            }//RP++
            else if(f==0) f++;//RP++
            else if(f==1&&(d+1)<=a&&m[d+1][e]=='.'){//RP++
                d++;//RP++
                if(flag[d][e]==false){//RP++
                    da++;//RP++
                    flag[d][e]=true;//RP++
                }//RP++
            }//RP++
            else if(f==1) f++;//RP++
            else if(f==2&&(e-1)>0&&m[d][e-1]=='.'){//RP++
                e--;//RP++
                if(flag[d][e]==false){//RP++
                    da++;//RP++
                    flag[d][e]=true;//RP++
                }//RP++
            }//RP++
            else if(f==2) f++;//RP++
            else if(f==3&&(d-1)>0&&m[d-1][e]=='.'){//RP++
                d--;//RP++
                if(flag[d][e]==false){//RP++
                    da++;//RP++
                    flag[d][e]=true;//RP++
                }//RP++
            }//RP++
            else if(f==3) f=0;//RP++
        }//RP++
        cout<<da<<endl;//RP++
    }//RP++
    return 0;//RP++
} //RP++

T3:有了一点难度,先是推了个式子

剩2选1,剩5选2,剩4选4,剩6选0,剩3选7,剩7选8 

然后脑袋炸了,认为应该以2开头后多选0,最后也是成功的写挂了。

上了个厕所终于想到如果数要尽可能小,那么数为一定要少,推出了要多选8,但是当时还是没有摆脱选0的思维,于是就打出来了一个我赛后都不知道自己在干嘛的代码,当时甚至觉得自己可以AC。

赛时迷惑代码:

#include <bits/stdc++.h>//RP++
using namespace std;//RP++
int x;//RP++
int a,st1,st2;//RP++
//RP++
int da1[2000005];//RP++
int da2[2000005];//RP++
//剩2选1,剩5选2,剩4选4,剩6选0,剩3选7,剩7选8 
void dfs(int n,int s,int t){//RP++
    if(n==0){//RP++
        if(s<2){//RP++
            cout<<"-1"<<endl;//RP++
            st1=-1;//RP++
            st2=-1;//RP++
        }//RP++
        if(s==2){da1[n]=da1[n]=1;st1=st2=n;return ; }//RP++
        if(s==5){da1[n]=da2[n]=2;st1=st2=n;return ; }//RP++
        if(s==4){da1[n]=da2[n]=4;st1=st2=n;return ; }//RP++
        if(s==6){da1[n]=da2[n]=6;st1=st2=n;return ; }//RP++
        if(s==3){da1[n]=da2[n]=7;st1=st2=n;return ; }//RP++
        if(s==7){da1[n]=da2[n]=8;st1=st2=n;return ; }//RP++
        if(s>=8){//RP++
            //RP++
            if(s==8){//RP++
                da2[n]=2;//RP++
                dfs(n+1,s-5,1);//RP++
            }//RP++
            else{//RP++
                da2[n]=8;//RP++
                dfs(n+1,s-7,1);//RP++
            }//RP++
            da1[n]=2;//RP++
            dfs(n+1,s-5,2);//RP++
            //RP++
        }//RP++
        //RP++
    }//RP++
    else if(t==1){
        if(s==2){da2[n]=1;st1=n;return ; }//RP++
        if(s==5){da2[n]=2;st1=n;return ; }//RP++
        if(s==4){da2[n]=4;st1=n;return ; }//RP++
        if(s==6){da2[n]=0;st1=n;return ; }//RP++
        if(s==3){da2[n]=7;st1=n;return ; }//RP++
        if(s==7){da2[n]=8;st1=n;return ; }//RP++
        if(s<2) return ;//RP++
        if(s==8){da2[n]=0,dfs(n+1,2,1);};//RP++
        if(s>8){//RP++
            da2[n]=8;//RP++
            dfs(n+1,s-7,1); //RP++
        }//RP++
    }//RP++
    else if(t==2){//RP++
        if(s==2){da1[n]=1;st2=n;return ; }//RP++
        if(s==5){da1[n]=2;st2=n;return ; }//RP++
        if(s==4){da1[n]=4;st2=n;return ; }//RP++
        if(s==6){da1[n]=0;st2=n;return ; }//RP++
        if(s==3){da1[n]=7;st2=n;return ; }//RP++
        if(s==7){da1[n]=8;st2=n;return ; }//RP++
        if(s<2) return ;//RP++
        if(s>=8){da1[n]=0,dfs(n+1,s-6,2);};//RP++
    }//RP++
}//RP++
int main(){//RP++
    freopen("sticks.in","r",stdin);//RP++
    freopen("sticks.out","w",stdout);//RP++
    //RP++
    cin>>x;
    for(int i=1;i<=x;i++){//RP++
        cin>>a;//RP++
        dfs(0,a,0);//RP++
        sort(da1,da1+1+st2);//RP++
        sort(da2,da2+1+st1);//RP++
        int sf=0,su=0;//RP++
        if(st2>st1){//RP++
            for(int j=0;j<=st1;j++){//RP++
                if(da2[j]==0&&sf==0) su++;//RP++
                 else if(da2[j]!=0&&sf==0){//RP++
                    sf=1;//RP++
                    cout<<da2[j];//RP++
                    for(int k=1;k<=su;k++) cout<<"0";//RP++
                }//RP++
                else if(sf==1) cout<<da2[j];//RP++
           }//RP++
        } //RP++
        else if(st2<=st1){
            for(int j=0;j<=st1;j++){//RP++
                if(da1[j]==0&&sf==0) su++;//RP++
                 else if(da1[j]!=0&&sf==0){//RP++
                    sf=1;//RP++
                    cout<<da1[j];//RP++
                    for(int k=1;k<=su;k++) cout<<"0";//RP++
                }//RP++
                else if(sf==1) cout<<da1[j];//RP++
           }//RP++
        }//RP++
        cout<<endl;//RP++
    }//RP++
    return 0;//RP++
} //RP++

一共99行

T4:太难了,感觉是图论,但很明显本蒟蒻不会,只打了一个dfs的暴力,10分

代码:

#include <bits/stdc++.h>//RP++
using namespace std;//RP++
int x;//RP++
int a,b,c;//RP++
int m[10005][10005];//RP++
bool flag[1005][10005];//RP++
int q,p,us[10006],f=0;//RP++
void dfs(int n,int shr,int shz){//RP++
    //cout<<"           "<<n<<' '<<shr<<" "<<shz<<endl<<endl;
    if(shz==0) return ; //RP++
    if(n>q||f==1) return ;//RP++
    if(shz==p&&n==q){//RP++
        f=1;//RP++
        return ;//RP++
    }//RP++
    for(int i=1;i<=a;i++){//RP++
        if(shr!=i){//RP++
            for(int j=1;j<=us[i];j++){//RP++
                if(m[i][j]==shz){//RP++
                    for(int k=2;k<=b;k++){//RP++
                        //if(flag[i][j+k-1]==false){
                            //flag[i][j+k-1]=true;
                            dfs(n+1,i,m[i][j+k-1]);//RP++
                            //flag[i][j+k-1]=false;
                        //}

                    }//RP++
                }//RP++
            } //RP++
        }//RP++
    }//RP++
}//RP++
int main(){//RP++
    freopen("chain.in","r",stdin);//RP++
    freopen("chain.out","w",stdout);//RP++
    cin>>x;//RP++
    for(int i=1;i<=x;i++){//RP++
        cin>>a>>b>>c;//RP++
        for(int j=1;j<=a;j++){//RP++
            cin>>us[j];//RP++
            for(int k=1;k<=us[j];k++) cin>>m[j][k];//RP++
        }//RP++
        for(int j=1;j<=c;j++){//RP++
            cin>>q>>p;//RP++
            f=0;//RP++
            dfs(0,0,1);//RP++
            if(f==1) cout<<1;//RP++
            else cout<<0;//RP++
            cout<<endl; //RP++
        }//RP++
    }//RP++
    return 0;//RP++
} //RP++

打完了T4还剩下10分钟,没事干了,查了一遍freopen对拍了一次自己造的大样例最后看了一遍数组大小。

最后3分钟把所有的代码都打上了RP++

赛后:

到了外面见到了pyh和两个初一就打S的神犇lhy@linhongyi和cyt@thluogu

他们都在说T2是搜索,给我吓了一跳,又在说T3数学题,写了迷惑代码的我只能在一旁瑟瑟发抖。

中午回到酒店吃了午饭,酒店的午餐还不错。

回到房间拿回电脑,pyh的原神竟然真的下载好了,%%%

刷了一会B站又玩了yorg.io。

下午S组的lhy和cyt还有学长们都不在,我们几个只打J的初一蒟蒻跟着教练去了一个公园,叫什么我都不记得

我们车上唯一一个xxs甚至CSP当天过生日,得吃一口蛋糕,常量生日歌。

晚上,上大巴回韶关,车上没有余粮了,最后一口炸鸡还要留给高中学长,只能花了20大洋在服务区买了一个鸡蛋仔。

在车上没事干,先是打三国杀,然后玩了一下游戏,发了不知道多久的呆终于回到韶关了。

当晚到家直接倒头就睡。

2024.11.4

上完学回家听说出分了,抱着忐忑不安的心开始查分:

T1:100 很合理

T2:100 竟然真是模拟

T3:60 只过了AB的特殊性质QAQ,但有那么高也是意料之外的了

T4:10 符合预期

总分100+100+60+10=270,应该1=了吧,坐标GD

问了一下机房队友,pyh100+100+60+0=260,lhy的J100+50+60=210,S55+0+35+0=80,不知道他能不能拿到蓝勾,cyt的J100+100+60+0=260,S100+20+0+0=120,应该有蓝勾了。

The end

求关注QAQ