别人说可以暴力,然后就暴力撸过了。。。。。
真是大力出奇迹啊我草
AC代码如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <map>
using namespace std;
map<int,int> mark;
int sum[200000], tot;
int N;
int main(){
int T;
sum[0] = 0;
tot = 0;
for( int i = 1; i < 123456789; i++ ){
sum[i] = i + sum[i-1];
if( sum[i] > 123456789 ){
tot = i;
break;
}
mark[sum[i]] = 1;
}
cin >> T;
while( T-- ){
cin >> N;
if( mark[N] ){
int i;
for( i = 1; i < tot; i++ ){
if( sum[i] == N ){
break;
}
}
cout << i << endl;
continue;
}
int flag = 1;
for( int i = 1; i < tot && flag; i++ ){
if( mark[N-sum[i]] == 1 ){
for( int j = 1; j < tot; j++ ){
if( sum[j] == N - sum[i] ){
cout << i << " " << j << endl;
flag = 0;
break;
}
}
}
}
if( flag ){
for( int k= 1; k < tot && flag; k++ ){
for( int i = 1; i < tot && flag; i++ ){
if( N-sum[i]-sum[k] > 0 && mark[N-sum[i]-sum[k]] == 1 ){
for( int j = 1; j < tot; j++ ){
if( sum[j] == N-sum[i]-sum[k] ){
cout << i << " " << j << " " << k << endl;
flag = 0;
break;
}
}
}
}
}
}
}
return 0;
}