Stitch 时隔一年复活状态修复过程记录

同步发在洛谷

1.6

T1 傻子都会。

T2 高级数学题,不会。

T3 线段树维护一个区间做的工序,pushdown 比较好实现,注意维护糕点彻底废了的情况。

赛时 \(100+20+70=190\),rk2,但是 T2 想不到预处理,怒挂 40pts。

Liujiaxin 怎么这么强,给 Liujiaxin 磕头了/bx /bx。

rating:\(1310\rightarrow1513\)

1.7

T1 想到平衡树想不到权值树状数组,被核膜 2log BIT 爆踩,怒挂 50pts。

T2 傻子题,开个队列随便搞我却不会,再挂 50pts。

T3 神秘树形 DP,我肯定不会。

赛时 \(50+50+0=100\),rk5,ljx 怎么又 AK 了。/bx

rating:\(1513\rightarrow1573\)

1.15 ~ 1.17

期末考,但是生物倒三,甚至比语文都差。

1.19

从今往后都只有小基班。

T1 唐诗物理题。

T2 逆序对判断无解然后冒泡乱搞能过,不知道为啥。

T3 单调队列优化 DP 我都不会,已经被初二大神单调队列了。

T4 神秘状压 DP,我肯定不会。

赛时 \(100+100+35+10=245\),rk1,拜谢 ycy 用正解过了 T2。

rating:\(1573\rightarrow1730\)

1.20

T1 神秘找规律,大概和进制有关,推一推就找到了。

T2 暴力 DP 可过,我没过,望周知。

T3 RBIT 傻子题,拜谢 zzx 爆切权值线段树。

T4 直接 CV 题目给的 code 拿了 30。

赛时 \(100+40+100+30=270\),rk1。膜拜巨佬 ymz 和 tyh 过了 T2。

rating:\(1730\rightarrow1835\)

1.21

换成 J 组模拟了,不想写。

unrated 了,rk2。

1.22

还是 J 组模拟,但是 T1 不开 long long 不特判翻车了,怒挂 \(20\)。

T2 非常唐,T3 用个 multiset 模拟一波就完事了。

T4 好像是余弦定理加上 \(S=\dfrac{1}{2}ab\sin C\) 找到夹角正弦值最大,然后枚举 \(a,b\),后面不会了。

好像大家都过了 T1。

赛时 \(80+100+100+40=320\),rk1。

rating:\(1835\rightarrow1915\)

五场合计升了六百多分,状态保持地还算不错(主要是一起打比赛的人变了)。

1.23

被 TheShuMo 和 Scene 还有 Qshuqi 大神炸鱼了,%%%%%%%%%%%%%%%,我是唐诗。

罚时惨败 qsq 2h,喜提 rk4。

T1 \(n,m\le 10\),一开始误导了我正解的复杂度,但是后面发现不会 \(\mathcal{O}(n!m)\) 之类的做法,结果发现可以神秘 \(\mathcal(n^7)\) 记忆化搜索,好像也可以直接 DP。

T2 看见删除想到可以离线反过来加边,然后暴力 Floyd 可做,复杂度 \(\mathcal{O}(n^3)\),直接秒了。

T3 写了神秘 \(25\) 分暴力,T4 一点不会。

这几天 S 组模拟赛加上两次正式的 CSP-S 的 T4 一共喜提 \(0+0+10+30+0=40\) 分,还是太菜了。

赛时 \(100+100+25+0=225\),rk4。拜谢 TheShuMo 和 Scene 过了 T3。

rating:\(1915\rightarrow1913\),如果罚时战胜 qsq 的话能上分的。

1.24

又被 TheShuMo 和 Scene 炸鱼了。

T1 枚举虱子对答案的贡献,先搞下来虱子出现的信息,然后排个序,差分一下,然后用异或前缀和统计只有一个信息对应这一天的信息编号,统计一下就完事了。

Scene 大神是枚举每一天对答案的贡献,然后去找这一天这只虱子只有一条信息的答案,反正也差不多,%%%。

T2 只会 \(\mathcal{O}(2^nn^3)\) 的做法,卡卡常能过 \(n\le 16\),喜提 \(40\)。

T3 好像卡常能过。拜谢 TheShuMo 卡常过了 2s。只能说人唐常数大。

T4 直接 \(01\) 背包,但是我没有发现背包大小只有 \(5n\) 而不是 \(x\),怒挂 \(20\)。

赛时 \(100+40+40+60=240\),错失反杀 TSM 和 Scene 的绝佳机会。

TheShuMo 大神 \(100+0+100+60=260\),Scene 巨佬 \(100+0+60+80\),但是最后罚时惜败 Scene 1.5h,喜提 rk3。

致敬传奇线段树分治 -296 巨佬 qsq。

rating:\(1915\rightarrow1947\),不知道为啥到了榜七,但是明天 ljx 大神 WC 结束强势回归,又要被炸鱼了,到时候要是拿个 rk5 可要掉大分了。

1.25

今天没被炸鱼 /bx

T1 写了 \(\mathcal{O}(2^n)\) 暴力,但是 tyh 写了 \(n^2\) 的,膜拜。

