51NOD 1267 4个数和为0(二分 + 排序)
2016-07-07 20:27
260 查看
传送门
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出”Yes”,否则输出”No”。
Input
第1行,1个数N,N为数组的长度(4 <= N <= 1000)
第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
Output
如果可以选出4个数,使得他们的和为0,则输出”Yes”,否则输出”No”。
Input示例
5
-1
1
-5
2
4
Output示例
Yes
解题思路:
就是一个二分的思想,首先我们将这个序列排好序,然后写两重循环,剩下的两个指针 l 和 r ,二分查找就行了。具体看代码吧。。。
My Code:
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出”Yes”,否则输出”No”。
Input
第1行,1个数N,N为数组的长度(4 <= N <= 1000)
第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
Output
如果可以选出4个数,使得他们的和为0,则输出”Yes”,否则输出”No”。
Input示例
5
-1
1
-5
2
4
Output示例
Yes
解题思路:
就是一个二分的思想,首先我们将这个序列排好序,然后写两重循环,剩下的两个指针 l 和 r ,二分查找就行了。具体看代码吧。。。
My Code:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; const int MAXN = 1e3+5; LL a[MAXN], b[MAXN], c[MAXN]; int main() { int n; while(~scanf("%d",&n)) { for(int i=0; i<n; i++) scanf("%I64d",&a[i]); sort(a, a+n); int ok = 0; for(int i=0; i<n; i++) { for(int j=i+1; j<n; j++) { LL tmp = -a[i]-a[j]; int l = j+1, r = n-1; while(l < r) { if(a[l]+a[r]==tmp) { puts("Yes"); goto endW; } else if(a[l]+a[r] < tmp) l++; else r--; } } } puts("No"); endW:; } return 0; }
相关文章推荐
- 利用http缓存数据
- 17.4节练习
- java基础学习总结——面向对象2
- 17.3节练习
- 01 LabVIEW的类中各个Scope的范围
- 【水】基于ege的2048
- poj 1664:放苹果
- 修复efi引导的win7
- 卷二 MFC中简单控件使用
- Swift POP+MVVM
- 【Netty4.X】TCP粘包/拆包问题的解决办法(二)
- 修改tableview索引条背景颜色变透明或其他颜色的方法
- 6P的宽度375VS414
- 16.7.7 T1:YL杯超级篮球赛
- 用Python递归实现汉诺塔问题
- 大话设计模式c++实现--原型模式
- Jquery事件委托之Safari
- 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
- 信息检索导论——四、索引构建
- 公交车人数统计系统设计