NOIP 模拟赛:2024-11-18
福利场。
T1:
题意:\(n\times n\) 棋盘放 \(k\) 个主教。问多少个格子被攻击了。
对每个从对角线维护 \(dp[i]\) 表示这条对角线有多少个不被攻击。可以从两边往递推。
T2:
题意:两人博弈。给定矩阵,先手每次挑一行删掉,后手每次挑一列删掉。先手想最大化最后的数,后手想最小化最后的数。问最后的数是多少。
行最小值的最大值。
T3:
\(n\le 10^5\)。
因为 \(n<2^{17}=131072\),所以我们可以使用 \(131072,262144\) 保证不重复。
显然度数为偶数的没用,然后令 \(now=\) 剩余被固定的与 \(n\) 的异或值。记剩余未被固定的数个数为 \(cnt\)。
当前目标:构造 \(cnt\) 个数是它们异或为 \(now\)。
-
\(cnt=0\),若 \(now\neq 0\) 无解,否则直接输出。
-
\(cnt=1\),若 \(now\) 被用过了误解,否则让这个未被固定的等于 \(now\),输出。
-
\(cnt=2\),若 \(now=0\) 无解,否则让一个的 \(2^0\sim 2^{16}\) 部分 \(=now\),输出。
-
\(cnt>2\)。若 \(cnt\) 为偶数,每个未固定的都先加上 \(131072\);若 \(cnt\) 为奇数,第一个加上 \(131072+262144\),第二个加上 \(262144\),之后都加上 \(131072\)。
然后使第二个到最后一个的低位部分随便选(例如选 \(1\sim sz\))。记这堆随便选的数的异或和为 \(sum\)。然后让第一个的低位部分等于 \(sum\bigoplus now\) 即可。
坑点:正整数。
T4:
注意到修改的位置只可能是某类数的第一个,且只会改成已有的数。
分类:若改成前面已有的数,可以用 set 简单维护最大贡献;若改成后面已有的数,用两颗线段树维护 \(\le a[i],>a[i]\) 的两种贡献,和 \(a[i]\) 无关的贡献都丢到线段树上统计,在两颗线段树上区间查询即可。