T2 不难发现后手不能改变两个不互质的数的先后顺序,所以先手需要把不互质的数对中小的数卡在前面,然后先手可以直接把序列从小到大排,这样小的数一定会卡在前面。

我们找到所偶遇不互质的数对,建立有向边(小的一定在大的前面),后手用 priority_queue 拓扑排序即可做到字典序最大。

T3 不会,写了暴力,而且忘记判重边保龄了。

T4 打了 \(\mathcal{O(nq)}\) 暴力。

% zzx 爆切 T2。

赛时 \(20+100+0+21=141\),rk1。

rating:\(1947\rightarrow1998\)。

下午 lg gks,\(100+100+0+26\),rk21,上大分。

放个小基班所有人每天的内部排名(不算炸鱼的),这样有助于 TSM 等巨佬判断谁有实力(反正我肯定没有)。

1.19 1.20 1.22(pj) 1.23 1.24 1.25
sto_5k_orz 1 1 1 1 1 1
bbbzzx 6 2 9 3 3 2
yemengzhi 9 6 8 6 4 10
YDMaYi 5 5 5 6 7 7
Dicer_L 7 8 10 9 7 7
tyh_27 4 3 3 2 2 3
54ycy 2 7 2 4 10 5
ljc_07 10 10 4 8 6 6
fly_fire 8 9 6 10 7 9
lzh301 3 4 6 5 5 4

名次总和不想算,大概 tyh 第二。% tyh。

bbbzzx、tyh27 和 54ycy 一人拿了两次单场第二,%%%

寒假还有一波集训,估计还有比赛。

综上所述,前半期我没有打出任何 pj 难度以上的算法(RBIT 板子不能算),我就是 fw。

2.6

开场半个小时后才发现有比赛。

T1

我们令 \(x^2-y=a^2\),移项,得到 \(y=(x-a)(x+a)\),显然 \(x-a\le \sqrt n\),直接枚举 \(x-a\) 即可。

T2

先进行一次差分,得到差分数组 \(b\),然后任务就是给一个点 \(+x\),另一个点 \(-x\),最后前 \(n\) 项全为 \(0\)。

我们定义一个 \(dp_i\) 表示将状态 \(i\) 包含的数全部清空为 \(0\) 的最小步数。

然后考虑如何从 \(dp_{i-2^j}\) 转移至 \(dp_i\)。

如果 \(b_j=0\),那么可以直接转移过来。

如果这些 \(i\) 包含的所有位置的差分值之和为 \(0\),可以发现最后把所有数赋值成一样的之后不用再全变为 \(0\) 了,所以也可以直接转移。

否则加个一。

T3 不难发现给的那个 \(G(i,j)\) 是可以快速算的,复杂度应该是 \(O(1)\) 的。

所以我们直接枚举 \(y\) 和 \(\lfloor\dfrac{x}{y}\rfloor\),然后直接算 \(G(x,y)\),枚举 \(x\),找到 \(g(x,y)=G(x,y)\),就可以得到方案数非常小,只有 \(25n\) 不到。

赛时数组只开了 \(20n\) 挂了 \(10\) 分,好像直接开大会 T,还要加快读。

赛时 \(100+100+90+0=290\),rk1,算是比较好了。

rating:\(1998\rightarrow2056\)

2.7

寄麻了,被初二爷单调队列了。

T1

明显的背包,不难发现回文数只有 \(500\) 个,直接 \(O(nm)\) 的背包就完事了,但是我写了前缀和优化 DP,记 \(dp_{i,j}\) 表示和为 \(i\),最大的回文数为 \(j\) 的方案数,然后前缀和优化一下,也能过。

T2

不会,写了特殊性质(但是没有写 \(O(na)\) 暴力,因为 \(a\le 10^9\))。

T3 看不懂,T4 写了暴力。

最后 \(100+20+0+40=160\),rk3,被初二爷单调队列了 \(5\) 分。

T2 \(O(na)\) 暴力能多过一个点,T3 全输出 \(-1\) 有 \(5\) 分。

拜谢 ycx2010 T4 打了 \(70\) 分。

rating:\(2056\rightarrow2061\)。

2.8

小基班寄麻了,怒拿 rk6。

T1

非常简单,这个不会可以去喂猪了。

T2

我们令 \(g=\gcd(n,k)\)。

不难发现当 \(g=1\) 时无论 \(s\) 的值是几答案都是 \(\sum\limits_{i=1}^n a_i\),\(g>1\) 时周期是 \(\dfrac{n}{g}\)。

当 \(s\) 和 \(g\) 是定值时,可以发现单个周期内经过了 \(i\) 当且仅当 \(i\equiv s\pmod g\),而且每个点的次数都不变,所以答案只和 \(s\) 和 \(g\) 有关。

由于 \(g\mid n\),我们可以以 \(\mathcal{O}(d(n))\) 的复杂度枚举 \(g\),然后预处理每种 \(s\) 的和,单点修改的时候枚举 \(g\) 修改和就可以了,对于每个 \(g\),我们用 multiset 统计最大值,最后乘周期出现的次数就可以了。

\(d(n)\) 在 \(n\le 2\times 10^5\) 时最大为 \(160\),我第一次只开了 \(100\) 过了,差评。

