1. CF1848C Vika and Price Tags
题目描述
https://www.luogu.com.cn/problem/CF1848C
题目概况
来源:Codeforces
洛谷难度: 绿题 \color{green}绿题 绿题
CF难度: 1800 1800 1800
标签:数论 最大公约数 数对奇偶性
思路点拨
首先原题每次操作使:
- a i = b i a_i=b_i ai=bi
-
b
i
=
∣
a
i
−
b
i
∣
b_i=|a_i-b_i|
bi=∣ai−bi∣
( 2 2 2 操作同时进行)
这个操作本身就是属于九章算术里的更相减损术,最终当 a i = 0 a_i=0 ai=0 时,同理 b i = gcd ( a i , b i ) b_i=\gcd(a_i,b_i) bi=gcd(ai,bi),这就证明了对于 ∀ i ∈ [ 1 , n ] \forall i∈[1,n] ∀i∈[1,n] 均能通过数次操作之后满足 a i = 0 a_i=0 ai=0
当 a i = 0 a_i=0 ai=0 后,我们会发现一个周期性现象如下
a i a_i ai | b i b_i bi |
---|---|
0 | gcd ( a i , b i ) \gcd(a_i,b_i) gcd(ai,bi) |
gcd ( a i , b i ) \gcd(a_i,b_i) gcd(ai,bi) | gcd ( a i , b i ) \gcd(a_i,b_i) gcd(ai,bi) |
gcd ( a i , b i ) \gcd(a_i,b_i) gcd(ai,bi) | 0 |
0 | gcd ( a i , b i ) \gcd(a_i,b_i) gcd(ai,bi) |
gcd ( a i , b i ) \gcd(a_i,b_i) gcd(ai,bi) | gcd ( a i , b i ) \gcd(a_i,b_i) gcd(ai,bi) |
…… | …… |
由此进入长度为
3
3
3 的循环,之后发现当
a
i
a_i
ai 和
b
i
b_i
bi 的奇偶性所组成的数对决定了到底在第
m
m
o
d
3
m \mod 3
mmod3 次出现
a
i
=
0
a_i=0
ai=0 的情况.
还有
2
2
2 点需要注意
- a i = b i = 0 a_i=b_i=0 ai=bi=0 满足任意情况
- a i m o d 2 = b i m o d 2 = 0 a_i \mod 2 =b_i \mod 2 =0 aimod2=bimod2=0 将 a i 、 b i a_i、b_i ai、bi 同时除 2 2 2 直到其中一方没有因子 2 2 2
A C AC AC.
题目收获
分类
2. CF1396B Stoned Game
题目描述
https://www.luogu.com.cn/problem/CF1396B
题目概况
来源:Codeforces
洛谷难度: 绿题 \color{green}绿题 绿题
CF难度: 1800 1800 1800
标签:博弈论
思路点拨
每个人取当前(除上一个人取得石子堆)里含有最多石子的那一堆为最优策略,因为这样才能保住大后方撑得时间更久,用 p r i o r i t y priority priority_ q u e u e queue queue 维护一下即可
A C AC AC.
3. CF645D Robot Rapping Results Report
题目描述
https://www.luogu.com.cn/problem/CF645D
题目概况
来源:Codeforces
洛谷难度: 绿题 \color{green}绿题 绿题
CF难度: 1800 1800 1800
标签:拓扑排序
思路点拨
一道很经典的拓扑排序
能否真正严格排机器人的能力,取决于有没有越过一个临界点,显而易见的是,当越过这个临界点后给再多的消息都可以严格排序(因为不可能出现弱的机器人噶掉强的机器人)。总而言之,消息的数量相对于临界点是单调递增的,只需要二分消息的数量。
总结一下步骤如下:
- 二分消息的数量
- 拓扑排序判断其是否严格(经过一次找入度为0的点,至多找到一个,否则出现2个机器人能力相对并列的情况)
A C AC AC.
trick
确定依赖元素之间的数值严格排序
\color{blue}确定依赖元素之间的数值严格排序
确定依赖元素之间的数值严格排序
(去重满足拓扑排序每次加点操作至多添加一个点
)
\color{blue}(去重满足拓扑排序每次加点操作至多添加一个点)
(去重满足拓扑排序每次加点操作至多添加一个点)