水題就只貼代碼了,
AC code:
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define clr(a, b) memset(a, b, sizeof a)
#define rep(i, a, b) for(int i = (a); i <= (b); ++i)
#define per(i, a, b) for(int i = (a); i >= (b); --i)
typedef long long LL;
typedef double DB;
typedef long double LD;
using namespace std;
void open_init()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
ios::sync_with_stdio(0);
}
void close_file()
{
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
}
const int MAXN = 1009;
const int MAX = 509;
const int P = 10;
struct Bignum
{
int a[MAX];
Bignum()
{
clr(a, 0);
a[0] = 1;
}
Bignum(int k)
{
clr(a, 0);
if(!k) a[0] = 1;
else
{
while(k)
{
a[++a[0]] = k%10;
k /= 10;
}
}
}
inline void adjust()
{
rep(i, 1, a[0])
{
while(a[i] < 0) a[i+1]--, a[i] += P;
while(a[i] >= P) a[i+1]++, a[i] -= P;
}
while(a[a[0]+1]) a[0]++;
while(!a[a[0]] && a[0] > 1) a[0]--;
}
inline void read()
{
char str[MAX] = "\0";
scanf("%s", str);
a[0] = strlen(str);
rep(i, 1, a[0])
a[i] = str[a[0]-i]-'0';
}
inline void print()
{
per(i, a[0], 1)
putchar('0'+a[i]);
}
};
inline bool operator < (const Bignum &a, const Bignum &b)
{
if(a.a[0] != b.a[0]) return a.a[0] < b.a[0];
per(i, a.a[0], 1)
if(a.a[i] != b.a[i])
return a.a[i] < b.a[i];
return false;
}
inline Bignum operator + (const Bignum &a, const Bignum &b)
{
Bignum ret;
ret.a[0] = max(a.a[0], b.a[0]);
rep(i, 1, ret.a[0])
ret.a[i] = a.a[i]+b.a[i];
ret.adjust();
return ret;
}
int n;
Bignum l[MAXN];
int main()
{
open_init();
scanf("%d", &n);
rep(i, 1, n) l[i].read();
sort(l+1, l+n+1);
bool flag = false;
rep(i, 3, n)
if(l[i] < l[i-1]+l[i-2])
{
l[i-2].print(), putchar(' ');
l[i-1].print(), putchar(' ');
l[i].print(), puts("");
flag = true;break;
}
if(!flag) puts("0 0 0");
close_file();
return 0;
}