T3 不会 AC 自动机,T4 写了 \(30\) 的哈希暴力结果 string 没 resize 变成 \(10\) 了,草。

rating:\(2061\rightarrow 2017\)

2.9

红温场,又寄麻了,挂了比前两场加起来都多的分,但是 rk2 了(不挂 rk1 了)。

T1

不难发现答案只能是 \(0\)、\(1\) 或 \(2\)。

\(0\) 的情况很好判断。

\(1\) 的情况是满足割一个点就行了,我们用 DP 统计 \((1,1)\) 到 \((n,m)\) 的方案数 \(d\),然后统计 \((1,1)\) 到 \((i,j)\) 的方案数和 \((i,j)\) 到 \((n,m)\) 的方案数 \(a\) 和 \(b\),然后乘法原理得从 \((1,1)\) 经过 \((i,j)\) 到 \((n,m)\) 的方案数为 \(ab\),当 \(ab=d\) 时 \((i,j)\) 割掉 \((i,j)\) 就够了。

然后有个 sb 写了这个 DP 我不说是谁。

f[n][m] = 1;
for(int i = n; i; i--) {
	for(int j = m; j; j--) if(!wall[i][j]) {
		f[i][j] = f[i + 1][j] + f[i][j + 1];
	}
}

他甚至算 \((1,1)\) 到 \((i,j)\) 的时候都写对了。

for(int i = 1; i <= n; i++) {
	for(int j = 1; j <= m; j++) if(!wall[i][j]) {
		if(i == 1 && j == 1) continue;
		dp[i][j] = dp[i][j - 1] + dp[i - 1][j];
	}
}

因为这个怒挂 \(70\)。

T2 是 P9401 原题。

我们可以先全选 \(b_i\),然后只能选 \(a_i\),这样答案一定不大于 \(a_i\)。

如果两个 \((a_i,b_i)\) 和 \((a_j,b_j)\),当 \(a_i=a_j\) 时,可以将两个数对合并为 \((a_i,\gcd(b_i,b_j))\),因为选一 \(a\) 一 \(b\) 肯定不如两个 \(a\)。

然后枚举答案 \(ans\),当 \(ans\mid a_i\) 时,一定可行,然后我们记 \(B_{a_i}=b_i\),对 \(B\) 数组建立 ST 表,然后看 \([k\times ans+1,(k+1)\times ans-1]\) 的 \(\gcd\) 能不能被 \(ans\) 整除即可。

然后各种神仙乱搞做法都能过,我强烈怀疑数据是不是就是生成个随机数然后乘个 \(g\) 就完事了,甚至 \(\mathcal{O}(2^n)\) 都能过 \(10^6\)。

T3 直接暴力 DP 有 \(60\) 分,T4 权值树状数组也有 \(60\) 分,但是有个 sb 没开 ll,我不说是谁。

最后 \(30+100+60+30=220\),罚时大胜 bbbzzx 和 zhuhangyu,喜提 rk2。

% ycx2010 连续三天榜一。

zhenghong 最后几秒把 T3 交 T4 上来了,绷。

rating:\(2017\rightarrow 2053\)

2.10

又 tm 寄麻了,\(200\rightarrow 110\),并列第一但是 OI 赛制有罚时变成 rk6 了,也是第一次没有拿到小基班 rk1(bbbzzx 太巨了)。

T1

显然每个串自己的逆序对是必然要算的,这个不重要。

记 \(o_s\) 为 \(s\) 内 \(1\) 的个数,\(z_s\) 为 \(s\) 内 \(0\) 的个数。

对于两个串 \(s_1,s_2\),将 \(s_1\) 排在 \(s_2\) 前面的逆序对数是 \(o_{s_1}z_{s_2}\),\(s_2\) 排在 \(s_1\) 前面的逆序对是 \(z_{s_1}o_{s_2}\),比较大小即可,用这个拿来贪心,不难证明是对的。

T3

链式前向星记住了清空 head 记不住清空 idx,然后没加快读,\(100\rightarrow 10\)。

我们令两个人奔袭的周期是 \(len_1\) 和 \(len_2\),这是路径长的两倍。

我们考虑对每个点 \(i\),得到 Alice 和 Bob 经过的时间,都用 \(k_1\times len_1+d_1\) 和 \(k_2\times len_2+d_2\) 表示(\(d_1\) 和 \(d_2\) 都是常数),由于在 \(i\) 这个点这里相遇,所以

\[k_1\times len_1+d_1=k_2\times len_2+d_2\\ k_1\times len_1-k_2\times len_2=d_2-d_1 \]

很明显这是 exgcd 的形式,而且 \(len_1\) 和 \(len_2\) 是定值,可以预先求好 \(xlen_1+ylen_2=\gcd(len_1,len_2)\) 的解,然后乘一下,甚至都可以不用 exgcd,直接暴力也没事。

注意到 \(d_1\) 和 \(d_2\) 有两种情况(回来的 \(d\) 是不一样的),一共四种情况,全算一遍。

复杂度 \(\mathcal{O}(nq)\)。

超级唐诗 5.0k 代码

