题目
给定n(n<=20),再输入2^n个数,分别代表a[0]到a[2^n-1],第i个数ai(0<=ai<=1e7)
问是否存在一对下标i、j满足a[i]+a[j]<a[i&j]+a[i|j]
如果不存在,输出-1,否则输出任意一对(i,j)即可
思路来源
官方题解
题解

题解说的挺清楚的,
先用集合转换成这个式子

然后z是一个集合,是多出的若干位,如果有解,说明最后这个式子成立,
考虑令左式为f(v1),右式为f(v3),有f(v1)<f(v3)成立,
其中v3比v1多了一个集合z,就是多了若干位的时候,有f(v1)<f(v3)

那么,考虑这个渐变的过程,
取z集合的一个真子集,加到v1里变成v2,
可以发现,不管f(v2)多大,要么f(v1)<f(v2),要么f(v2)<f(v3)成立,
重复这个过程,使得一定存在f(v1)<f(v3)且v1和v3只差一个相邻的1
式子中y和z是对称的,z只差1位,y也可以只差1位
所以,枚举公共集合x,枚

文章描述了一个编程问题,给定一个长度为2^n的数组,目标是判断是否存在两个下标i和j,使得a[i]+a[j]<a[i^j]+a[i|j]。通过集合转化和分析函数关系,提出了一种递归查找的方法,最终给出C++代码实现。
最低0.47元/天 解锁文章
1055

被折叠的 条评论
为什么被折叠?



