2026 省选游记

· · 生活·游记

目标:0+0+0+0+0+0=0

Day -

听说自己能去参观人类高手选拔了,紧急学习一下去年省选 T1。

所以我这种切蓝率 0% 的入是怎么混进来的

拿到了准考证,上面终于没有人头了。

Day 1

一进场就闻到很浓的红牛味。

诶三道题都是我喜欢的题型。

可惜我太菜了,一道题都不会。

唉打暴力哪有吃吃喝喝香,打点特殊性质得了。

5h 狂砍 27 分和两盒三明治,还有一瓶橙汁。

Day 2

什么叫签到题放在第二天了。

二分贪心速通 T1 之后对着两个吓人题罚坐。

T2 是部分分吓人 T3 是题面吓人。

以为是 100+0+8,出了考场才发现看错数据范围了,喜提 100 \rightarrow 15。(upd:其实还有 60 多)

居然有两道非传统题,在没有任何用的 init 函数里默写了古文,在 T3 的 LCA 下面写了点小说。多亏样例更正给的 15min 加时,不然就写不完了。

Day +

考的不咋样,还好这次纯体验。估分 [50,100)

update:8+20+4+63.44+0+8=103.44。跟估分有些出入,还挺开心。

附录

:::info[我的 industry.cpp]

#include<bits/stdc++.h>
using namespace std;
constexpr int N=100005;
int id,n,m,fa[N],dep[N],siz[N],wc[N],top[N];
vector<int>e[N];
void dfs1(int x){
    dep[x]=dep[fa[x]]+1,siz[x]=1;
    for(int u:e[x]){
        if(u==fa[x])continue;
        fa[u]=x;
        dfs1(u);
        siz[x]+=siz[u];
        if(siz[u]>siz[wc[x]])wc[x]=u;
    }
}
void dfs2(int x){
    if(!wc[x])return;
    top[wc[x]]=top[x];
    dfs2(wc[x]);
    for(int u:e[x]){
        if(u==fa[x]||u==wc[x])continue;
        top[u]=u;
        dfs2(u);
    }
}
int lca(int x,int y){
    while(top[x]!=top[y]){
        if(dep[top[x]]<dep[top[y]])swap(x,y);
        x=fa[top[x]];
    }
    return (dep[x]<dep[y])?x:y;
}
int solve1(int rt,int s,int t,bool ox,bool oy,int r){
    if(s==t)return 1;
    if(!(ox||oy)){
        if(s==rt||t==rt)return r>1;
        return r>2;
    }
    if(!(ox&&oy)){
        if(s==rt||t==rt)return (r>1)+1;
        return (r>2)+(r>1)+1;
    }
    if(s==rt||t==rt)return (r>1)+1<<1;
    return (r>1)*4+(r>2)*2+3;
}
int solve2(int s,int t,bool ox,bool oy){
    if(!(ox||oy))return 0;
    if(!(ox&&oy))return 1;
    return dep[s]+dep[t]-2*dep[lca(s,t)]+1;
}
/*
你在一片闷热中醒来。眼前的漆黑混沌渐渐消退后,你看到面前是暗淡的电脑,嘈杂的键盘敲击声此起彼伏,窗外的阳光透过松柏的枝桠,在桌上投下几晕光斑。
“这是哪里?”脱口而出后,旁边的人看了你一眼。
慢着……我躺下之前不是在家里吗?我难道不是一边啃着面包,一边查看今年最新的省选 Day1 的题目吗?虽然说有点头晕,但是我睡的也不晚啊,怎么跟断片了一样?你努力理着思绪。
面前的电脑上有一个 PDF 文件,此外还有打开的 CodeBlocks,不过只有三个空白文件。
你向上滑了一下 PDF,“2026 联合省选 第二试”赫然在目。
我参加了省选?我参加省选了?
举手向监考老师示意了一下,你穿过走廊来到厕所,洗了把脸以平复自己的心情。从墙上瓷砖的痕迹到厕所中的气味,这里的一切都如此真实,让你一眼就能与记忆中的学校联系起来。
打开程序回收系统,确实是你的名字没错。只是这场考试还有十分钟就要结束了。
你有些伤感,不论这份记忆是真是假,难道第一次参加省选就要无疾而终吗?
你不甘地瞪大双眸,想在最后的时间内记住题目。
你看到第一题“排列游戏”。
为什么是一道交互题?你在纷繁庞杂的【题目描述】【实现细节】【评分方式】里徘徊。时间一分一秒地流过,你终于大概明白了这道题的意思。就是说每次可以询问区间 mex,询问不能超过 O(n log n) 次,要给出一个排列,使得对于所有 n(n+1)/2 个询问,答案和原排列都一样。
你差不多想出来怎么做了。可以先二分出 0 和 1 的位置,如果 2 在这两个位置之间则无法确定具体的位置,然后这样就可以得到 n 个数的合法位置区间,然后就可以用一个优先队列贪心求合法方案了。
这本来是一个非常好写的解法,可这偏偏是交互题。你按照题目里的【测试程序方式】将好不容易搞明白的两个函数编译,在终端输入了:
g++ grader.cpp perm.cpp -o perm -std=gnu++14 -O2 -static
失败……你将调试用的 main 函数删去,再次输入:
g++ grader.cpp perm.cpp -o perm -std=gnu++14 -O2 -static
失败……你将程序的文件名从 T1.cpp 改为 perm.cpp,再次输入:
g++ grader.cpp perm.cpp -o perm -std=gnu++14 -O2 -static
为什么这个好不容易生成的 exe 打不开啊!!!你要崩溃了。还剩 5 分钟的提示也好巧不巧地响起……真是屋漏偏逢连夜雨,你马上就要绝望了,却有一个人推门而入:
“由于样例解释的更正,CCF 决定加时 15 分钟。”
你这才注意到讲台旁的黑板,上面一左一右,分别写着两个 T3 的样例更正。
“想不到竟然是我素未谋面的 T3 挽救了我。”你暗自窃喜,“我果然是世界的主角!”
你重燃斗志,赶忙在 grader.cpp 内修改,通过了大样例。
向下一滑,“星图”映入眼帘。
“星图铺就的,未必是归途。”
“但有人循着它,便不算迷路。”
一问一答之间,无数遗忘的记忆溯着漫天星轨,拥回了你的脑海。
*/
int main(){
    freopen("industry.in","r",stdin);
    freopen("industry.out","w",stdout);
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin>>id>>n;
    for(int i=1,u,v;i<n;i++){
        cin>>u>>v;
        e[u].push_back(v),e[v].push_back(u);
    }
    cin>>m;
    if(id==1){
        int rt=0;
        while(++rt)
            if(e[rt].size()==n-1)break;
        while(m--){
            bool ox,oy;
            int s,t,r;
            cin>>s>>t>>ox>>oy>>r;
            cout<<solve1(rt,s,t,ox,oy,r)<<'\n';
        }
        return 0;
    }
    dfs1(1);
    top[1]=1;
    dfs2(1);
    while(m--){
        bool ox,oy;
        int s,t,r;
        cin>>s>>t>>ox>>oy>>r;
        if(s==t){
            cout<<"1\n";
            continue;
        }
        cout<<solve2(s,t,ox,oy)<<'\n';
    }
    return 0;
}

:::

以及完整小说的链接(文笔不好,逻辑不强,布局不精,当乐子看吧)。