rating:\(2053\rightarrow 2004\),写出 T3 就能上大分了。

2.11

30pts 惜败 ycx2010。

过了 T3 没过 T1 是什么水平。

T1

不会,不知道为什么打了链表还是 TLE。

T2

不会,写了 \(\mathcal{O}(2^nm)\) 的分,\(m\) 是非 \(0\) 的数的个数,比较简单骗了 \(70\)。

T3

求

\[\sum\limits_{i=0}^{n} (-1)^i\gcd(n,i) \]

\(n\le 10^{12}\)。

考虑枚举 \(\gcd\),令 \(\gcd(n,i)=g\)。

如果 \(n\) 是奇数,那么所有 \(g\),\((-1)^i\) 是 \(1\) 和 \(-1\) 的情况是一样的,所以答案是 \(0\)。

否则,根据 \(g\) 的奇偶性可以判断 \(\dfrac{n}{g}\) 的奇偶性(实在不行你就算 \(\dfrac{n}{g}\) 都行),然后按照 Longge 的问题做就完事了。

虽然 \(n\le 10^{12}\),复杂度是 \(\mathcal{O}(d(n)\times \sqrt n)\) 的,但是 \(\mathcal{O}(\sqrt n)\) 是算 \(\varphi\) 的,如果 \(d(n)\) 特别大那么 \(n\) 的小质因子就特别多,所以 \(\varphi\) 就跑不满。如果 \(\varphi\) 跑得满说明 \(d(n)\) 不大,所以复杂度可以接受。

最后 \(50+70+100+0=220\),rk2,但是 T1,T2,T3 得分单调递增是什么成分。

但是又被 ycx2010 杀完了,我是 fw。

rating:\(2004 \rightarrow 2053\)。

ycx 有一场看题没交但是现在已经 \(2013\) 了,幸好没有下一场,不然我就寄了。

初二巨佬 zcq、zyx、hlc 都要来小基班,%%%。

2.17

虽然这场前年打过,但是打得比前年都低,喜提小基班 rk7,rating -154。

就这水平还能 CSP-S 1=,真是个笑话。

T1 非常简单,把每个面包当成坐标系的一个点,斜率最大的直线一定是 \(x\) 相邻的两个点,新插入一个点的时候直接和边上两个连线算一下斜率就完事了。

我不能理解为什么这种题我都能翻车。

T2 是 CF1710C,但是我不会数位 DP。

T4 本来打了树的分和暴力,结果一个数组开小一个 \(\ge\) 写成 \(>\) 一分没得。

赛时 \(70+10+20+0=100\),rk7,rating -= 140。

真不知道就这水平凭什么能进复赛。

5.5

Dicer_L 对着网络最小费用最大流专场。

T1 和 T2 就是板子。

T3 最小割 = 最大流。

T4 经典拆点最大费用最大流。

T5 餐巾计划。

某 sb 将 \(i\) 拆成 \(2i\) 和 \(2i+1\),然后汇点写了 \(2n+1\),我不说是谁。

T6 T7 不会。

最后 \(100+100+36+100+100+10+2=448\),rk9。

赛时 T3 数组开小了,可以退役了。

rating:\(1905 \rightarrow 1852\)。

rk6 五题都是是贺的,无敌了。

Dicer_L 喜欢用 AI 生成的代码。

7.7

省流:运气非常好。

时隔两个月(说两年也可以)再碰 OI。

T1 纯搞笑题。可以把每条直线的函数表达式都算出来,然后就能发现可以用 \(x+y\) 和 \(x-y\) 的范围判断。

T2 写了个数据分治,但是不知道为什么 \(\mathcal{O}(n^2)\) 能过 \(10^5\) 但是 \(\mathcal{O}(n\sqrt n)\) 过不了。

正解是 bitset,但是某 sb 没想到,我不说是谁。

如此肺雾,如何 NOIP?

T3 “每个节点最多连接 \(3\) 条边”被我略过了,然后可以边三。

注意到两个点之间的最大流最多只有 \(3\),不连通说明是 \(0\),联通但是不在一个边双说明是 \(1\),在同一边双但是不在同一边三说明是 \(2\),在同一边三说明是 \(3\)。

某 sb 订正 T3 的时候并查集没有初始化 \(rt_i=i\),好难猜是谁啊。

很显然两个点 \(x,y\) 在同一个边三当且仅当删除任意一条边时,\(x,y\) 均在同一边双。可以枚举删除的边跑一遍 tarjan,记 \(scc_{i,j}\) 表示 \(i\) 在删除边 \(j\) 的时候所在边双的编号,然后 hash 一下就完事了。

不知道为什么 EK 跑得比 Dinic 还快。

T4 不会,遂输出 \(-1\)。

喜提 \(100+80+45+10=235\),rk7/52,小基班 rk1,运气好了属于是。

7.8

省流:\(60+60+30+0=150\),rk20/52,小基班 rk3,非常糟糕的分。

T1 纯纯 kruskal 重构树 + 倍增板子题但是我没 AC,望周知。

T2 打出了个 \(\mathcal{O}(nP(\sqrt n)\log n)\) 的复杂度没过 \(2\times 10^5\),以空间换时间导致的。

