51nod 1267 4个数和为0(双指针好题)
来源:互联网 发布:中世纪2优化9成神话了 编辑:程序博客网 时间:2024/06/06 21:43
1267 4个数和为0
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注
给出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
#include <bits/stdc++.h>using namespace std;int a[1234];struct node{ int x,y; int sum; bool operator < (const node& a) const{ return sum<a.sum; }}b[1234*1234];int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } int k=0; for(int i=0;i<n;i++){ for(int j=0;j<i;j++){ b[k].x=i; b[k].y=j; b[k++].sum=a[i]+a[j]; } } sort(b,b+k); int l=0,r=k-1; bool ok=false; while(l<=r){ if(b[l].sum+b[r].sum==0){ if(b[l].x!=b[r].x&&b[l].x!=b[r].y&&b[l].y!=b[r].x&&b[l].y!=b[r].y){ ok=true; break; } else if(b[l].sum==b[l+1].sum){ l++; } else if(b[r].sum==b[r-1].sum){ r--; } else { l++; r--; } } else if(b[l].sum+b[r].sum<0){ l++; } else if(b[l].sum+b[r].sum>0) { r--; } } if(ok){ puts("Yes"); } else { puts("No"); } return 0;}
阅读全文
0 0
- 51nod 1267 4个数和为0(双指针好题)
- 51nod 1267 4个数和为0(二分查找)好题!!!
- 51nod 1267:4个数和为0 哈希
- 51 nod 1267 4个数的和为0
- 51nod 1267 4个数和为0
- 51NOD 1267 4个数和为0(二分 + 排序)
- 51nod 1267 4个数和为0 哈希+二分
- 51Nod-1267-4个数和为0
- 51nod 1267 4个数和为0
- 51nod-【1267 4个数和为0】
- 51nod 1267 4个数和为0
- 51Nod 1267 4个数和为0
- 51nod 1267 4个数和为0
- 51Nod 1267 4个数和为0 ( 二分
- 51nod 1267 4个数和为0
- 51 nod 1267 4个数和为0
- 51nod 1267 4个数和为0
- 51nod 1267 4个数和为0
- 判断一个指定的Service是否存在的方法
- setTimeout()和setInterval()区别
- Android Studio对话框多种形式总结
- POJ
- 还是畅通工程 【hdu-1233】 【最小生成树】
- 51nod 1267 4个数和为0(双指针好题)
- iic协议扩展板和pmw引脚控制舵机转向与超声测距的实验,可实现简易超声雷达
- B
- unity渲染层级关系小结
- 可手工拖拽alv行记录的实例
- RabbitMQ的应用场景以及基本原理介绍
- RecycleView的优雅使用
- hdu 6075-Questionnaire
- ASCII码对应表