51nod——T1267 4个数和为0
2024-09-30 08:20:40
题目描述
给出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 <algorithm>
#include <iostream> using namespace std; int n,a[],cnt;
int if_ok; struct node_num
{
int l,r,tot;
}num[*+]; bool cmp(node_num a,node_num b)
{
return a.tot<b.tot;
} int main()
{
cin>>n;
for(int i=;i<=n;i++)
cin>>a[i]; sort(a+,a+n+);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
{
num[++cnt].l=a[i];
num[cnt].r=a[j];
num[cnt].tot=a[i]+a[j];
}
sort(num+,num+cnt+,cmp);
int l=,r=cnt;
while(l<r)
{
int sum=num[l].tot+num[r].tot;
if(sum==&&num[l].l!=num[r].l&&num[l].l!=num[r].r&&num[l].r!=num[r].l&&num[l].r!=num[r].r)
{ if_ok=; break; }
if(sum<) l++;
else r--;
/* int midd=(l+r)/2;
if(num[l].tot+num[midd].tot<0) l=midd+1;
if(num[r].tot+num[midd].tot>0) r=midd-1;
*/ }
if(if_ok) cout<<"Yes";
else cout<<"No";
return ;
}
最新文章
- TCP、UDP、IP 协议分析
- 并查集(删除) UVA 11987 Almost Union-Find
- 学习笔记(一)——MVC扩展
- ps白平衡
- svn 问题汇总
- c语言中-----分配内存函数
- [CLR via C#]1.2 将托管模块合并成程序集
- 【POJ2186】受牛仰慕的牛
- ASP.NET MVC 5 基本构成
- Android -- 从源码的角度一步步打造自己的TextView
- (二)SVN的安装
- LLDB 中从地址设置为变量
- vs2017cpu占用过高解决方案
- java Thread 类的源码阅读(oracle jdk1.8)
- 如何让 curl 命令通过代理访问
- 2018.10.25 bzoj3928: [Cerc2014] Outer space invaders(区间dp)
- Entity Framework 6 (7) vs NHibernate 4: DDD perspective(纯净DDD很难很难...)
- IOS应用提交所需的ICON
- where常用运算符
- ActionBar 笔记