Codeforces Round #703[CF1486]
退役选手一个无聊的晚上。
退役半年,手速和思维都降下来了呀。
A
从前往后贪心,第 $i$ 个位置看是否能把它搞成 $i-1$。
然而因为自己智障还WA了两发。
1 | int n,x,flag; |
B
显然 $x,y$ 坐标分开,然后中位数。
3min看完题+写完。(英文水平有所上升)
1 | const int N=1010; |
C
交互题。
一开始还以为是个什么难题。
结果发现自己是在打div.2,在打div.2的C。
于是先找出整体次大,然后看最大在哪一边,然后二分即可。
1 | int n; |
D
一眼题。
直接二分答案,然后奇偶分开讨论,顺着扫一遍,用个数据结构维护就好了。这里用set。
1 | const int N=200010; |
E
$1\leq w_i\leq 50$,这性质很有用。
于是记 $f_{i,j}$ 表示走到 $i$,上一条边的费用是 $j$ 的最短路。特别地,$f_{i,0}$ 表示走完两条路。
于是dijkstra即可。
1 | const int N=100010; |
F
将 $1$ 作为根。
不难发现,如果两条路径有且仅有一个相交的点,那么肯定是两条路径的lca中的一个。
分两种情况。
1,两条路径lca相同。用总数减去不合法的情况即可。
2,两条路径lca不同。树上差分一下统计一些东西就可以了。
可以做到线性。
懒得写代码了,睡觉去了。