CSP2024 游记

· · 生活·游记

Day ?

打初赛,感觉谜之简单。

打完看了一下 DX 和兔队的答案,90.5 分。

有惊无险。

Day -1

打最后一场模拟赛,【CSP-S】模拟赛,但是 T1 的标答是莫比乌斯容斥,T4 是抽搐 DP,怎么会是呢?RP 掉光了。

当天上午

敲了一会儿电子木鱼,把音效换成了 Ciallo~(∠・ω< )⌒★,心情好起来了。

打了一下昨年的结构体,感觉很简单,一下子就写完了。随手调了两下就过了,但昨年感觉完全不可做,还是太菜了。

#include<bits/stdc++.h>
#define int long long
#define mk make_pair
#define sec second
#define endl '\n'
#define fi first

using namespace std;
typedef pair<string,int> psi;
typedef pair<int,int> pii;
const int N=110;
inline int getval(int x,int y){return x?((x-1)/y+1)*y:0;}
struct node{map<string,int> pre;vector < string > v;int lim,siz;}d[N];
map<string,int> p;map<string,pii> element;
int now,cnt,tot,n;string s,t,c[N];

void predo(){
    tot=4;
    d[1].lim=1;d[1].siz=1;p["byte"]=1;
    d[2].lim=2;d[2].siz=2;p["short"]=2;
    d[3].lim=4;d[3].siz=4;p["int"]=3;
    d[4].lim=8;d[4].siz=8;p["long"]=4;
}
inline void init(node &c,int k){
    for(int i=1;i<=k;++i){
        cin>>s>>t;
        int id=c.pre[t]=p[s];
        c.v.emplace_back(t);
        c.lim=max(c.lim,d[id].lim);
        c.siz=getval(c.siz,d[id].lim)+d[id].siz;
    }
    c.siz=getval(c.siz,c.lim);
    cout<<c.siz<<' '<<c.lim<<endl;
}
inline void der(){
    cin>>s>>t;
    int id=p[s];c[++cnt]=t;
    cout<<(now=getval(now,d[id].lim))<<endl;
    element[t]=mk(id,now);now+=d[id].siz;
}
inline void ask(){
    cin>>s;t.clear();s+='.';
    int st=0,id=0,las=0;
    for(int i=0;i<s.size();++i){
        if(s[i]=='.'){
            st=element[t].sec;
            id=element[t].fi;
            las=i;t.clear();break;
        }else t+=s[i];
    }
    for(int i=las+1;i<s.size();++i){
        if(s[i]=='.'){
            for(auto j:d[id].v){
                int tmp=d[id].pre[j];
                if(j==t){
                    st=getval(st,d[tmp].lim);
                    id=tmp;break;
                }else st=getval(st,d[tmp].lim)+d[tmp].siz;
            }
            t.clear();
        }else t+=s[i];
    }
    cout<<st<<endl;
}
void dfs(int id,int k,int now){
    if(id<=4) return ;
    s+='.';
    for(auto i:d[id].v){
        int tmp=d[id].pre[i];
        now=getval(now,d[tmp].lim);
        if(now>k){s.clear();s="ERR";return ;}
        if(now+d[tmp].siz>k){s+=i;dfs(tmp,k,now);return ;}
        now+=d[tmp].siz;
    }
    s="ERR";
}
inline void query(){
    int k=0,id=0,QAQ=0;cin>>k;s.clear();
    if(k>=now){cout<<"ERR\n";return ;}
    for(int i=1;i<=cnt;++i){
        pii tmp=element[c[i]];
        if(k<tmp.sec){cout<<"ERR\n";return ;}
        if(k<tmp.sec+d[tmp.fi].siz){
            id=tmp.fi;QAQ=tmp.sec;
            s=c[i];break;
        }
    }
    dfs(id,k,QAQ);
    cout<<s<<endl;
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    predo();cin>>n;
    for(int i=1,op,x;i<=n;++i){
        cin>>op;
        if(op==1){cin>>s>>x;++tot;p[s]=tot;init(d[tot],x);}
        else if(op==2) der();
        else if(op==3) ask();
        else query();
    }
    return 0;
}

中午听着歌睡着了,迷迷糊糊的,感觉要炸。

下午

发现没带准考证,还好教练有多余的,又掉 RP 了,debuff 叠满。

进去打了一下快读快写,封装了 cin cout

但是过程中 IDE 动不动就卡死,对实力影响很大,生气 (╯▔皿▔)╯。

14:40 写调交 T1,中途假了一次,蔡司了。

15:20 写调交 T2,并看了一下 T3,感觉都很简单,不过 T2 写了折磨久,实力果然下降了。

16:20 写调交 T3,并看了一下 T4,还不是自己不够努力。花了 1h 才写出来,中途还假了,呜呜。

不过为什么前三题这么萌啊?我在打普及组吗?

挂分就 ? 了,上个拍。

16:45 T3 上拍。

然后发现 T4 看上去很麻烦,正好也有些饿了,就吃饭。但是只带了干面包,没带水,完全吃不下去,心态有些受影响。

这时旁边的小朋友吧唧吧唧地吃地很香,气死了,睡觉回一下血。

没睡着,但是睡出罪恶感了,于是打了一下性质 A ,继续睡。

估分 100+100+100+16 输麻了,问了一圈都有 300+,乐。