poj2549--Sumsets (sum)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj2549--Sumsets (sum)相关的知识,希望对你有一定的参考价值。
Sumsets
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 9983 | Accepted: 2731 |
Description
Given S, a set of integers, find the largest d such that a + b + c = d where a, b, c, and d are distinct elements of S.
Input
Several S, each consisting of a line containing an integer 1 <= n <= 1000 indicating the number of elements in S, followed by the elements of S, one per line. Each element of S is a distinct integer between -536870912 and +536870911 inclusive. The last line of input contains 0.
Output
For each S, a single line containing d, or a single line containing "no solution".
Sample Input
5 2 3 5 7 12 5 2 16 64 256 1024 0
Sample Output
12 no solution
Source
转化成 a+b=c-d;
#include <cstdio> #include <algorithm> #define M 1010 using namespace std; int num[M]; int main() { int n; while(scanf("%d", &n) != EOF &&n!=0) { for(int i=0; i<n; i++) scanf("%d", &num[i]); sort(num, num+n); int re; bool flag=1; for(int i=n-1; i>=0; i--) { for(int j=n-1; j>=0; j--) { if(i==j) continue; int multiply=num[i]-num[j]; int rear=0, top= j-1; //注意 top取值范围 ; while(rear<top) { if(multiply==num[rear]+num[top]) { re=num[i]; flag=0; } if(multiply>num[rear]+num[top]) rear++; if(multiply<num[rear]+num[top]) top--; if(!flag) break; } if(!flag) break; } if(!flag) break; } if(flag) printf("no solution\n"); else printf("%d\n", re); } return 0; }
以上是关于poj2549--Sumsets (sum)的主要内容,如果未能解决你的问题,请参考以下文章