Codeforces Round #764 (Div. 3)

比赛链接

AC代码

A. Plus One on the Subset

max{a}min{a}即为答案。

B. Make AP

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

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

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

C. Paint the Array

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

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

D. Palindromes Coloring

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

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

先只考虑两边的字符,中间的字符可以后面再加,易得此时最短的回文串长度为2ek

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

如果2(emodk)+ok,那么就可以给每一个回文穿加上中心。

E. Masha-forgetful

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

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

然后就是简单DP了。

F. Interacdive Problem

二分。

假设现在要猜的区间是[l,r],令mid=l+r2

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

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

G. MinOr Tree

最小或生成树。。。

贪心加并查集。。。

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

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

posted @   _Backl1ght  阅读(75)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示