zoukankan      html  css  js  c++  java
  • Sumsets

    题目连接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=91209#problem/A

    题意:给定一个整数几何S,找出一个最大的d,使得a+b+c=d,其中a,b,c,d是S中不同的元素。

    分析:

      穷举a,b,c,再二分查d,效率很低,水过。
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int a[1010],i,j,k,ans,f,n;
    int comp(int x,int y)
    {return x>y;};
    int finde(int key,int l,int r)
    {int mid=(r+l)/2;
     if (l>r) return 0;
     if (key==a[mid])
     {if ((mid!=i)&&(mid!=j)&&(mid!=k)) f=1;
      return 0;
     }
     else
     if (key<a[mid])  finde(key,mid+1,r);
                else  finde(key,l,mid-1);
                return 0;
    }
    int main()
    {while (scanf("%d",&n)&&n)
     {
      for (i=0;i<n;i++)
      scanf("%d",&a[i]);
      sort(a,a+n,comp);
      f=0;
      for (i=0;i<n;i++)
      for (j=0;j<n-1;j++)
      for (k=j+1;k<n;k++)
      {ans=a[i];
       if ((i!=j)&&(i!=k))
       finde(a[i]-a[j]-a[k],0,n-1);
       if (f) goto there;
      }
      there:;
      if (f) printf("%d
    ",ans);  //cin 就超时了
         else printf("no solution
    ");
     }
     return 0;
    }
    
    
    
    
    
  • 相关阅读:
    loj10008家庭作业
    loj10006数列分段
    loj10005数列极差
    loj10004智力大冲浪
    codevs 1996 矿场搭建
    11.3 上午考试
    11.2 晚上考试
    11.2 下午考试
    11.2 上午考试
    11.1 下午考试
  • 原文地址:https://www.cnblogs.com/fenhong/p/4931464.html
Copyright © 2011-2022 走看看