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]);
    }
}


 

目录
相关文章
uva10112 Myacm Triangles
uva10112 Myacm Triangles
36 0
uva10152 ShellSort
uva10152 ShellSort
54 0
UVa 10082 WERTYU
Problem Description A common typing error is to place the hands on the keyboard one row to the right of the correct position.
882 0
概率dp - UVA 11021 Tribles
Tribles  Problem's Link:  http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33059   Mean:  有k个细菌,每个细菌只能存活一天,在死去之前可能会分裂出0,1,2....n-1个细菌,对应的概率为p0,p1,p2....pn-1。
819 0
|
机器学习/深度学习 人工智能
uva 10870 Recurrences
点击打开uva 10870 思路:构造矩阵+矩阵快速幂 分析: 1 题目给定f(n)的表达式 f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n -3) + .
730 0
uva 10273 Eat or Not to Eat?
点击打开链接uva 10273 思路: 暴力求解 分析: 1 题目要求没有吃掉的奶牛的个数已经最后一次吃掉奶牛的天数 2 没有其它的方法只能暴力,对于n头牛的n个周期求最小公倍数,然后在2个公倍数之内暴力求解 代码: #inclu...
808 0
uva 10054 - The Necklace
点击打开链接uva 10054 思路: 欧拉回路 分析: 1 对于一个无向图来说如果这个图是一个欧拉图,那么必须满足该图是连通的并且每个点的度数都是偶数 2 题目给定n条边的无向图问我们是否是一个欧拉图,是的话输出欧拉图的一条路径 3 ...
833 0
uva 1388 - Graveyard
点击打开链接uva1388 思路:数学 分析: 1 我们把原先的n个墓碑看成是园内的正n变形,现在的n+m个墓碑看成是园内的正n+m变形。那么通过画图我们可以知道当这个两个正多边形有一个点重合的时候移动的总距离最小 2 那么我们把这个圆进...
1007 0
|
机器学习/深度学习 并行计算 AI芯片
刘汝佳uva 字符串专题
第一题   palindrome 点击打开链接uva 401 题目意思:给定一个字符串判断是什么类型 分析: 1 根据输出我们知道这个字符串总共有4种类型 2 首先应该是否是“palindrome ”,判断的理由很简单直接对这个...
1119 0