联合省选 2026 游记

· · 生活·游记

补完省选 Day1-Day2 T1 我就要 AFO 半年准备中考了,呜呜呜......

Day-4 ~ Day0

我完全没想到在中考之前老师居然允许我停课一周准备省选!!!为啥 CSP-S 和 NOIP 就不让呢?

::::info[训练内容]

Day-4

第一套省选 0+60+0=60。其中 T2 是 CF Div.2 F,T3 是 Div.1 E,还设计了部分分,挺良心的,但是不知道为什么 T1 爆没了。

Day-3

第二套省选 0+10+0=10。什么阴间题目。

Day-2

VP 了一下 CF 的 Good Bye 2025,499+724+1174+1452+0\times 5=3849 的成绩,前途一片灰暗。

Day-1

VP 了一下 CF 的 Educational CF 187 和 Hello 2026,成绩懒得打了。

Day0

VP 了一下 CF 的 Global Round 30 和 Round 1070,成绩懒得打了。

总结:一点用都没有。 ::::

Day1-Day2

我自己的水平我还是清楚的,能过两道 T1 就不错了,可是,就连这么简单的目标我都做不到,其他人都是每天 200 分的拿,就我炸得甚至总分都没有 200

Day1

一开始我还非常激动的坐在机房,打算先打 3 题暴力,不过 NOIP 的经历告诉我,选定一道题就一定要死磕,不能分心去做别的,但是我还是想得太简单了,前 0.5 个小时打了一下后两题的暴力分 15+8,我认为我是没有这个实力去拿更多分数了,后面 4.5 小时专心干 T1。

T1 前 1 小时没有任何的思路,在纸上画得乱七八糟的,一直在想样例是怎么算出来的,然后计算出样例 1 的答案是 \frac{8}{3},样例 2 的答案是 \frac{117}{20},用快速幂验证了一下发现是对的,我甚至没有注意到 T1 的样例解释已经说了这个答案.

然后 1 个小时我想了各种各样的计算方法,但是算了一下都是 \mathcal{O}(2^n),搞得我非常的慌,然后突然想出了一种方法,是这样的:

lenp 表示以 i 为子树,长度为 j 的链的概率。

szp 表示以 i 为子树,去掉一个子树后总长度为 j 的链的概率。

就这样我调了很久,一直都是第一个样例对,第二个样例错,不知过了多久,想到了样例二中某些边可以造成贡献,但是成为概率为 0,取反后是 1,在当时的存储方式和不存在这条边是一样的,于是加两个:

lenb 和 szb 分别表示是否有这种情况。

然后又调了很久,直到比赛结束。

出来后发现一堆人做出来了这题,只有我没有做出来,我感到非常的自责。

估分 8+15+8=31,能被 98\% 的人吊打。

我又重新调整了状态,在 3 点回到酒店的时候一直调这道题,最后真没办法了,发了这个贴子,没有人回我,我吃完晚饭后继续调,最后发现了这个问题:

for(int i = 0; i <= nsz; i++){
    for(int j = 0; j <= sz[vv]; j++){
        int tmp = (ll)j * qpow(i+j, mod-2) % mod * lenp[vv][j] % mod * szp[u][i] % mod;
        lenp[u][j+1] = (lenp[u][j+1] + tmp) % mod;
        lenb[u][j+1] |= (lenb[vv][j] && szb[u][i]);
        if(lenb[vv][j] && szb[u][i]){
            ans = (ans + (ll)sz[vv] * (1-tmp+mod)%mod) % mod;
        }
    }
}

这里对一条边的每一个贡献都取反了,应该算完所有贡献之后再取反边。

for(int i = 0; i <= nsz; i++){
    for(int j = 0; j <= sz[vv]; j++){
        if(lenb[vv][j] && szb[u][i]){
            int tmp = (ll)j * qpow(i+j, mod-2) % mod * lenp[vv][j] % mod * szp[u][i] % mod;
            pall = (pall + tmp) % mod;
        }
    }
}
ans = (ans + (ll)sz[vv] * (1-pall+mod)%mod) % mod;
for(int i = 0; i <= nsz; i++){
    for(int j = 0; j <= sz[vv]; j++){
        int tmp = (ll)j * qpow(i+j, mod-2) % mod * lenp[vv][j] % mod * szp[u][i] % mod;
        lenp[u][j+1] = (lenp[u][j+1] + tmp) % mod;
        lenb[u][j+1] |= (lenb[vv][j] && szb[u][i]);
    }
}

改成这样即可通过 \mathcal{O}(n^3) 复杂度,然后再多项式除法优化为 \mathcal{O}(n^2) 即可通过。

后来再看了一下这道题的整体思路,感觉非常简单,但是这么简单的东西我居然总共调了 10h,可见我编写代码水平非常的弱。等中考完我要加训大模拟了。

Day2

经过了 Day1,我已经对 Day2 不报有任何希望了,而且听说 Day1T2 很简单,我就猜 T2 有可能是从 Day2T1 换过来的,看了看 NOIP 难度提升的这么狠,我就觉得这次应该是紫黑黑黑黑黑,但是结果完全出乎我的预料。

解压后直接看 T1,看完题后 1s 想出解法,感觉像是在做梦似的,可能是因为我经常打 CF,这个题瞬间就变得很简单,10min 解决,但是我很少写函数式交互,经常写 IO 交互,所以我不适应这种评测方法,想要测试,但一直出现这个错误:

[Error] ld returned 2 exit status

后来发现是这行代码的问题:

void init(int c, int t);

改成这样就没问题了:

void init(int c, int t){
    return;
}

但是我记得这在洛谷上是可以通过编译的。

我也管不了这么多了,大概是 1.5h,我就觉得应该没有任何问题了。这好不容易过一题肯定是要谨慎一点的。

后面 3h 死磕 T2,我记得好像 k=3 是 ARC 的一道题来着,但是我都没补那题,事实说明,所有的比赛看过的题都要补,不过我要退役准备中考了,只好暑假再说了。

磕不出来,只好打暴力,暴力也不会,严重怀疑我有痴呆症。只好搞了个随机化上去,前两个点在 p=500 时都过了,但是 n 只有 68 又手模不出来,不知道正确率咋样,只好转向 T3。

T3 自然打暴力数据 5,6,8pts,菊花图没时间打了,呜呜呜。

估分 100+0+8=108,运气好说不定 T2 能搞 4pts,又是一个被一堆人吊打的分数。

总估分:8+15+8+100+0+8=139,比 NOIP 还失败,我真是干啥啥不行。