四数之和

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

有n个不同的整数,判断能否从中选4次,4个数和刚好为m。数字可重复选取

Input:

输入包含多组测试,每组测试第一行是两个数n(1<=n<=)和m(0<=m<=10^9)。
第二行是n个数a1,a2,a3...an(0<=ai<=10^8);

Output:

对于每组测试,如果能从中找出4个数和为m,则输出YES,否则输出NO。

Sample Input:

5 10
1 2 3 4 5
3 10
1 3 5
3 9
1 3 5

Sample Output:

YES
YES
NO
解题思路:因为四数和中选取的每个数字可以重复,因此我们可以先将每每两个数的和存放到set容器中(注意元素具有唯一性即不重复性),然后使用find()来查找set中是否有m-*it这个元素即可,思路清晰,代码可以过,不超时!忽略系数,此解法时间复杂度是O(n^2)。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
int a[],n,m;
set<int> t;
bool findt(int obj){ //find()返回迭代器在容器中的位置
return t.find(obj)==t.end();
}
int main()
{
while(cin>>n>>m){
t.clear();
for(int i=;i<n;++i)
cin>>a[i];
for(int i=;i<n;++i)
for(int j=;j<n;++j)
t.insert(a[i]+a[j]); //每每两个数相加
bool flag=false; //标记set中是否有这个元素
for(set<int>::iterator it=t.begin();it!=t.end();++it)
if(!findt(m-*it)){flag=true;break;}
if(flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return ;
}

最新文章

  1. history.back新页面跳转
  2. equals标准写法
  3. scrapy爬虫框架入门实例(一)
  4. PL/SQL显示行号和高亮当前行
  5. java之多线程的理解
  6. Android取得屏幕的高度和宽度
  7. 采用UltraISO制作U菜Win7安装盘,显现&amp;quot;File not find /BOOT/CDMENU.EZB.ezb&amp;quot;错误
  8. PHP环境搭建——Apache
  9. (十七)TableView的本地性能优化
  10. python崩溃到现在居然还没有放弃的Day07
  11. trackerClient.getConnection()为null
  12. C++ 面向对象的三大特性和五个原则
  13. 两行 CSS 代码实现图片任意颜色赋色技术
  14. [再寄小读者之数学篇](2014-06-22 发散级数 [中国科学技术大学2012年高等数学B考研试题])
  15. 浏览器行为模拟之requests、selenium模块
  16. C++ dynamic reflection
  17. UML图基础知识
  18. PHP中require(),include(),require_once()和include_once()有什么区别
  19. jQuery1.9+ 废弃的函数和方法 升级Jquery版本遇到的问题
  20. mxnet卷积神经网络训练MNIST数据集测试

热门文章

  1. ajax异步获取数据后动态向表格中添加数据(行)
  2. hdu -1251 统计难题(字典树水题)
  3. Elasticsearch自定义客户端(TransportClient)资源池
  4. html5视频播放器 二 (功能实现及播放优化)
  5. NOIP 2010 机器翻译
  6. 洛谷 P4057 [Code+#1]晨跑
  7. 条款三:尽量用new和delete而不用malloc和free
  8. ym——Android怎样支持多种屏幕
  9. 【CERC2008】【BZOJ4319】Suffix reconstruction
  10. 抢占式内核与非抢占式内核中的自旋锁(spinlock)的差别