T3 P2664 原题,但是只写了暴力和菊花的分。

T4 会第一档但是只有 \(5\) 分,所以没写。

7.9

省流:打得非常烂,绿题都没切。

T1 非常简单的一个前缀和优化 DP。

T2 看到 \(k\le 10^{18}\) 不难想到倍增,但是赛时拼尽全力无法战胜交了暴力还忘记 \(k=0\) 的时候也要取模了,赛后 20min 终于战胜。

T3 曼哈顿生成树模板题,但是我咋啥都不会。

遂写了货车运输拿了 \(40\) 分,反正是 \(\mathcal{O}(n^2\log^2n)\) 的所以没写倍增直接暴力爬树了。

T4 暴力有 \(16\) 分,但是在看 T2 所以输出样例 \(1\) 分跑路。

最后 \(100+60+40+1=201\),rk12,小基班 rk1。T2 但凡记得取模就有 \(70\) 了,这样就能 rk10 了。

绿题都场切不了还咋 NOIP 啊。

7.10

啥也没修复,所以今天的模拟赛记录被我吃了。

看题要用眼,想题要用脑。

7.11

生日场,靠着生日 buff 现场发明了笛卡尔树并且在本地跑了 8s 的情况下过了 T2。

最后 \(100+100+40+0=240\),喜提 rk8,小基班 rk1。

T1 显然 \(n=1\) 和 \(n=2\) 的情况是 \(1\),然后我们令 \(P_i\) 为 \(n\) 个点在同一半圆上的概率。

很显然我们需要前 \(n-1\) 个点在同一半圆上,然后前 \(n-1\) 个点连成的半径相互所构成的圆心角的期望是 \(\dfrac{n-2}{n-1}\pi\)(没有也用不着任何严谨的证明,看出来就行了),然后第 \(n\) 个点要在半圆上必须在 \(n-1\) 个点中间或两侧,且与最远端的圆心角小于 \(\pi\),可得 \(P_i=P_{i-1}\dfrac{n}{2(n-1)}\),裂项可得答案是 \(\dfrac{n}{2^{n-1}}\)。

T2 现场手搓出了笛卡尔树,但是寄搜常数巨大,本机跑了 8s,不过评测姬上过了。

赛时想的是算每个点的贡献。

令 \(dp_{l,r,k}\) 表示 \([l,r]\) 区间内选了 \(k\) 个数的答案的最小值。

然后对于一段区间找到最大值的位置 \(mid\),然后枚举左右两边的数的个数,分治下去,不难发现状态数只有 \(n^2\) 种,加个记忆化就能过了。

记录答案的数组用了个 unordered_map,然后赛时本机跑了 8s(赛后发现编译器忘记开 O2 了),然后一直回忆 custom hash 怎么写,甚至尝试手写哈希表。不过最后我认为本机 8s 评测姬上肯定过不了,拿个暴力分认了算了,没想到过了,fxt 大神的评测姬还是良心啊。

本质相同的正解:先建笛卡尔树,不难发现 \(f(l,r)\) 就是 \(a_{\operatorname{LCA}(l,r)}\),然后树上 DP 一下就行了。

怎么大家都会 T3,数据随机可还行,所以不难发现只取代价最小的 \(200\) 条边可过。

T4 是集训队胡策题,弱化版甚至是个黑。

集训之前定的目标是要拿 15 天的小基班 rk1,现在 5 天了只拿了三次小基班 rk1,还得努力啊。

大基班都是巨佬,我基本上比他们四个都低,退役两年确实影响太大了。

7.12

啥也没修复,所以今天的模拟赛记录被我吃了。

看题要用眼,想题要用脑。

7.13

nmd T2 是个绿题你 tm 甚至还做过你还 tmd 过不了,你还是赶紧退役吧。

T1 是个整除分块板子。

T2 原题 P8097,注意到我 2023 年就过了这题,所以我这两年越来越菜了。

T3 是个线段树合并优化 DP,普及组选手表示不会。

T4 全场加起来拿了 10 分,还是个打表的。

最后喜提 \(100+25+15+0=140\),rk18。

nmd 赛时过了 16 个 T2 我都没过,被绿题薄纱了你还咋 NOIP 啊?

7.14

你 tm 能不能憋 // freopen 了。

T2 // freopen \(40\rightarrow 0\),rk12 \(\rightarrow\) rk26。

\(100+0+0+0=100\) 很好玩吗。

7.15

黄蓝蓝绿,但是喜提 \(100+75+15+0=190\),成功打出了普及组小朋友都不如的分数。

T1 唐题。

T2 可以拆贡献然后推出 \(O(n^2)\) 的组合数的式子,但是我不会数学,所以优化不来,拜谢 Tyih 算出来了。

被打表找规律老哥爆踩了 /fn。

T3 是个树状数组,但是我忘记了有个东西叫树状数组了。想到了 \(n\le 2000\) 是 bitset,但是由于暴力调了 1h 所以还没有很推明白就结束了。

T4 看错数据范围导致没开 long long,糖丸了。

最后喜提 \(100+75+15+0=190\),rk11。

上 225 不是有脚就行。

