7.12 模拟赛
7.12 模拟赛
今天 T3 没卡时,遗憾 rk3。
T1. ha
Description
$1\le n\le 1\times 10^5,1\le m\le 100,l1,l2,r1,r2\le m$
Solution
这题虽然签到,但是重点在于 每次操作之后,都可以看到计数器当前的显示值。所以每一位是要单独计算的。
反着做,每次模拟 $i$ 这个位置两次不同效果的期望值大小。比较取大的即可。前缀和搞一下。
Code
1 |
|
T2. carve
Description
$1\le n\le 10^6,a_i\le n$
Solution
实际上,题目转化为有两个机器,一个机器如果新加入或者加入和上一个加入的颜色不同,则花费一点代价。求代价最小化。
前几天做到一个这道题的加强版。就是有划分成 $k$ 个有序集合。回到这题,考虑贪心。如果当前节点和原来机器的颜色都不一样,则贪心去机器下一个颜色一样的位置大的机器。证明略。具体看代码。
Code
1 |
|
T3. sword
Description
给定 $1$ 个长度为 $n$ 的正整数序列 $a$。每次操作可以选择 $a_i$ 加 $1$ 或者减 $1$,但需要满足 $a_i$ 为正数。
求让 $\gcd(a_1,a_2,a_3,…,a_n)>1$ 的最少操作次数。
$n\le 2\times 10^5,a_i\le 1\times 10^{12}$
1s 512MB
Upt on 12.21:CF1305F
Solution
很有意思的题目!
一种显然的想法就是枚举质数 $p$ ,如果答案为 $p$ 的倍数的最小操作次数。这样做是 $O(n)$ 的。
注意到 $p=2$ 时,答案 $\le n$。
考虑使枚举质数 $p$ 的次数变少。观察到操作次数不超过 $1$ 的个数有至少有 $\dfrac{n}{2}$ 个。考虑随机出一个数 $a_i$,枚举 $a_i-1,a_i,a_i+1$ 三个数的质因子。多随几个,保证正确率。随机 $n$ 次的错误率是 $(1/2)^n$。
我的考场做法是枚举 $[a_i-100,a_i+100]$ 的质因子。这样做效率显然是没有上面高的。但是能过/shl
下次随机化必写卡时,警戒
Code1 考场代码
1 |
|
Code2 std
1 |
|
T4. war
Description
$n\le 5\times 10^5$
同 CF798E
注意空间限制。
Solution
方心童说这个东西叫做 “线段树隐式建图”,反正是我没见过的。
空间为 $O(n^2)$ 的暴力是显然的。
Step 1
方便起见,将等于 $-1$ 的 $a_i$ 改成 $n+1$。同时,记 $p_x$ 为满足 $a_i=x$ 的 $i$ ($x$ 的前驱),如果没有就记为 $n+1$。
注意到其实对于所有 $i$ 满足:
- $f_{p_i}<f_i$
- 对于满足 $j<a_i$ 且 $p_j>i$ 的 $j$ ,$f_j<f_i$
注意到建出这两类有向边以后,跑拓扑排序。$f_i$ 即为其拓扑序。容易发现条件是充要的。
Step 2
有一个叫做 dfs 拓扑排序 的东西,过程如下:
建反向边
从 $i$ 进入,由 $i$ 出发的反向边,搜从没有经历过的点
都搜完以后,时间戳 $t\Leftarrow t+1$,作为 $i$ 的拓扑序。
正确性是显然。每条边和每个点只会经过一次,复杂度上是 $O(n+m)$ 的。
Step 3
考虑套用这个过程。
对于第一类边,只有 $O(n)$ 条,直接跑。
对于第二类边,每次不断找 $j<a_i$ 中 $p_j$ 最大的,如果 $>i$ ,则继续搜。由于一个点只会经过一次,找到 $j$ 以后删掉即可。
每个点只会删一次和经过一次,复杂度是 $O(n\log n)$ 的。
空间上,只有线段树和一些线性数组,甚至没有建边,空间复杂度是 $O(n)$ 的。这可能也是 隐式建图 的来源。
Code
1 |
|