Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 9892 | Accepted: 2705 |
Description
Input
Output
Sample Input
52375 12165 225664 10240
Sample Output
12no solution
题意:在集合S中有n个数,找到最大的d,且d满足于集合内a+b+c=d。
题解:我们把找a+b+c=d化为找 a+b=d-c。设c为a,b,c中最大的元素。 注意d不一定比c大,d-c可以为负数。 这样我们枚举d,c,利用二分的思想查找a,b。
代码如下:
#include<cstdio> #include<cstring> #include<algorithm> #define INF 0x3f3f3f3f using namespace std; int a[1010]; int main() { int n,i,j; while(scanf("%d",&n)&&n) { for(i=0;i<n;++i) scanf("%d",&a[i]); sort(a,a+n); int ans=INF,cnt; for(i=n-1;i>=0;--i) { for(j=n-1;j>=0;--j) { if(i==j) continue; cnt=a[i]-a[j]; for(int l=0,r=j-1;l<r;) { if(a[l]+a[r]==cnt) { ans=a[i]; break; } if(a[l]+a[r]>cnt) r--; else l++; } if(ans!=INF) break; } if(ans!=INF) break; } if(ans!=INF) printf("%d\n",ans); else printf("no solution\n"); } return 0; }