Codeforces Round #764 (Div. 3)

比赛链接

AC代码

A. Plus One on the Subset

\(\max\{a\} - min \{a\}\)即为答案。

B. Make AP

假设对\(a\)进行唯一的操作,那么\(b, c\)的值是确定的,修改后\(a\)的值也可以通过等差数列的性质计算出来,即为\(a^\prime\),然后就看\(a\)是否能被\(a^\prime\)整除。

注意\(m\)是正整数,所以还要加一个判断。

\(b, c\)同理,任意一个可行即可。

C. Paint the Array

不妨先将所有数都通过给定操作搞到\(n\)以内。

现在从大到小枚举,假设枚举到\(i\),由于最终要的是一个排列,所以如果\(a\)中有多个\(i\),保留一个即可,其余的都再操作一次;如果没有\(i\),由于之前的操作,此时\(a\)中也没有别的数能够通过操作转换成\(i\),无解。

D. Palindromes Coloring

对于一个回文串,两边的字符都出现了两次,如果回文串长度为奇数,那么中间有一个单独的字符。

统计\(s\)中成对出现的字符的对数\(e\),和剩余字符的个数\(o\)

先只考虑两边的字符,中间的字符可以后面再加,易得此时最短的回文串长度为\(2\lfloor \dfrac{e}{k} \rfloor\)

然后由于要的答案是最小长度,所以没用上的字符对也没必要用,此时,还有\(2(e \mod k) + o\)个字符没用,这些字符可以作为中间那个单独的字符。

如果\(2(e \mod k) + o \ge k\),那么就可以给每一个回文穿加上中心。

E. Masha-forgetful

一开始想到后缀数组拼起来然后乱搞(现在想想好像也不可行),写了一半发现了个性质。。。

长度大于等于2的串一定可以由零或多个长度为2和零或多个长度为3的串拼起来。

然后就是简单DP了。

F. Interacdive Problem

二分。

假设现在要猜的区间是\([l, r]\),令\(mid = \lfloor \dfrac{l + r}{2} \rfloor\)

\(N\)为大于\(r\)且最小的\(n\)的倍数,\(c\)\(N - (mid + 1)\),如果操作之前\(x \in [l, mid]\),返回的值不会变;如果操作之前\(x \in [mid + 1, r]\),返回的值会比之前大1。

所以操作之后\(x\)的范围就会是\([l + c, mid + c]\)\([mid + 1 + c, r + c]\)其中之一具体是哪一个看返回值是否改变,每次询问可以使\(x\)的可能取值个数减半。

G. MinOr Tree

最小或生成树。。。

贪心加并查集。。。

首先把权值看成二进制数,然后先将答案置为全1,然后从高到低枚举每一个位,看这个位能不能为0,能为0就把答案的这个位置零。

如何判断一个位是否能为0呢?枚举所有边,看能不能用满足条件的边联通所有点:边的权值的对应位不为1且加入这条边不会使答案变大(即权值或上此时的答案还是答案)。如果可以就说明答案的对应位可以为0。

原文地址:https://www.cnblogs.com/zengzk/p/15790834.html