51nod 1267 4个数和为0(二分)
来源:互联网 发布:中建上海设计院 知乎 编辑:程序博客网 时间:2024/05/16 05:38
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1267
先存好任意两个数之和,然后排序,而二分查找每个和的相反数是否存在即可。
#include<iostream>#include<algorithm>using namespace std;#define maxn 1005int s[maxn],k;struct node{ int sum,num1,num2;}a[maxn*maxn]; //保存任意两个数之和以及它们的编号 int cmp(node x,node y) //按照和从小到大的顺序排序 { return x.sum<y.sum;}int check(int x,int y) //检查是不是四个互不相同的数 { return a[x].num1!=a[y].num1&&a[x].num1!=a[y].num2&&a[x].num2!=a[y].num1&&a[x].num2!=a[y].num2;}int find(int x) //二分查找 x 的相反数 { int l=0,r=k-1; while(l<=r) { int mid=(l+r)/2; if(a[x].sum+a[mid].sum==0) { if(check(x,mid)) return 1; else l=mid+1; } else if(a[x].sum+a[mid].sum>0) r=mid-1; else l=mid+1; } return 0;}int main(){ int n; while(cin>>n) { for(int i=0;i<n;i++) cin>>s[i]; int ans=0; k=0; for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) { a[k].sum=s[i]+s[j]; a[k].num1=i; a[k].num2=j; k++; } sort(a,a+k,cmp); for(int i=0;i<k;i++) if(find(i)) ans++; if(ans) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0;}
阅读全文
0 0
- 51nod 1267 4个数和为0(二分)
- 51Nod 1267 4个数和为0(二分)
- 51nod 1090 3个数和为0 & 51nod 1267 4个数和为0(标记二分)
- 51NOD 1267 4个数和为0(二分 + 排序)
- 51nod 1267 4个数和为0 哈希+二分
- 51Nod 1267 4个数和为0 ( 二分
- 51nod 1267 4个数和为0 二分查找
- 51Nod 1090 3个数的和为0 && 1267 4个数的和为0 (排序+二分)
- 51nod 1267 4个数和为0(二分查找)好题!!!
- 51nod 1267 4个数和为0(二分【形式二】)
- 51nod 1267 4个数和为0(STL,二分)
- 51nod 1090 3个数和为0(二分)
- 51nod 1090 3个数和为0(二分)
- 51NOD 1090 三个数和为0 1267 4个数和为0 二分答案
- 51nod 1267 4个数和为0(暴力)
- 51nod 1090 3个数和为0 (二分_stl)
- 51Nod 1090 3个数和为0 (二分
- 51nod 1090 3个数和为0 二分暴力。
- 多边形游戏(博弈)
- HDUOJ 1863 畅通工程(kruskal)
- 银行转账业务-使用事务
- C语言中的atan 与atan2
- 小型游戏《笑傲江湖之精忠报国》全过程_03
- 51nod 1267 4个数和为0(二分)
- linux下如何安装jdk
- DeepLearning&Keras学习笔记3__mnist数据集CNN
- 一款有趣的游戏
- 53. Maximum Subarray
- JavaScript权威指南读书笔记——第七章 数组
- Use VS2017 C# 7.0 to accelerate async code
- 关于HTML form accept-charset 属性的若干尝试
- 处理阶乘及阶乘逆元的小技巧