九天总榜出了,挂的相当多,但是有 rk13,小基班 rk1。

差强人意吧,退役两年能和 Vector_net 和 hlc110516 平分秋色已经很不容易了。

7.16

省流:T1 黄题做了 2h,T2 遍历图不用 dfs,T3 还没看对题比赛就结束了。

喜提 \(100+60+0+10=170\),rk10,我比普及组小朋友还菜。

但是不知道为什么很多人没有战胜黄题,所以十天总榜拿下 rk11。

Feather_Moon 270pts rk2,还有 10 天,100 分 / d 的分差已经足够抹平我前 9 天的总分了,总榜别被战胜了就行了吧。

T1 可以想到倒着做,非常唐。

T2 不难想到并查集(我都想到了),然后可以遍历整个图连接,不要 tmd 枚举每个点合并若干轮,而且 tmd 要开 ll(我 tm 开了就过了)。

T3 神秘组合数前缀和 + 莫队优化,这玩意能想出来莫队真的是太巨了,不过我相信 bbbzzx 一定能 AC 这道题。

式子推出来是 \(\sum\limits_{i=1}^m \dbinom{n}{i}\),然后莫队转移 \(m\) 是容易的,转移 \(n\) 的时候可以用杨辉三角 + 前缀和优化做到单次 \(O(1)\),所以总复杂度是 \(O(m\sqrt n)\),但是这玩意谁 tm 能想出来莫队啊。

T4 不会。

7.17

这啥玩意啊,咋就 rk3 了。

T1 在 \(n>m\) 时,打个表发现答案是

\[\dbinom{n}{m+n}-\dbinom{n+1}{m+n} \]

然后某 sb 没判 \(n=m\),我不说是谁。(但是好像有两车人没判)

T2 树状数组,要让 \(i\) 满足就要把 \(i\) 前或后所有 \(>a_i\) 的数交换掉,然后两种情况取个 \(\min\) 就好了,算这个东西可以用树状数组。

T3 只会 \(O(2^nn^2)\) 的 \(40\) 分做法,但是好像就是这 \(40\) 分拿下了 rk3。

T4 写了个树状数组 + 二分(不太会 RBIT 求 mex 导致的),反正你就说是不是拿了 \(10\) 分吧。

T4 原题 P12485,我肯定不会。

最后 \(80+100+40+10=230\),不知道为啥 rk3,小基班 rk1 了。

7.18

3.5h 狂攻 T2 获得 \(30\) 分的高分,喜提 \(100+30+70+0=200\),小基班 rk2,总榜 rk18,拜谢 Tyih 过了 T2,Feather_Moon 过了 T3,被单调队列了。

T1 傻子题。

T2 可以想到按照奇偶性做,然后发现是个括号序列问题,开个栈就维护类似于括号匹配的东西,中间统计一下最值就可以了。

T3 是个容斥。

7.19

寄飞了,T2 纯唐题挂成 60,rk7 \(\rightarrow\) rk20。

为啥大家都过了 T1、T2,之前放黄题也没这么多人切啊。

Z 老师还是太会造数据了。

红温了,今天模拟赛记录被我吃了。

7.20

T1T2 都保龄还算人类吗。

\(0+0+71+10\),rk30,总榜成功从 rk9 掉到 rk11。

7.21

T1 又保龄了,你 tm 赶紧退役吧。

\(0+70+80+29=179\),本来 \(279\) 是由 rk3 的,结果只有 rk19。

#define int long long 开到快读下面的是个人物。

T3 题解

7.22

被 T3 和 T4 创飞了。

\(100+100+6+0=206\),rk19。

T1 纯唐,T2 纯唐(赛时有二十多个人场切了 T2,四十多人场切了 T1)。

A_zjzj:这个 T2 的难度和 NOIP T1 差不多。

T3 神秘随机化乱搞,甚至不需要会判偶环就能过。

彻底红温了。

7.23

又被 T3 创似了。

T1 唐题。

T2 \(dp\) 前缀和优化简单题,我没做出来。

T3 也是个题。

T4 打了 \(O(n)\) 暴力,打表打不出来,痛失 50pts。

喜提 \(100+24+0+30=154\),rk14。

7.24

被 T1 唐诗记忆化创似了。

被 T2 唐诗树状数组创似了。

T3 两年前做过,那个时候看到题解写了个线段树分治就不想看了,结果打完听大神 wangkangyou 讲分治找中转点我才恍然大悟,谁 tm 说这题要线段树的来着。

T4 一点不会。

\(40+50+20+20=130\),rk19,就这个 B 分数也配打 NOIP。

总榜被大神 wangkangyou 反超,现在第 12 了。

7.25

\(100+100+0+50=250\),rk14,我是 250。

T1 唐诗树状数组维护题。

T2 唐诗贪心题。

T3 赛时做了 40min(前面俩唐题做了 3h 我太唐了没办法),甚至没有战胜 20pts。

T4 神秘 exkmp,不会。

7.26

成功被数学题创死。

T1

赛时甚至没有想到矩阵快速幂的 60pts。

T2

赛时甚至没有想到分块打表。

T3 T4 赛时甚至没有看。

喜提 3= 的分。

