| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
老是WA,可是自己想的数据都过掉了 谁来帮着看一下啊,感激不尽先是计算a+b 然后枚举d,c 在a+b中查找d-c
#include<stdio.h>
#include <algorithm>
using namespace std;
struct result
{
long s;
long x;
};
result sum[1000000];
long set[10000];
bool cmp(const result&p, const result&q)
{
if (p.s==q.s) return p.x<q.x;
return p.s<q.s;
}
bool tofind(long key,long x,long sumn)
{
long M,L=0,R=sumn-1,ML,MR;
while (L<=R)
{
M=(L+R)/2;
if (sum[M].s==key)
{
if ((sum[M].x!=x) && ((sum[M].s-sum[M].x)!=x))
return true;
else
{
ML=M-1;
MR=M+1;
while(ML>=0)
{
if (sum[ML].s!=key) break;
if ((sum[ML].x!=x) && ((sum[ML].s-sum[ML].x)!=x)) return true;
ML--;
}
while(MR<sumn)
{
if (sum[MR].s!=key) break;
if ((sum[MR].x!=x) && ((sum[MR].s-sum[MR].x)!=x)) return true;
MR++;
}
return false;
}
};
if (sum[M].s>key) R=M-1;
else L=M+1;
}
return false;
}
int main()
{
long n,c,sumn;
bool f=false;
while (scanf("%ld",&n)==1 && n)
{
for (long i=0;i!=n;i++)
scanf("%ld",&set[i]); //input
sort(set,set+n);
sumn=n*(n-1)/2;
c=0;
for (long i=0;i!=n-1;i++)
for (long j=i+1;j!=n;j++)
{
sum[c].s=set[i]+set[j]; //plus
sum[c].x=set[i];
c++;
};
sort(sum,sum+sumn,cmp); //sort
f=false;
for (long i=n-1;i>=0;i--)
{
for (long j=0;j!=n;j++)
{
if (i==j) continue;
if (tofind(set[i]-set[j],set[j],sumn)) { f=true;printf("%ld\n",set[i]);break;}
}
if (f) break;
}
if (!f) printf("no solution\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator