Codeforces Round #843 (Div. 2)

Posted on 2023-02-01 15:52  Capterlliar  阅读(18)  评论(0编辑  收藏  举报

感觉难度递减?

B. Gardener and the Array

题意:给出一个序列,问其是否存在两个不同的子序列,其或运算之和相同。

解:题目很友好,直接给出一个数二进制下哪些位为1. 如果一个数为1的位置是另一个数的子序列,那么符合题意;扩展一下,一组数为1的位包含了另一组数,即符合题意。这道题要求判断是否存在,那么再简化一下条件,枚举每个数,判断是否存在一个数,使得其被剩下所有数形成的组包含。一开始感觉存不下,整了个假做法;然后memset又T了一次,麻了。

C. Interesting Sequence

题意:给出n和x,作运算n&(n+1)&(n+2)&...(n+m),求最小的n+m,使得运算结果为x。若不存在,输出-1.

解:在与运算下1肯定越来越少,如果有哪一位x为1而n不为1,那么输出-1;接下来要把n多的1全变成0,脑补一下二进制加法,从低位到高位每一位都跳一遍0和1,也就是高位有0了,低位肯定也有过0,那么就是把最高位的1变成0,记这一位为high,令0-high全为0,high+1为1. 于是x的high及以下为也不能有1,否则输出-1. 那high+1原来就为1怎么办呢,脑子一抽写了个进位,居然过样例了。WA完发现这种情况一进位会出现多余的0,直接输出-1就完了。

D. Friendly Spiders

题意:给出一组数,gcd不为1的两个数之间有边。再给定其中两个数,问最短路并输出。

解:首先排除O(n2)建图,但还是要建图。既然提到gcd了那就考虑一下质因数,把这个点和它的质因子连边,这样边不会很多的样子。然后跑最短路即可。