NOIP2023 爆炸记

NOIP2023 爆炸记

Day -4

33dai 模拟赛 100+20+20+0=140,A 构造给大样例,直接变找规律题,难绷。

B 没想到是矩阵,感觉正解不难写但是很难想到第一步,C 题 dls 都说难推,获得摸鱼的正当理由,哈哈😎。

通过了东方永夜抄 Easy 难度,收藏了cz 的东方题单😋。

Day -3

33dai 模拟赛 100+27+50+35=212,竟然是榜二,同机房大佬做出来了 C %%%。

A 很妙,这棵树有 BIT 的性质,father(a)就是 alowbit(a),根据 v106,可以想到暴力跳父亲,统计当前子树内的贡献,也就是 (vd),注意消去儿子的贡献。

B 很妙,观察到 n2 可 DP,类敲砖块,这时候对 DP 的优化就是观察性质,由于一定存在一种方案直接全部方案一,代价是 3k,所以方案二的行数不能小于 O(k),推一下发现差不多是 780,所以直接大力 DP 就做完了。

C 很妙,反向考虑,从递增序列推到原序列,然后根据每次左右端点跳到中间的性质,可以从 n1 地确定每一个位置的操作。

D 很妙,我不会。

Day -2

ZR VP,90+70+20+0=180 爆了。

A 谔谔,并查集维护互相跳到的空格,哈希表要卡常,unordered_map 会被卡。

B 很妙,首先观察到如果没有 TG 改最后一个即可,否则找到第一个适合的位置作为左端点,然后枚举右端点,用哈希+二分去判断两个字符串的大小,然后做完了。

D 神题,括号有祖先关系,所以考虑一棵括号树,这时候如果 u,v(u<v) 同级肯定直接对冲,否则必须要先爬到相同的高度再对冲,爬祖先的这一步有两种爬法,一种是一直往左爬到父亲的左括号,一种是往右爬到右括号,这里倍增 li,j 表示 i 往左爬 2j 步最左到哪,ri,j 对称,那就可以往上爬直到存在一种方法可以跑到 v 右侧,这时候我们不跑过去,而是让 v 也爬过来,最后直接对冲即可,这题可以很简化,如代码:

for(int i = 0; i < n; i ++)
    l[i][0] = min(max(0, i - 1), to[i]), r[i][0] = max(min(n - 1, i + 1), to[i]);
for(int j = 1; j < 20; j ++) {
    for(int i = 0; i < n; i ++) {
        l[i][j] = min(l[l[i][j - 1]][j - 1], l[r[i][j - 1]][j - 1]),
        r[i][j] = max(r[l[i][j - 1]][j - 1], r[r[i][j - 1]][j - 1]);
    }
}
for(int i = 1, a, b, tmp, ll, rr, ans; i <= q; i ++) {
    cin >> a >> b;
    a --, b --;
    if(a > b) swap(a, b);
    if(a == b) {
        cout << 0 << '\n';
        continue;
    }
    ll = rr = a, ans = 0;
    for(int j = 19; ~j; j --) {
        tmp = max(r[ll][j], r[rr][j]);
        if(tmp < b) ll = min(l[ll][j], l[rr][j]), rr = tmp, ans += (1 << j);
    }
    a = rr, ll = rr = b; // a = rr 防止冲过头
    for(int j = 19; ~j; j --) {
        tmp = min(l[ll][j], l[rr][j]);
        if(a < tmp) rr = max(r[ll][j], r[rr][j]), ll = tmp, ans += (1 << j);
    }
    cout << ans + 1 << '\n'; // 最后互相到达还需要一步
}

Day -1

woc,怎么就 Day -1 了。

33信心赛,100+100+100+66=366,T4 bitset 忘记特判第一个点了-33pts😎.

A 质因数分解求 lcm 然后除一下就完了,证明显然。

B 直接让 y 成为根,之后记 x 能走到的最高处是 u,然后计算 u 子树里面的最大深度,深度 - 1 + depu 就是答案。

C 很妙,可以发现,所有偶数最多选一个,所有 mod3=0 的数最多选一个,所有 mod4=0 的数最多选一个,但是这个限制没有偶数紧,所以不用管,进一步考虑到所有提供限制的数实际上只有质数,而 72 以内的质数只有 20 个,进一步观察到,如果两个不相同的数最大公因子 d>72,则它们肯定无法放在一个长度为 72 的区间,所以状压 20 个质数的限制是否被满足,然后直接 DP 即可。

D 很草,观察到可以用 bitset 优化暴力,观察到对于 99pts bitset 都可以草过去,观察不到 33pts 要特判,观察不到 100pts 要用多项式,观察不到直接卡时可以 100pts 😪😪。

Day 0

摸了一天。

Day 1

T1 二分哈希秒了,直接开码,30min 差不多写完调完,发现大样例跑了 1.2s,卡常卡到了 1.1s,1h 时直接扔了 10pts 不拿也罢。

T2 一眼带权并查集,然后发现直接合并会假掉,想了 1h 不会。

T3 联想到 CCPC K,结果发现根本不一样,然后想 O(n3) 解,最后没调出来。

T4 随便 DP 搞搞拿了 36pts,然后发现特殊性质 B 好像很好做,写了 8pts。

出来估分 90+40+10+44=184,感觉有省一。

回家拿到代码发现云斗出数据了,T1 交上去 CE 了,好像完蛋了。

int mod[2] = {998244353, 1e9 + 7};

这个东西在 Dev 下会 Warning 但是不报错,原因是数组不会自动强转,考试的时候没管直接丢了,实际上这个在别的编译器下都会直接报错,Dev 你好 nb 啊😅,教训是一定要注意 Dev 的 Warning,不然会完蛋😭。

T4 的 性质 B 好像也挂了,已经彻底爆炸了,洗洗睡了。

posted @   MoyouSayuki  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
:name :name
点击右上角即可分享
微信分享提示