zoukankan      html  css  js  c++  java
  • 51nod——T1267 4个数和为0

    题目描述
    给出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

     1 #include <algorithm>
     2 #include <iostream>
     3 
     4 using namespace std;
     5 
     6 int n,a[1050],cnt;
     7 int if_ok;
     8 
     9 struct node_num
    10 {
    11     int l,r,tot;
    12 }num[1000*1000+5];
    13 
    14 bool cmp(node_num a,node_num b)
    15 {
    16     return a.tot<b.tot;
    17 }
    18 
    19 int main()
    20 {
    21     cin>>n;
    22     for(int i=1;i<=n;i++)
    23         cin>>a[i]; sort(a+1,a+n+1);
    24     for(int i=1;i<=n;i++)
    25         for(int j=i+1;j<=n;j++)
    26         {
    27             num[++cnt].l=a[i];
    28             num[cnt].r=a[j];
    29             num[cnt].tot=a[i]+a[j];
    30         }    
    31     sort(num+1,num+cnt+1,cmp);
    32     int l=1,r=cnt;
    33     while(l<r)
    34     {
    35         int sum=num[l].tot+num[r].tot;
    36         if(sum==0&&num[l].l!=num[r].l&&num[l].l!=num[r].r&&num[l].r!=num[r].l&&num[l].r!=num[r].r)
    37         { if_ok=1; break; }
    38         if(sum<0) l++;
    39         else r--;
    40 /*        int midd=(l+r)/2;
    41         if(num[l].tot+num[midd].tot<0) l=midd+1;
    42         if(num[r].tot+num[midd].tot>0) r=midd-1;
    43 */    }
    44     if(if_ok) cout<<"Yes";
    45     else cout<<"No";
    46     return 0;
    47 }
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    Android随笔
    Android随笔
    阅读笔记
    Android随笔
    Android随笔
    Android随笔
    Android随笔
    Java随笔
    Android随笔
    NC20265 着色方案(dp)
  • 原文地址:https://www.cnblogs.com/Shy-key/p/6695450.html
Copyright © 2011-2022 走看看