题目链接:http://120.78.128.11/Problem.jsp?pid=3445
最开始的思路就是直接暴力求解,先把所有的数值两两存入结构体,再从小到大枚举。用二分的思路去判断数值以及出现,结果TLE,但优化一下应该也能过,因为题目说只有两组数据。代码如下:
1 #include <iostream> 2 #include <string> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <sstream> 6 #include <iomanip> 7 #include <map> 8 #include <stack> 9 #include <deque> 10 #include <queue> 11 #include <vector> 12 #include <set> 13 #include <list> 14 #include <cstring> 15 #include <cctype> 16 #include <algorithm> 17 #include <iterator> 18 #include <cmath> 19 #include <bitset> 20 #include <ctime> 21 #include <fstream> 22 #include <limits.h> 23 #include <numeric> 24 25 using namespace std; 26 27 #define F first 28 #define S second 29 #define mian main 30 #define ture true 31 32 #define MAXN 1000000+5 33 #define MOD 1000000007 34 #define PI (acos(-1.0)) 35 #define EPS 1e-6 36 #define MMT(s) memset(s, 0, sizeof s) 37 typedef unsigned long long ull; 38 typedef long long ll; 39 typedef double db; 40 typedef long double ldb; 41 typedef stringstream sstm; 42 const int INF = 0x3f3f3f3f; 43 44 int n; 45 int ans,tot; 46 int a[1010]; 47 struct node{ 48 int x,a,b; 49 bool operator < (const node &b) const{ 50 return x < b.x; 51 } 52 }q[MAXN]; 53 54 int find_f(int x,int a,int b){ 55 int l(0),r = tot; 56 while(l<r){ 57 int mid = (l + r) >> 1; 58 if(q[mid].x < x) 59 l = mid+1; 60 else 61 r = mid; 62 } 63 while(l < tot && q[l].x == x){ 64 if(q[l].a != a && q[l].b != a && q[l].a != b && q[l].b != b) 65 break; 66 l++; 67 } 68 if(q[l].x != x) 69 return 0; 70 return 1; 71 } 72 73 int main(){ 74 ios_base::sync_with_stdio(false); 75 cout.tie(0); 76 cin.tie(0); 77 while(scanf("%d",&n)!=EOF){ 78 if(!n) 79 break; 80 for(int i = 1; i <= n; i++) 81 scanf("%d",&a[i]); 82 ans = -INF; 83 tot = 0; 84 MMT(q); 85 for(int i = 1; i < n; i++){ 86 for (int j = i+1; j <= n; j++){ 87 q[tot].x = a[i] + a[j]; 88 q[tot].a = i; 89 q[tot++].b = j; 90 } 91 } 92 sort(q,q+tot); 93 for(int i = 1; i <= n; i++){ 94 for(int j = 1; j <= n; j++){ 95 if(i != j){ 96 int t = a[i]-a[j]; 97 if(find_f(t,i,j)){ 98 if(a[i] > ans) 99 ans = a[i]; 100 } 101 } 102 } 103 } 104 if(ans == -INF) 105 printf("No Solution\n"); 106 else 107 printf("%d\n",ans); 108 } 109 return 0; 110 }