http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1557

题意:

小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)的情况,只要其中一个能找到那就可以。

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std; const int maxn=1e5+; int n,a,b;
int c[maxn]; bool solve(int num)
{
int L=,R=n;
while(L<=R)
{
int mid=(L+R)/;
if(c[mid]>num) R=mid-;
else if(c[mid]<num) L=mid+;
else return true;
}
return false;
} int main()
{
//freopen("D:\\input.txt","r",stdin);
while(~scanf("%d%d%d",&n,&a,&b))
{
for(int i=;i<=n;i++)
scanf("%d",&c[i]);
sort(c+,c+n+);
for(int i=;i<=n;i++)
{
bool A=solve(a-c[i]);
bool B=solve(b-c[i]);
if(!A && !B)
{
printf("NO\n");
return ;
}
if(A && B)
{
bool C=solve(b-(a-c[i]));
bool D=solve(a-(b-c[i]));
if(!C && !D)
{
printf("NO\n");
return ;
}
}
}
printf("YES\n");
}
}

最新文章

  1. Linux-awk直接修改原文件
  2. [Node.js] Broswerify -- 2
  3. .NET性能优化方面的总结
  4. Python 手册——调用解释器
  5. $(function(){})与(function($){....})(jQuery)的区别
  6. 怎样在android实现uc和墨迹天气那样的左右拖动效果
  7. ServletContext加入和访问
  8. winfrom如何在listview中添加控件
  9. kubernetes进阶(02)kubernetes的node
  10. 【Linux】Linux系统硬链接和软链接
  11. HDU 1036(平均速度 **)
  12. Kaggle 泰坦尼克
  13. Spring中集合注入方法
  14. 理解 Python 中的元类
  15. 不用外部插件启用u盘ntfs写功能
  16. Linux之sshd服务
  17. 高性能Web服务器Nginx的配置与部署研究(10)核心模块之HTTP模块Location相关指令
  18. iview 怎样屏蔽掉账户框自动显示账户名和密码(root,***)
  19. Matlab结构体定义
  20. Unicode控制字符

热门文章

  1. [UML]UML 教程
  2. ROM和RAM的故事
  3. Oracle归档文件夹权限设置错误导致的数据库问题解决
  4. FZU 2105 Digits Count
  5. opencv学习笔记——Scalar数据结构的理解
  6. 使用Dataset构建数据到lgb中
  7. Oracle HA 之 oracle 11.2 rac库配置active dataguard
  8. Oracle体系结构之Oracle10gR2体系结构-内存、进程
  9. Mongo副本集的配置以及php node.js连接使用副本集
  10. Girls and Boys---hdu1068(最大独立集=顶点数-最大匹配)