向着星辰与深渊:NOIP 2025

· · 生活·游记

最糟心的事都在 NOIP 前来临。我希望这些是吉兆之前,而非凶兆之始。我不想宣泄负面情绪,因为所有情绪都来源于自身的不幸,而我的不幸来源于我的懈怠。毕竟我摆了这么久,对吗?于是我决定写下这一篇文章,可能是 OI 生涯的绝笔,可能是回忆录,可能是供大家取乐的笑话。

标题不是为了证明我玩过二字游戏,我化用它是因为它真的太像我们的 OI 生涯了,有人攀着星辰闪耀,有人随着深渊堕落。

那请接着看吧,向着星辰与深渊,欢迎来到我记忆里的,NOIP 2025。

语言逻辑混乱,多半是考前的回忆,可能前言不搭后语,请多见谅。

11.20

不幸的起点。

写了 P9118 [春季测试 2023] 幂次,以及用嘴巴做了好多题。

可是我真应该这样吗,一天摆得如此严重。

我不想再压抑下去了。

11.21

信友队,T1 一分钟想到按 \bmod 4 分类,然后写了代码,对着 n \le 9 的小样例调了一整场。结束后发现做法正确,n \le 9 的数据要特判。

发挥不佳,压力 +20

想写一下一题多解,于是写了 P11361 [NOIP2024] 编辑字符串 另一个贪心做法:

#include <bits/stdc++.h>
#define int long long
#define pb push_back
using namespace std;

const int N = 2e5 + 5;
int T, n, ans, pre[N], pre0[N][2], pre1[N][2];
bool a[N], b[N], c[N], d[N];
char op;
string s;
vector<pair<int, int> > v, vec;

inline void clear() {
    ans = 0;

    s.clear();
    v.clear();
    vec.clear();
    for(int i = 0 ; i <= (n << 1) ; ++ i) {
        a[i] = b[i] = c[i] = d[i] = false;
        pre[i] = pre0[i][0] = pre0[i][1] = pre1[i][0] = pre1[i][1] = 0;
    }

    return ;
}

signed main() {
    ios_base :: sync_with_stdio(NULL);
    cin.tie(nullptr);
    cout.tie(nullptr);

    cin >> T;

    while(T --) {
        clear();

        cin >> n;
        cin >> s;
        for(int i = 1 ; i <= n ; ++ i)
            a[i] = s[i - 1] - '0';
        cin >> s;
        for(int i = 1 ; i <= n ; ++ i)
            b[i] = s[i - 1] - '0';
        cin >> s;
        for(int i = 1 ; i <= n ; ++ i)
            c[i] = s[i - 1] - '0';
        cin >> s;
        for(int i = 1 ; i <= n ; ++ i)
            d[i] = s[i - 1] - '0';

        for(int i = 1 ; i <= n ; ++ i) {
            pre1[i][0] = pre1[i - 1][0] + a[i];
            pre1[i][1] = pre1[i - 1][1] + b[i];
            pre0[i][0] = pre0[i - 1][0] + (! a[i]);
            pre0[i][1] = pre0[i - 1][1] + (! b[i]);
        }

        int posl = 0, posr = 0;

        for(int i = 1 ; i <= n + 1 ; ++ i) {
            if(c[i] && posl == 0) posl = posr = i;
            else if(c[i]) posr = i;
            else {
                v.pb({posl, posr});
                posl = posr = 0;
            }
        }

        posl = posr = 0;

        for(int i = 1 ; i <= n + 1 ; ++ i) {
            if(d[i] && posl == 0) posl = posr = i;
            else if(d[i]) posr = i;
            else {
                v.pb({posl, posr});
                posl = posr = 0;
            }
        }

        v.pb({1e9, 1e9});

        sort(v.begin(), v.end());

        posl = 0, posr = n + 1;

        for(auto [l, r] : v) {
            if(l <= posr) posr = r;
            else {
                vec.pb({posl, posr});
                posl = l, posr = r;
            }
        }

        for(auto [l, r] : vec) {
            if(l > n) break;

            ++ pre[l], -- pre[r + 1];

            ans += (min(pre0[r][0] - pre0[l - 1][0], pre0[r][1] - pre0[l - 1][1]) + min(pre1[r][0] - pre1[l - 1][0], pre1[r][1] - pre1[l - 1][1]));
        }

        for(int i = 1 ; i <= n ; ++ i)
            pre[i] += pre[i - 1];

        for(int i = 1 ; i <= n ; ++ i)
            if(! pre[i]) ans += (a[i] == b[i]);

        cout << ans << '\n';
    }

    return 0;
}

获得了 50 pts。

下午有同学回班拿东西,发现了 \color{white}某人 给我写的信。这算是好运的开端吗?

可能会在 NOIP 后放出信的部分内容。

11.22 \sim 11.26

可能写题数 \le 10?写了几道认为比较有意义的题,不过可能都是无济于事。

模拟赛吃了很多史。

11.27

模拟赛 T1 *2900 T3 追忆。

学校有一片银杏林。

11.28

团建。看人机国际象棋大战。

回家后发生了三件不幸的事情,希望这些是最后的。

11.29

我还以为两分钟过 T1 是胜利的起手技呢。

最后三个半小时的得分为 0

一切都像一场梦啊,该退役了。