总榜也是成功掉到了 rk13,小基班 rk1。

qzez 小基班(马上大基班了)成功被义乌同届爆踩。

10.12

停更这么久仅仅是因为他们做的模拟赛是我两年前做过的。

\(100+100+10+0=210\),rk5,被 ycy 爆踩。

T1 写假了,但是数据更假,反正我过了。

T2 考虑暴力,记 \(dp_{i,j}\) 表示该字符串中出现子序列 \(p[i+1,j]\) 的方案数。

然后在合并串的时候合并一波 DP 状态,只需要写串和字符合并、串和串合并就行了。

T3 神秘数据分治出错,\(20\rightarrow 10\)。虽然但是好像 \(220\) 也是 rk5。

由于写完 T2 还有 6min 所以没有写 T4,实际上 T4 暴力傻子都会。

10.30

\(10+100+12+0=122\),rk7,我是这个。

T1 神秘简单绿题写挂。

T2 考虑启发式合并,如果会就秒了。

T3 将 \(8\) 步分成从起点和终点各走 \(4\) 步,然后按照 \(k\) 的情况分讨,拜谢 bbbzzx 赛时过了 \(k=6\) 的档。

11.16

模拟赛请注意起床时间。

8:00 开始的模拟赛 10:30 起床,我无敌了。

\(100+100+50+5=255\),并列 rk2,rating:\(1847\rightarrow 1929\)

起床速通唐诗 T1,然后 20min 写完 T2 线性。

\(dp_i=\sum\limits_{j=1}^{i-1} dp_j-dp_{i\operatorname{xor} j}\)。

第一段前缀和,第二段拆贡献。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000010;
int dp[N], n, p, sum[N];
signed main() {
	ios::sync_with_stdio(0);
	cin >> n >> p;
	for(int i = 1; i <= n; i++) {
		dp[i] = (sum[i - 1] + 1) % p;
		int k = __lg(i);
		for(int j = 0; j < k; j++) if(i & (1 << j)) {
			dp[i] = (dp[i] - (sum[(1 << j) * 2 - 1] - sum[(1 << j) - 1]) + p) % p; 
		}
		sum[i] = (sum[i - 1] + dp[i]) % p;
	}
	cout << sum[n] << '\n';
	return 0;
}

T3 50pts 是 Nim 游戏,然后考虑直接倍增维护答案。

啥都可以二进制拼起来。

T4 不会。

rating:\(1844\rightarrow 1929\)

11.17

\(100+100+40+36=276\),rk4,Tyih 好强。

T1 纯模拟。

T2 考虑将每个字符串用二进制表示,然后 bfs 找状态,将数字取反找最近的就说明原数是最远的。

T3 神秘树状数组,T4 神秘矩阵优化套线段树,我不会。

rating:\(1929\rightarrow 1953\)

11.18

T1 神秘原。

T2 没找到规律,我是这个。

T3 预处理阶乘不取模,我是这个。

\(100+10+45=155\),rk3。

rating:\(1953\rightarrow 2005\)

11.20

T1 \(m\) 写成 \(n\) 怒挂 \(70\),也算是还 CSP-S 2024 的债了。

T2 \(n\le 3\times 10^5\) 开了 1e5 的数组,又挂 \(70\)。

T3 人唐常数大没卡过去,T4 暴力 \(45pts\)。

\(30+30+45+45=150\),rk10。

rating:\(2005\rightarrow 1808\)

11.21

T1 傻子题,T2 初一写过。

T3 先删黑子树,然后手搓一下发现答案跑数奇偶点、直径有关。

然后某 sb 求直径写挂了,我不说是谁。

T4 \(O(n^2)\) 乱搞冲过了随机数据,喜提 \(70\)。

\(100+100+20+70=290\),rk3。

rating:\(1808\rightarrow 1926\)

11.24

NOIP 模拟赛第一次上 \(300\)(不是第一次场切 T3),记之。

T1 过于唐。

T2 直接找最长的不交的数值相同的段即可,不难发现 DP 可做。

T3 神秘人类智慧,总之一定是头顶数字最大的那个人先知道。

然后可以根据手搓过程递归,个人觉得统计转了几圈比较方便。

#include<bits/stdc++.h>
using namespace std;
const int N = 510;
int t, x;
struct node {
	int a, b, c;
};
vector<node> ans;
int dfs(int x, int y, int z) {
//	cout << "x = " << x << ' ' << y << ' ' << z << '\n';
	if(x == y || y == z || z == x) return 0;
	int mx = max({x, y, z});
	if(mx == x) return dfs(abs(y - z), y, z) + 1;
	else if(mx == z) return dfs(x, y, abs(x - y));
	else return dfs(x, abs(x - z), z) + (z > x);
}
int main() {
	ios::sync_with_stdio(0);
	while(cin >> t >> x) {
        if(t == -1 && x == -1) break;
		ans.clear();
		for(int i = 1; i < x; i++) {
			int ret = 0;
			if(t % 3 == 1) {
				ret = dfs(x, i, x - i);
				if(ret == t / 3) ans.push_back({x, i, x - i});
			}
			if(t % 3 == 2) {
				ret = dfs(i, x, x - i);
	//			cout << i << ' ' << x << ' ' << x - i << ' ' << ret << '\n';
				if(ret == t / 3) ans.push_back({i, x, x - i});
			}
			if(t % 3 == 0) {
				ret = dfs(i, x - i, x);
	//			cout << i << ' ' << x << ' ' << x - i << ' ' << ret << '\n';
				if(ret == t / 3 - 1) ans.push_back({i, x - i, x});
			}
		}
		
		cout << ans.size() << '\n';
		for(auto it: ans) {
			cout << it.a << ' ' << it.b << ' ' << it.c << '\n';
		}
	}
	return 0;
}

