POJ2459 Sumsets

原题链结


第一次写博客..

这道题也是我A掉的第一道折半枚举的题

之前也在网上搜了下这道题的题解 发现没有人用我这种方法..

其实思路还是一样的, 只不过不同点体现在对lower_bound的利用上

直接上代码  看注释

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
typedef long long ll;
using namespace std;

int n;
int a[1005];

struct node{
int i,j;
int val;
}b[1005*1005];

bool cmp(node a,node b)
{
    return a.val=b的结构体元素
}

bool comp2(node a,int b)
{
    return a.val<=b; // 找到第一个val>b的结构体元素
}

int main()
{
    while(scanf("%d",&n)==1&&n)
    {
        int i,j,k,m,t;
        for(i=0;i=0;i--) //之前已经从小到大对sort了 所以直接从最大的开始
        {
            int d=a[i];  //我们要找的d
            for(j=0;ji]!=a[j]&&a[p1->i]!=a[i]&&a[p1->j]!=a[j]&&a[p1->j]!=a[i])
                            {
                                flag=true;  //符合题意 直接跳出
                                break;
                            }
                            p1++;
                        }
                    }
                }
                if(flag)  //符合题意 直接跳出
                    break;

            }
            if(flag)break;  //符合题意 直接跳出

        }
        if(flag)printf("%d\n",a[i]); //符合题意 直接输出d 也就是a[i]
        else printf("no solution\n");

    }
    return 0;
}




你可能感兴趣的:(折半枚举)