【Codeforces Round #554】(Div.2)

My Codeforces ID : WuZei

Neko Finds Grapes

题意:给出a,b两个数列,a,b数列各选出一个数字,若这两个数字一奇一偶,则互相抵消,答案+1,求最大的答案。

题解:分别统计两个数列奇数和偶数的个数即可。

Neko Performs Cat Furrier Transform

题意:给出一个数字x,可以对这个数字进行两种操作。

操作一: $ x = x xor (2^n-1),\ (n\ge 0)$

操作二:$ x = x +\ 1$

第一次操作必须为操作一,两种操作必须交替进行。

操作一中的n自选,求一种不多于40次的方案,使得x可以表示为$ x = 2^m-1,\ (m\ge 0)$

题解:每次异或操作都把位数拉满,比如5xor7,因为$5 = (101)_2\ 7=(111)_2$,这样操作可以保证每一次都能在二进制上减少一位,最后至少会变成1,当然每次操作玩都得判断一下,我的1WA就是因为4异或后马上+1,结果死循环...

Neko does Maths

题意:给出两个数字a,b,求使得$lcm(a+k,\ b+k)$最小的k,当k多解时,输出最小的k。

题解:a==b时,k=0。否则,令c为两个数字的差值。最后a,b一定是都变成某个数字的倍数,即(a+k)%x==(a+k)%x==c。

那么问题来了,怎么确定这个x,我猜出的结论是:当c<a时,x=c,否则x为c的所有约数中,最小但是大于a的那个。

Neko and Aki's Prank

题意:给出一个构造长度为n的括号数列的字典树(看题面的Note很直观),选择树上最多的边,使得边之间不共点。

题解:其实可以按照题意建树,每个树节点都表示一个已经用了i个'('和j个‘)’的序列,然后做树形DP。最后可以发现其实很多节点本质上是一样的,直接记忆化地转移就完事了。

Neko and Flashback

题意:有一个数列ai,从数列ai中可提取数列$b_i = min(a_i,a_{i+1}) $和数列$c_i = max(a_i,a_{i+1}) $,可以按照相同的方法打乱bi和ci两个数列,得到bi‘和ci'。

现在给出bi'和ci',要求你选择任意一种还原方法,还原出最初的ai,输出任意一种合法的ai解即可。

题解:不难发现,相邻的两个数字ai,ai+1,都对应着一对bi和ci,折就意味着,每一堆bi和ci,都表示两个相邻的数字,按照这个方法建图,跑个欧拉路即可。

这题有几个要注意的点,首先bi<=ci,题面并不保证bi'和ci'两个数组合法。其次最后连出来的图不一定联通,要判定连通性。之后就是标准的判断是否有欧拉路和求欧拉路了,目测正反两种欧拉路都是符合题意的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值