题解:P17736 [ICPC 2019 Xuzhou R]
题意简述
给定
对于每个
若存在,输出一组满足条件的 impossible。
思路
一眼看到
然后考虑如何优化。由于
- 若
a^3+b^3+c^3<x ,则增大b ; - 若
a^3+b^3+c^3>x ,则减小c ; - 若相等,就找到了一组解,输出即可。
总时间复杂度由
这样我们就可以打出这个用二维数组存的表,如果无解的话标记三个
暴力打表代码如下:
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
signed main(){
for(int i=0;i<=200;i++){
int f=0;
for(int a=-5000;a<=5000;a++){
int b=a;
int c=5000;
while(b<=c){
int sum=a*a*a+b*b*b+c*c*c;
if(sum==i){
cout<<"{"<<a<<','<<b<<','<<c<<"}"<<',';
f=1;
break;
}
if(sum<i) b++;
else c--;
}
if(f) break;
}
if(f==0) cout<<"{"<<-5001<<','<<-5001<<','<<-5001<<"}"<<',';
}
}
AC代码
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int a[205][3]={{-5000,0,5000},{-5000,1,5000},{-4373,-486,4375},{-5,4,4},{-5001,-5001,-5001},{-5001,-5001,-5001},{-637,-205,644},{-169,44,168},{-5000,2,5000},{-216,-52,217},{-650,-353,683},{-695,-641,843},{-11,7,10},{-5001,-5001,-5001},{-5001,-5001,-5001},{-265,-262,332},{-4114,-588,4118},{-3331,2195,2977},{-1373,-1276,1671},{-95,47,91},{-2816,-741,2833},{-401,-287,445},{-5001,-5001,-5001},{-5001,-5001,-5001},{-10,8,8},{-2683,1839,2357},{-2107,237,2106},{-5000,3,5000},{-2268,-249,2269},{-233,-69,235},{-5001,-5001,-5001},{-5001,-5001,-5001},{-5001,-5001,-5001},{-5001,-5001,-5001},{-1555,-244,1557},{-1120,-509,1154},{-3223,2358,2731},{-444,-84,445},{-27,16,25},{-5001,-5001,-5001},{-5001,-5001,-5001},{-5001,-5001,-5001},{-5001,-5001,-5001},{-823,-307,837},{-7,-5,8},{-2369,1709,2025},{-758,-473,815},{-141,49,139},{-3950,-1247,3991},{-5001,-5001,-5001},{-5001,-5001,-5001},{-796,602,659},{-5001,-5001,-5001},{-2370,1518,2141},{-3885,-648,3891},{-3329,1837,3131},{-672,505,559},{-998,361,982},{-5001,-5001,-5001},{-5001,-5001,-5001},{-1201,-163,1202},{-966,668,845},{-2744,-1561,2903},{-161,102,146},{-5000,4,5000},{-929,403,903},{1,1,4},{-5001,-5001,-5001},{-5001,-5001,-5001},{-403,134,398},{-2359,824,2325},{-533,401,443},{-432,-104,434},{-335,-146,344},{-5001,-5001,-5001},{-5001,-5001,-5001},{-5001,-5001,-5001},{-5001,-5001,-5001},{-2080,-829,2123},{-706,-196,711},{-1300,-706,1366},{-2368,-1719,2638},{-1317,847,1188},{-3707,1315,3651},{-5001,-5001,-5001},{-5001,-5001,-5001},{-5001,-5001,-5001},{-4126,-1972,4271},{-1390,-1282,1686},{-2514,1953,2036},{-1803,365,1798},{-3389,-2912,3992},{-4052,861,4039},{-248,-98,253},{-5001,-5001,-5001},{-5001,-5001,-5001},{-22,14,20},{-3168,-991,3200},{-2101,-1638,2391},{-893,-622,984},{-1797,-903,1870},{-2327,319,2325},{-239,118,229},{-5001,-5001,-5001},{-5001,-5001,-5001},{-7,-4,8},{-2689,-1165,2760},{-1309,947,1117},{-1165,-948,1345},{-2948,853,2924},{-5001,-5001,-5001},{-4793,-2312,4966},{-5001,-5001,-5001},{-5001,-5001,-5001},{-5001,-5001,-5001},{-12,8,11},{-1906,-757,1945},{-896,-555,962},{-4328,383,4327},{-3677,-1673,3789},{-2804,1219,2725},{-5001,-5001,-5001},{-5001,-5001,-5001},{-37,-16,38},{-1,0,5},{-5000,5,5000},{-2212,-419,2217},{-4034,-3881,4988},{-3989,-726,3997},{-1580,-1238,1801},{-5001,-5001,-5001},{-5001,-5001,-5001},{-1,2,5},{-399,167,389},{-3013,-1766,3203},{-1351,-629,1395},{-1116,816,946},{-758,-428,801},{-86,-77,103},{-5001,-5001,-5001},{-5001,-5001,-5001},{-139,104,116},{-7,-3,8},{-5001,-5001,-5001},{-2746,-2552,3342},{-8,-7,10},{-327,-263,376},{-2366,1528,2131},{-5001,-5001,-5001},{-5001,-5001,-5001},{-367,260,317},{-463,215,447},{-805,486,741},{-3736,-695,3744},{-2135,-516,2145},{-3693,-1049,3721},{-5001,-5001,-5001},{-5001,-5001,-5001},{-5001,-5001,-5001},{-1534,383,1526},{-3874,-1654,3972},{-4767,-2476,4980},{-4125,-1417,4180},{-3423,-2943,4033},{-66,-59,79},{-5001,-5001,-5001},{-5001,-5001,-5001},{-5001,-5001,-5001},{-802,-574,890},{-1354,-1012,1521},{-3834,-2149,4047},{-1328,891,1178},{-5001,-5001,-5001},{-5001,-5001,-5001},{-335,-170,349},{-5001,-5001,-5001},{-5001,-5001,-5001},{-1168,-160,1169},{-13,-10,15},{-2839,1503,2691},{-5001,-5001,-5001},{-4874,974,4861},{-90,-29,91},{-4889,976,4876},{-5001,-5001,-5001},{-5001,-5001,-5001},{-4,5,5},{-1885,-1092,2000},{-1639,318,1635},{-1702,-1403,1974},{-4812,-593,4815},{-377,-215,399},{-20,16,16},{-5001,-5001,-5001},{-5001,-5001,-5001},{-5001,-5001,-5001},{-1057,-579,1112},{-2867,-1606,3026},{-3752,-1347,3809},{-2208,508,2199},{-2318,-638,2334}};
signed main(){
int t;
cin>>t;
while(t--){
int x;
cin>>x;
if(a[x][0]==-5001&&a[x][1]==-5001&&a[x][2]==-5001) cout<<"impossible"<<endl;
else cout<<a[x][0]<<' '<<a[x][1]<<' '<<a[x][2]<<endl;
}
}