9.28 ~ 10.4 每周总结
尽管下一周马上结束,但是还是要补一下上周的总结的。
9.28 周一
在家学文化课。
9.29 周二
在家学文化课。
9.30 周三
爽爽打月赛。
P17538 音符方阵
难度:微粒。
首先行直接填,然后发现对于列第 \(i\) 列在 \(i\) 之后不会在出现数,直接对列也做一下就行。
P17539 日月同错
难度:水。
首先对于一个区间如果长度为奇数就无解。
否则设 \(d\) 表示 \(0\) 和 \(1\) 个数的差值。
那么一次转化是给 \(d\) 加减 \(2\),可以证明区间长度为偶数时必定有解。
于是答案的下界就到了 \(d\neq 0\) 的区间个数。
更进一步的,对于一个区间,我们选取其一个端点,那么将每扩展一位,\(d\) 的值画出来,就会发现,两个端点分别是 \(d\) 和 \(-d\),于是一定有一位使得 \(d=0\)。
这样可以将两个区间进行配对,对答案向上取整除 \(2\) 就行。
P17540 发迹
难度:岩浆++。
好厉害。
首先可以感觉出来答案不会很大。
第一种情况是仅有一种字符,答案为 \(1\)。
第二种情况是存在只出现了一次的字符,最小的权值是 \(0\),方案数直接任排就行,大概是 \(\sum_{c_i=0}(n-1)!\prod_{c_i\neq 0}\frac{1}{c_i!}\)。
第三种情况就是无特殊的情况了,分为两部分贡献。
首先我们会发现,一定存在一个 \(c_i\leq \lceil\frac{n}{2}\rceil\),这样直接取这个数,将两个它放在前面,并在后面其每次出现时都在后面放一个其他元素,这样权值就是 \(1\)。
于是先统计前两个数相同的贡献,答案是简单的插板法。
现在统计前两个数不相同的情况,假设是前两个是 \(ij\)。
那么现将除了 \(j\) 之外的数进行任排,再将 \(j\) 插入其中,可以发现除了 \(i\) 的后面,在其余任意位置都可以,所以这部分也是简单的插板法。
需要注意的是固定了前两个数。
这部分贡献是:
注意剔除一下 \(i=j\) 的情况。
但是这样复杂度是 \(O(Tk^2)\) 的,太劣了,只能得到 68 pts。
怎么优化?
先化简一下式子:
这个东西该怎么优化呢?
这时候突然发现,\(c_i\) 的本质不同取值其实只有 \(\sqrt{n}\) 种!
于是直接将所有相同的 \(c_i\) 合并,然后计算上式即可。
于是复杂度是 \(O(Tn)\) 的。
P17541 25HRS
难度:?
这 Div.2 有力气,不会。
10.1 周四
爽爽打月赛。
P17554 「WWOI R4」二五一十
难度:微粒。
有 \(5\) 就乘 \(2\),有偶数就乘 \(5\),完了。
P17555 「WWOI R4」构造大师
难度:水/???
什么来着。
感觉答案肯定很有规律,于是直接盲猜 \(a_i = 3(i - 1)\),\(b_i = 3(i - 1) + 1\),然后直接就过了。
结论是猜的,证明是没想的。
证起来应该不难()
P17556 「WWOI R4」WsW 的数字
难度:水+。
难度所在?
?!拼数数拼!?
先将所有的 \(A_i\) 对齐,长度不够直接末尾填上比 '0' 小的字符。
设 \(m = \max{|A_i|}\)
直接给所有的 \(A_i\) 排个序,\(O(nm\log n)\) 或者 \(O(nm+n\log n\log m)\)。
就是比较函数换成二分hash。
然后从高到低考虑 \(dp_{i, 0/1}\) 表示拼到长度为 \(i\) 满足相等/小于的方案数,转移的话先枚举 \(j\),然后提取出 \(k\) 从 \(j\) 开始的 \(m\) 位。
提取完了直接二分找到所有比其小的 \(A_i\)。
然后直接转移就行。
不过相等的条件由于存在 \(|A_i|\neq m\) 的情况,需要用 hash 判断一下。
复杂度 \(O(|k|m\log n)\) 或 \(O(|k|\log m\log n)\)。
不用二分 hash 也能过。
P17557 「WWOI R4」XOR and Number Theory Ⅱ
这 Div.2 有力气。
难度:???
打了 50 分的表,但是大小 8MB。
最终打 25 分的表逃跑了。
仅观察到了答案最大为 3。
10.2 周四
不爽爽打 ICPC。
尽管队伍有三个人,但其实是个人参赛。
P17563 「FAOI-R15」Program of base(x) 2029
难度:微粒。
直接预处理每个 \(k\) 对应的次数就行。
P17569 「FAOI-R15」XOR and Ugly Equation
难度:水+。
直接猜从低到高位依次填入是对的。
然后发现在最低位被 hack 了,那直接枚举一下最低位是啥就行了。
具体证明考虑一位的值一定会影响到这一位的值就行。
P17558 「FAOI-R15」A Gleam for the Sightless
难度:水。
首先可以对两个不相对的角查询得知一个交点。
那么我们发现现在这个人一定在后一次查询的线段上,并且要在前一次查询的线段上移动一格,那么这样合法的位置只有两个,直接盲猜一个就行。
这样错误率是 \(\frac{1}{64}\) 的,可以通过。
P17568 「FAOI-R15」XOR and Trivial Construction
难度:???
什么破题。
首先我们发现异或操作其实是对于所有异或出来为 \(1\) 的位做出限制,那么我们自然的想到让 \(c\oplus d = 2\),这样 \(c+d\) 的取值最多样。
所以我们直接打表,打出所有合法的情况,发现 \(c\oplus d=2\) 确实一定有解。
然后发现 \(b\) 的大小不会超过 \(8\),所以直接暴力枚举,然后判一下有没有 \(c\oplus d=2\) 的解就行。
10.3 周五
出去拍胸片了,神秘比赛晚上打的。
T1 报数(skipseven)
难度:微粒。
咋还有原。
直接全都筛出来就行。
T2 车票(tickets)
难度:水。
首先是 DAG,直接扫一遍。
然后两个长度直接线段树区间取 min,方案数直接合并就行。
T3 网格保留(grid)
难度:水。
直接顺序扫,合法的情况一定是相邻两个存在区间重合,线段树区间取 min,区间求 min 即可。
代价均衡(equilibrium)
难度:水+。
首先限制要求先选好源点和汇点,源点只能减,汇点只能加。
那么肯定是大于平均值的是源点,小于的是汇点,等于的不用管。
现在考虑什么时候会出现代价不同。
假设出现了:源汇源汇这样的情况,那么可以将其中的 \(1\to 2,3\to 4\) 变成 \(1\to 4,2\to 3\) 使得代价变大,所以可得所以的源点在一起,所有的汇点在一起。
先确定一下等于平均数的放在哪里,然后做两个任排即可。
特判一下平均值不是整数的情况。
10.4 周日
七天里咋打了五天比赛。
打错场了。
T1 词典(lexicon)
难度:微粒。
懒得写了。
T2 分拣带(sortbelt)
难度:水+。
首先注意到如果出现了一处无序,需要将整个前缀或后缀全都移动,那么我们需要求出在值域上最大的区间,使得提取出这个区间后其中元素单调不降。
直接最大子段和写一写就行。
记得特盘该元素没出现过的情况。
T3 彩色弹珠(marbles)
难度:水+。
首先如果我们对于颜色上给出一个排列的映射关系,那么代价就是其中的逆序对个数(因为是排序)。
那么我们现在就是要找到这样的排列,使得逆序对个数最少。
首先可以将排列转化成状压,因为贡献的计算其实并不是很复杂。
顺序考虑第 \(i\) 大的颜色是哪个,逆序对的计算可以预处理出如果 \(a\) 颜色比 \(b\) 颜色大时的逆序对个数。
复杂度:\(O(2^KK^2)\)。
T4 修路比赛(races)
难度:水+。
依旧是 DP 优化。
\(dp_i\) 状态就是以 \(i\) 结尾的代价,转移就是获得区间的代价和包含在这个区间内的所有比赛的权值。
我们发现这些不同选点区间一定落在端点上,直接把比赛贡献挂在左端点,减掉代价的前缀和,查询的时候前缀查询再加上代价前缀和就好。
C. 留下的火种
难度:岩浆-。
主要是关键转化。
首先对于一个场面求答案不太好做,考虑转化成对于一个答案求所有场面。
我们考虑一个答案对于哪些场面是合法的,先预处理出火源到每个点的最短路,然后对于每个点,找到所有比这个答案短的火源,则这些数里一定要存在一个被点亮。
但是这样的限制太难做了,怎么办?
这样的或起来在与起来太难了,反过来就是与再或了。
直接考虑求出一个场面最大的不满足条件的答案,这样对于一个答案,每个点都确定一些点不能被选时场面就非法,直接做一个超集和就行。
D. 降低一项
难度:恒星+。
不想写。
首先先看一下不带修的版本。
由于固定一个点后,两端的转移和最大值限制关系很大,考虑 CDQ 分治。
现在到了 \([l, r]\),设 \(A_i, B_i\) 分别为前一半后缀最大值和后一半前缀最大值,那么 \(i\to j\) 合法就是 \(j - i>A_i,j - i>B_j\),二维数点离线做就行。
带修怎么办?
由于是将一项变成 \(1\),那么会新增一些合法方案,这些方案仅在包含这个点的区间上不同,那么找一下多少个包含这个点的区间变成合法的即可。
怎么找呢?
\([l, r]\) 会变成合法的话,则一定说明这个区间的次大值不比区间大,这个元素是区间最大值,这同时表明其是唯一的最大值。
这个如何求呢?
依然分治,假设现在求前一半的点。
那么额外设 \(C_i\) 表示前一半的后缀次大值。
那么限制为:
数点就行了,每个区间把两端方案数贡献给 \(i\)。
复杂度 \(O(n\log^2 n+q)\)。
ds 认为有 \(O(n\log n)\) 的做法,但始终没写出代码。

浙公网安备 33010602011771号