题意:
小X有n个互不相同的整数: p1,p2,...,pn 。他想把这些整数分到两个集合A和B里边。但是要符合下面两个条件。
· 如果x属于A,那么a-x也肯定属于A。
· 如果x属于B,那么b-x也肯定属于B。
判断一下是否存在一种方案来分配这些数字到集合A,B中。
注意:如果一个集合为空也是可以的。
思路:
先排序然后一个一个分析过去,用二分法查找对应的数。
一开始的时候考虑的不够仔细,就是说如果a-x和b-x都存在的话,就必须得进一步的分析,因为x只能和其中一个数在一个集合中。所以在这种情况下还需要判断一下b-(a-x)和a-(b-x)的情况,只要其中一个能找到那就可以。
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 const int maxn=1e5+5;10 11 int n,a,b;12 int c[maxn];13 14 bool solve(int num)15 {16 int L=1,R=n;17 while(L<=R)18 {19 int mid=(L+R)/2;20 if(c[mid]>num) R=mid-1;21 else if(c[mid]