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\) 的后面,在其余任意位置都可以,所以这部分也是简单的插板法。

需要注意的是固定了前两个数。

这部分贡献是:

\[p=\sum_{i=1}^k{c_i!} \]

\[\sum_{i=1}^k\sum_{j=1}^k{\frac{(n-c_j-1)!}{p}c_i!c_j!\frac{1}{(c_i-1)!}\binom{n-c_i-1}{c_j-1}} \]

注意剔除一下 \(i=j\) 的情况。

但是这样复杂度是 \(O(Tk^2)\) 的,太劣了,只能得到 68 pts。

怎么优化?

先化简一下式子:

\[\sum_{i=1}^k{\frac{c_ic_j(n-c_i-1)!(n-c_j-1)!}{p(n-c_i-c_j)!}} \]

这个东西该怎么优化呢?

这时候突然发现,\(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\) 表示前一半的后缀次大值。

那么限制为:

\[A_i>j-i+1\geq C_i,A_i>j-i+1\geq B_j \]

数点就行了,每个区间把两端方案数贡献给 \(i\)。

复杂度 \(O(n\log^2 n+q)\)。

ds 认为有 \(O(n\log n)\) 的做法,但始终没写出代码。

posted @ 2026-10-11 14:04  QEDQEDQED  阅读(27)  评论(5)    收藏  举报