uva 10125 - Sumsets

简介:

  

    本来这几天不打算写题了,但是发现太无聊。

 

    这题一开始直接dfs,果断超时,加个搜到就跳出,直接WA了,因为例如1 4 5 6 7这样数列,7 6 1<4 5 6所以直接dfs循环是不行的 

 

    然后就a+b=d-c n^2的复杂度,不想用hash,于是就二分,结果忘记排序,WA了好多次……

 

/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <queue>
#define INF 100000000000ll
using namespace std;
long long org[1005];
long long add[1000010];
int ke[1000010][2];
bool bsearch(int i,int j,int l,int r)
{
    int mid;
    long long aim=org[i]-org[j];
    while(l<r)
    {
        mid=(l+r)>>1;
        if(add[mid]<aim)l=mid+1;
        else if(add[mid]==aim)
        {
            while(add[mid]==aim&&mid>=0)mid--;//找到最左边的相等下标
            mid++;
            while(add[mid]==aim&&(ke[mid][0]==i||ke[mid][0]==j||ke[mid][1]==i||ke[mid][1]==j)) mid++;
            if(add[mid]==aim) return 1;
            else return 0;
        }
        else r=mid;
    }
    return 0;
}
int main()
{
    int n,i,j,now;
    while(~scanf("%d",&n)&&n)
    {
        for(i=0;i<n;i++)
         scanf("%lld",&org[i]);
        now=0;
        sort(org,org+n);
        for(i=0;i<n;++i)
          for(j=i+1;j<n;++j)
          {
              if(org[i]==org[j])continue;
              ke[now][0]=i;ke[now][1]=j;
              add[now++]=org[i]+org[j];
          }
        sort(add,add+now);
        bool flag=1;
        for(i=n-1;i>=0&&flag;i--)
         for(j=0;j<n&&flag;j++)
         {
            if(org[i]==org[j])continue;
            if(bsearch(i,j,0,now))flag=0;
         }
        if(flag)printf("no solution\n");
        else printf("%lld\n",org[i+1]);
    }
}


 

目录
相关文章
Uva10001 Garden of Eden
Uva10001 Garden of Eden
49 0
uva 10340 all in all
输入两个字符串s和t,判断是否可以从t中删除0个或多个字符(其他字符顺序不变),得到字符串是。
45 0
UVa10123 No Tipping
UVa10123 No Tipping
65 0
uva375 Inscribed Circles and Isosceles Triangles
uva375 Inscribed Circles and Isosceles Triangles
45 0
|
算法
UVA题目分类
题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics 10300 - Ecological Premium 458 - The Decoder 494...
1574 0
|
存储 固态存储
|
机器学习/深度学习
uva 11538 Chess Queen
点击打开链接 题意:给定一个n*m的矩阵,问有多少种方法放置两个相互攻击的皇后?规定在同一行同一列和同对角线的能够相互攻击 思路: 1 先考虑同一行的情况,n行就有n种情况,每一行有m*(m-1)种,总的是n*m*(m-1); 2 考虑同...
826 0
uva 11806 - Cheerleaders
点击打开链接 题意:在一个n行m列的矩形里面放k个相同的石子,要求第一行,最后一行,第一列,最后一列都要有石子。问有几种方法? 思路: 1 如果题目没有要求“第一行,最后一行,第一列,最后一列都要有石子”,那么答案就是C[n*m][k],我们用C[i][j]表示i个里面选择j个的组合数。
827 0

热门文章

最新文章