ALL:6
AC:3
补题:2
A略。
B. Bit Flipping
-
题意:给定一个长为 n n n 的 01 串,你可以进行 k k k 次操作。每次操作中,你可以选择任意一位,并将除了这一位以外的其它位翻转(1 变 0,0 变 1),输出 k k k 次操作后能获得的字典序最大的字符串,并输出每一位在操作中被选择的次数。若有多解输出任意一解。
-
思路:首先发现性质:对某两位分别操作的话,这两位会置反,且其他位不变。这启发我们可以消去一对0。如果最后剩下一个0的话,将其与末尾配对即可。但是注意到 k 有可能是奇数,因此找到第一个1并操作,这样可以贪心的使得字典序最大且将 k 调整至偶数。
-
AC代码:https://codeforces.com/contest/1659/submission/157654609
C. Line Empire
- 题意:
你是一个野心勃勃的帝王,但在你征服实数集的王国前,你需要先征服整数集的王国。
假设有一个数轴,你的王国以及其首都初始均位于原点。除此之外数轴上还有
n
n
n 个未被征服的王国,它们分别位于整数
x
1
,
x
2
,
⋯
,
x
n
x_1,x_2,\cdots,x_n
x1,x2,⋯,xn 处。你的目标即是征服这些王国。
给定常数
a
,
b
a,b
a,b,你可以进行下列操作若干次:
- 你可以选择一个已经被征服的王国,然后把首都迁到那个王国。
假设你的首都与所选王国距离为 c c c,那么这次操作的代价为 a × c a\times c a×c。 - 你可以选择一个没有被征服的王国,满足你的首都与其之间没有其他未被征服的王国,然后征服那个王国。
假设你的首都与所选王国距离为 c c c,那么这次操作的代价为 b × c b\times c b×c。
求出征服所有王国的最小总代价。
每个测试点包含
T
T
T 组数据。
-
思路:贪心。假设现在要攻打远处的王国,如果未来会向前移动,则此时先移动再打比先打之后再移动肯定更优,因此思路就是每攻打一个城市就向前走,枚举最终的落脚点推公式并统计答案即可。和 【4.2】Codeforces 刷题 C题挺像。
-
AC代码:https://codeforces.com/contest/1659/submission/157656836
D. Reverse Sort Sum
- 题意:
对于序列
a
a
a,我们定义
f
(
k
,
a
)
f(k,a)
f(k,a) 表示将
a
a
a 的前
k
k
k 个元素从小到大排序后得到的序列。
现在我们有一个长度为
n
n
n 的 01
序列
A
A
A,我们将根据其进行下列操作:
- 对于 1 ∼ n 1\sim n 1∼n 的每个整数 i i i,设序列 B i = f ( k , A ) B_i=f(k,A) Bi=f(k,A)。
- 然后设长度为 n n n 的序列 C C C,满足 C i = ∑ j = 1 n B j , i C_{i}=\sum_{j=1}^nB_{j,i} Ci=∑j=1nBj,i。
给你
n
n
n 和
C
C
C,你需要构造任意一个长度为
n
n
n 的 01
序列
A
A
A,满足我们根据
A
A
A 经过上述操作可以得到
C
C
C。保证有解。
每个测试点包含
T
T
T 组数据。
-
题解:https://www.luogu.com.cn/problem/solution/CF1659D @Frevotops
-
思路:倒推。我们可以根据前缀的平均值得到当前前缀01序列(关键性质在这里,赛时没想到),要推出前缀最后一个数的话可以先减去 f(i,a) 得到前 i-1 个01序列,根据前缀末尾上数字是否为0来判断01。用数据结构区间减前缀查询。
-
AC代码:https://codeforces.com/contest/1659/submission/157800113
E. AND-MEX Walk
- 题意:
给定一个
n
n
n 个节点
m
m
m 条边的无向简单连通图,边有边权。
我们定义一条途径(即可以重复经过同一个节点或同一条边的路径)的权值如下:
- 设该途径按顺序经过的边的权值为
w
1
,
w
2
,
w
3
,
⋯
w_1,w_2,w_3,\cdots
w1,w2,w3,⋯。
则该途径的权值为 mex ( { w 1 , w 1 & w 2 , w 1 & w 2 & w 3 , ⋯ } ) \text{mex}(\{w_1,w_1\&w_2,w_1\&w_2\&w_3,\cdots\}) mex({w1,w1&w2,w1&w2&w3,⋯})。
其中 & \& & 表示按位与运算, mex ( S ) \text{mex}(S) mex(S) 表示 S S S 中未出现过的最小自然数。
给定 q q q 次询问,每次给定两个不同的整数 u , v u,v u,v,求所有从节点 u u u 开始到节点 v v v 结束的途径中,途径权值的最小值。
保证:
2
≤
n
≤
1
0
5
;
n
−
1
≤
m
≤
min
(
n
×
(
n
−
1
)
2
,
1
0
5
)
2\leq n\leq10^5;n-1\leq m\leq\min(\frac{n\times(n-1)}{2},10^5)
2≤n≤105;n−1≤m≤min(2n×(n−1),105) 且给定的是简单连通图。
边权
w
w
w 满足
0
≤
w
<
2
30
;
0\leq w<2^{30};
0≤w<230;
1
≤
q
≤
1
0
5
;
1\leq q\leq 10^5;
1≤q≤105;
-
思路:首先,路径是非递增的。然后发现,1 和 2 不可能同时出现在一条路径里,因此答案之有0,1,2这三种情况。
-
如果存在路径使得mex为0,则必然存在某一位使得经过的边权在这一位上恒为1。因此对于每一位,如果在这一位上为1,则视为连通,建立出32个并查集。如果存在某一位使得两点连通,则mex最小为0。
-
否则,考虑如何构造mex=1。题解给出,先经过若干奇数权边(可以不经过),到达一条偶数边,然后就可以随便走了,这样就可以保证不会出现1。最后的思路就是,如果在后31个的某个并查集当中,有特殊点(特殊点就是偶数边的两个点),那么就能实现上述构造。
-
AC代码:https://codeforces.com/contest/1659/submission/159596678