\(100+100+100+0=300\),并列 rk1,但是由于 OJ 上有罚时喜提 rk3。

rating:\(1926\rightarrow 1991\)

11.25

神秘线下模拟赛,来自义乌中学。

已严肃完成《数据有梯度》大学习。

T1 神秘构造,直接取质因子只有 \(2,3,5,7,11\) 的数,然后统计一波,没到一半的质因子给他乘到一半,反正够用。

T2 神秘分治。考虑画笛卡尔树,然后记节点 \(u\) 的左子树大小为 \(L_u\),右子树大小为 \(R_u\),可以发现:

\[\sum\limits_{i=1}^n \min(L_i,R_i)=\mathcal{O}(n\log n) \]

证明思想类似于启发式合并,大概就是完全二叉树能取到最大。

于是枚举节点,计算每个较小子树中的 \(a_j\),在较大子树中有多少数满足 \(a_k\le \dfrac{a_i}{a_j}\) 即可。这个可以离线二维数点解决。

注意到每个点的子树对应的都是一个区间,所以只需要单调栈求出左右儿子对应的区间就行了,不需要画出笛卡尔树。

总复杂度 \(\mathcal{O}(n\log^2n)\)。

#include<bits/stdc++.h>
using namespace std;
#define pii pair<int, int>
#define mk_p make_pair
#define fi first
#define se second
#define int long long
unordered_map<int, int> tr;
const int N = 100010, M = 1e9 + 10;
int lbt(int x) {return x & (-x);}
void add(int x) {
//	assert(x);
	for(; x <= M; x += lbt(x)) tr[x]++;
}
int ask(int x) {
	int ans = 0;
	for(; x; x -= lbt(x)) ans += tr[x];
	return ans;
}
int a[N], n, tot, le[N], ri[N], m;
pii b[N];
struct Query {
	int id, x, flag;
} q[N * 40];
bool cmp(Query a, Query b) {
	return a.id < b.id;
}
signed main() {
//	freopen("pair.in", "r", stdin);
//	freopen("pair.out", "w", stdout);
	ios::sync_with_stdio(0);
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> a[i];
	for(int i = 1; i <= n; i++) {
		while(tot && b[tot].fi < a[i]) tot--;
		le[i] = b[tot].se + 1; b[++tot] = mk_p(a[i], i);
	}
	tot = 0;
	for(int i = n; i; i--) {
		while(tot && b[tot].fi <= a[i]) tot--;
		ri[i] = tot ? b[tot].se - 1 : n; b[++tot] = mk_p(a[i], i);
	}
	for(int i = 1; i <= n; i++) {
//		cout << i << ' ' << le[i] << ' ' << ri[i] << '\n';
		int L = i - le[i], R = ri[i] - i;
		if(L <= R) {
			if(i > 1) q[++m] = {i - 1, 1, -1};
			q[++m] = {ri[i], 1, 1};
			for(int j = le[i]; j < i; j++) {
//				cout << i << ' ' << j << '\n';
				q[++m] = {ri[i], a[i] / a[j], 1};
				if(i > 1) q[++m] = {i - 1, a[i] / a[j], -1};
			}
		}
		else {
			q[++m] = {i, 1, 1};
			if(le[i] > 1) q[++m] = {le[i] - 1, 1, -1};
			for(int j = i + 1; j <= ri[i]; j++) {
//				cout << i << ' ' << j << '\n';
				if(i > 1) q[++m] = {i, a[i] / a[j], 1};
				if(le[i] > 1) q[++m] = {le[i] - 1, a[i] / a[j], -1};
			}
		}
	}
	sort(q + 1, q + 1 + m, cmp);
	int ans = 0, j = 1;
	for(int i = 1; i <= n; i++) {
		add(a[i]);
//		cout << i << ' '
		while(j <= m && q[j].id == i) {
//			cout << "i = " << i << ' ' << q[j].x << ' ' << q[j].flag << '\n';
			ans += ask(q[j].x) * q[j].flag;
			j++;
		}
	}
	cout << ans;
	return 0;
}

注意二维数点之前应该先离散化,但是我懒所以直接写动态开点了。

T3 只会 \(\mathcal{O}(n^2)\),拜谢 bbbzzx 切了。

T4 题都没看,但是拜谢 bbbzzx 切了。

\(100+100+65+0=265\),在拿下 T2 全场唯一有分的情况下被 bbbzzx 薄纱,拿下 rk2。

posted @ 2025-02-17 15:35  Stitch0711  阅读(191)  评论(1)    收藏  举报