您的位置:首页 > 其它

POJ 2549

2014-04-02 21:57 99 查看
Sumsets

Time Limit: 1000MSMemory Limit: 65536K
Total Submissions: 8235Accepted: 2260
Description

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

struct node { int v,a,b; };
const int MAX = 1005;
int N,len = 0;
int ele[MAX];
node y[MAX * MAX];

bool cmp(node a,node b) { return a.v < b.v; }

bool solve() {
for(int i = N - 1; i >= 0; --i) {
for(int j = N - 1; j >= 0; --j) {
if(i == j) continue;
int d = ele[i] - ele[j];
// printf("ele = %d d = %d\n",ele[i],d);
int l = 0,r = len - 1;
while(l < r) {
int mid = (l + r + 1) >> 1;
if(y[mid].v > d) r = mid - 1;
else l = mid;
}
if(y[l].v == d) {
for(int k = l; k < len; ++k) {
if(y[k].v == d && y[k].a != ele[j] && y[k].b != ele[j]
&& y[k].a != ele[i] && y[k].b != ele[i]) {
printf("%d\n",ele[i]);
return true;
}
}
for(int k = l; k >= 0; --k) {
if(y[k].v == d && y[k].a != ele[j] && y[k].b != ele[j]
&& y[k].a != ele[i] && y[k].b != ele[i]) {
printf("%d\n",ele[i]);
return true;
}

}

}

}
}

return false;

}

int main()
{
// freopen("sw.in","r",stdin);

while(~scanf("%d",&N) && N ) {
for(int i = 0; i < N; ++i) scanf("%d",&ele[i]);

sort(ele,ele + N);
N = unique(ele,ele + N) - ele;

len = 0;
for(int i = 0; i < N; ++i) {
for(int j = i + 1; j < N; ++j) {
y[len].v = ele[i] + ele[j];
y[len].a = ele[i];
y[len++].b = ele[j];
}
}

sort(y,y + len,cmp);

if(!solve()) printf("no solution\n");
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: