Codeforces Round #700
A,B 题:快进。
C 题:
难度:1.7
看到询问次数不难想到跟
l
o
g
log
log 结合在一起,证明一个结论:若一个区间
[
l
,
r
]
[l,r]
[l,r] 满足
a
l
−
1
>
a
l
a_{l-1}>a_l
al−1>al 且
a
r
+
1
>
a
r
a_{r+1}>a_r
ar+1>ar 的值则其中一定存在合法解。
显然原区间满足限制。
显然二分了之后左右会有一个区间满足限制,于是直接递归下去即可。
D1 题
难度:1.9
贪,就硬贪。
原问题等价于有两个队列,每个数加入一个队列,当讨论到第 i i i 个数的时候,分类讨论:
- 该数和一个队尾相同,则加入另一个。
- 和两个队尾都不同,加入队尾后继小的一个。
正确性自行感性理解。
D2 题:
难度: 1.9
和 D1 的差别是一个求最小,一个求最大。和上个一样。
E 题:
难度:2.4
还算有趣的二进制拆分构造题,可惜以前做过了几乎一样的,就觉得略显套路了。
首先 n = 32 n=32 n=32 绝对跟二进制脱不了干系。
可以想到相邻两个点之间连两条边,边权分别为 0 0 0 和 2 i 2^i 2i,即可求得答案。
Codeforces Round #699
A,B 题:快进。
C 题:
难度:1.3(思维) 1.7(代码)
不难想到局面可以倒推,直接模拟即可,但是比较难写,所以代码鸽了。
D 题
难度:2.1
大力分类讨论的构造题,自己没想出来可能是因为想的时候没带草稿纸。
首先如果存在 C u , v = C v , u ( u ≠ v ) C_{u,v}=C_{v,u}(u\neq v) Cu,v=Cv,u(u=v) 就可以直接沿着这两条边走。
那么此时任意两点之间两边颜色不同。
如果
n
n
n 为奇数,那么显然可以沿着两点之间走,走出来就是 ABABABABABA...
。
然后此时 n n n 为一个奇数,此时我就不会了。。看了题解才晓得原来是考虑一个三元环 x , y , z x,y,z x,y,z,则其中必存在一个 C x , y = C y , z C_{x,y}=C_{y,z} Cx,y=Cy,z 这种,以此继续分类讨论。
如果
m
2
\frac{m}{2}
2m 是奇数,那么可以构造为aabbaabbaabbaabbaabb...
否则,就得到 ...baab...
这样一组解(这个地方需要手玩一下)。
E 题:
难度:2.0
主要难度在于如何想到 dp(我一直再往贪心上想,于是就不会了
Codeforces Round #766
A,B,C题:快进
D题:
难度:1.7
注意到
a
i
≤
1
0
6
a_i\le 10^6
ai≤106 且从大到小加入是最优的,所以考虑倒着枚举
i
i
i ,检查
i
i
i 是否能加入,它能加入当且仅当存在两个
i
i
i 的倍数 gcd 为
i
i
i。枚举倍数是一个调和级数。
问题是怎么 check 是否两个倍数除
i
i
i 后互质。
(下文默认所有倍数均先除了
i
i
i)
有脑子的做法:如果存在两个数互质,那么整个序列 gcd 一定为
1
1
1。使用
O
(
log
n
)
O(\log n)
O(logn) 的 gcd的话,复杂度
O
(
n
log
n
(
log
(
log
n
)
)
)
O(n \log n (\log (\log n)))
O(nlogn(log(logn))) 。使用
O
(
n
)
/
O
(
1
)
O(n)/O(1)
O(n)/O(1) 这种高科技的话,复杂度
O
(
n
log
n
)
O(n \log n)
O(nlogn)。
无脑子的做法(我的做法):对于每个数类似埃式筛一样把倍数删掉,最后看能不能留下两个及以上的数字。复杂度也是
O
(
n
log
n
(
log
(
log
n
)
)
)
O(n \log n (\log (\log n)))
O(nlogn(log(logn))) 。
E题:
难度:1.5
非常的水啊,注意到有用的点只可能是楼梯两端的点,但是我大意了啊,没想到这样建出来的是有向无环图,所以DP/dijkstra/拓扑排序等等牛鬼神蛇都可以过,而隔壁XuKe写SPFA fst了,但是测评机也大意了啊,把我的 SPFA 1.8s 放过去了(