zoukankan      html  css  js  c++  java
  • 2019icpc徐州区域赛F

    F. The Answer to the Ultimate Question of Life, The Universe, and Everything.

    我的第一道真·打表题

    这次是真的打表啊,不是初始化求值!

    重现赛的时候,一直在搞在线的做法,map和unordered_map都上了,都是TLE,初始化建立两个map,然后枚举a,b再找是否有c,我算的复杂度也就  O(T*5000*10000/2)?  2e8?好像确实得T。实际复杂度或许更高 ?

    unordered_map内部哈希表实现,应该可以O(1)查找呀我感觉。stl的好用归好用,复杂度还是不太清楚。

    打表的方法也是刚学的,对每个x,枚举a,b,二分找c   。 反正最好就是按一定格式打表出来,直接复制存到一个数组交上去就行了。

    枚举的时候注意,三个数中至少有一个非负数,a可以在0~5000,应该能少一半的时间,也许?反正能优化就上吧。

    打表的适用范围:对每个输入的数据,答案固定可知,且输入的数据范围较小。数据范围较小是重点,这里要整个更大的数x,一场比赛都打不完表。

      1 #include <bits/stdc++.h>
      2 #define debug(x) cout << #x << ": " << x << endl
      3 using namespace std;
      4 typedef long long ll;
      5 const int MAXN=2e5+7;
      6 const int INF=0x3f3f3f3f;
      7 const int MOD=1e9+7;
      8 
      9 
     10 int ans[][3]=
     11 {
     12 -5000,0,5000,
     13 -5000,1,5000,
     14 -4373,-486,4375,
     15 -5,4,4,
     16 11111,0,0,
     17 11111,0,0,
     18 -637,-205,644,
     19 -169,44,168,
     20 -5000,2,5000,
     21 -216,-52,217,
     22 -650,-353,683,
     23 -695,-641,843,
     24 -11,7,10,
     25 11111,0,0,
     26 11111,0,0,
     27 -265,-262,332,
     28 -4114,-588,4118,
     29 -3331,2195,2977,
     30 -1373,-1276,1671,
     31 -95,47,91,
     32 -2816,-741,2833,
     33 -401,-287,445,
     34 11111,0,0,
     35 11111,0,0,
     36 -10,8,8,
     37 -2683,1839,2357,
     38 -2107,237,2106,
     39 -5000,3,5000,
     40 -2268,-249,2269,
     41 -233,-69,235,
     42 11111,0,0,
     43 11111,0,0,
     44 11111,0,0,
     45 11111,0,0,
     46 -1555,-244,1557,
     47 -1120,-509,1154,
     48 -3223,2358,2731,
     49 -444,-84,445,
     50 -27,16,25,
     51 11111,0,0,
     52 11111,0,0,
     53 11111,0,0,
     54 11111,0,0,
     55 -823,-307,837,
     56 -7,-5,8,
     57 -2369,1709,2025,
     58 -758,-473,815,
     59 -141,49,139,
     60 -3950,-1247,3991,
     61 11111,0,0,
     62 11111,0,0,
     63 -796,602,659,
     64 11111,0,0,
     65 -2370,1518,2141,
     66 -3885,-648,3891,
     67 -3329,1837,3131,
     68 -672,505,559,
     69 -998,361,982,
     70 11111,0,0,
     71 11111,0,0,
     72 -1201,-163,1202,
     73 -966,668,845,
     74 -2744,-1561,2903,
     75 -161,102,146,
     76 -5000,4,5000,
     77 -929,403,903,
     78 1,1,4,
     79 11111,0,0,
     80 11111,0,0,
     81 -403,134,398,
     82 -2359,824,2325,
     83 -533,401,443,
     84 -432,-104,434,
     85 -335,-146,344,
     86 11111,0,0,
     87 11111,0,0,
     88 11111,0,0,
     89 11111,0,0,
     90 -2080,-829,2123,
     91 -706,-196,711,
     92 -1300,-706,1366,
     93 -2368,-1719,2638,
     94 -1317,847,1188,
     95 -3707,1315,3651,
     96 11111,0,0,
     97 11111,0,0,
     98 11111,0,0,
     99 -4126,-1972,4271,
    100 -1390,-1282,1686,
    101 -2514,1953,2036,
    102 -1803,365,1798,
    103 -3389,-2912,3992,
    104 -4052,861,4039,
    105 -248,-98,253,
    106 11111,0,0,
    107 11111,0,0,
    108 -22,14,20,
    109 -3168,-991,3200,
    110 -2101,-1638,2391,
    111 -893,-622,984,
    112 -1797,-903,1870,
    113 -2327,319,2325,
    114 -239,118,229,
    115 11111,0,0,
    116 11111,0,0,
    117 -7,-4,8,
    118 -2689,-1165,2760,
    119 -1309,947,1117,
    120 -1165,-948,1345,
    121 -2948,853,2924,
    122 11111,0,0,
    123 -4793,-2312,4966,
    124 11111,0,0,
    125 11111,0,0,
    126 11111,0,0,
    127 -12,8,11,
    128 -1906,-757,1945,
    129 -896,-555,962,
    130 -4328,383,4327,
    131 -3677,-1673,3789,
    132 -2804,1219,2725,
    133 11111,0,0,
    134 11111,0,0,
    135 -37,-16,38,
    136 -1,0,5,
    137 -5000,5,5000,
    138 -2212,-419,2217,
    139 -4034,-3881,4988,
    140 -3989,-726,3997,
    141 -1580,-1238,1801,
    142 11111,0,0,
    143 11111,0,0,
    144 -1,2,5,
    145 -399,167,389,
    146 -3013,-1766,3203,
    147 -1351,-629,1395,
    148 -1116,816,946,
    149 -758,-428,801,
    150 -86,-77,103,
    151 11111,0,0,
    152 11111,0,0,
    153 -139,104,116,
    154 -7,-3,8,
    155 11111,0,0,
    156 -2746,-2552,3342,
    157 -8,-7,10,
    158 -327,-263,376,
    159 -2366,1528,2131,
    160 11111,0,0,
    161 11111,0,0,
    162 -367,260,317,
    163 -463,215,447,
    164 -805,486,741,
    165 -3736,-695,3744,
    166 -2135,-516,2145,
    167 -3693,-1049,3721,
    168 11111,0,0,
    169 11111,0,0,
    170 11111,0,0,
    171 -1534,383,1526,
    172 -3874,-1654,3972,
    173 -4767,-2476,4980,
    174 -4125,-1417,4180,
    175 -3423,-2943,4033,
    176 -66,-59,79,
    177 11111,0,0,
    178 11111,0,0,
    179 11111,0,0,
    180 -802,-574,890,
    181 -1354,-1012,1521,
    182 -3834,-2149,4047,
    183 -1328,891,1178,
    184 11111,0,0,
    185 11111,0,0,
    186 -335,-170,349,
    187 11111,0,0,
    188 11111,0,0,
    189 -1168,-160,1169,
    190 -13,-10,15,
    191 -2839,1503,2691,
    192 11111,0,0,
    193 -4874,974,4861,
    194 -90,-29,91,
    195 -4889,976,4876,
    196 11111,0,0,
    197 11111,0,0,
    198 -4,5,5,
    199 -1885,-1092,2000,
    200 -1639,318,1635,
    201 -1702,-1403,1974,
    202 -4812,-593,4815,
    203 -377,-215,399,
    204 -20,16,16,
    205 11111,0,0,
    206 11111,0,0,
    207 11111,0,0,
    208 -1057,-579,1112,
    209 -2867,-1606,3026,
    210 -3752,-1347,3809,
    211 -2208,508,2199,
    212 -2318,-638,2334,
    213 };
    214 
    215 ll qq[210][3];
    216 
    217 
    218 ll check(ll t)
    219 {
    220     ll l=-5000,r=5000,res=INF;
    221     while(l<=r)
    222     {
    223         ll mid=l+r>>1;
    224         ll tmp=mid*mid*mid;
    225         if(tmp==t) return mid;
    226         if(tmp>t) r=mid-1;
    227         else l=mid+1;
    228     }
    229     return res;
    230 }
    231 
    232 int main()
    233 {
    234     int t;
    235     //init();
    236 
    237    /* for(ll x=0;x<=200;++x)
    238     {
    239         ll c=INF;
    240         for(ll i=-5000;i<=5000;++i)
    241         {
    242             for(ll j=-5000;j<=5000;++j)
    243             {
    244                 ll t=x-i*i*i-j*j*j;
    245                 c=check(t);
    246                 if( abs(c)<=5000)
    247                 {
    248                     printf("%lld,%lld,%lld,
    ",i,j,c);
    249                     break;
    250                 }
    251             }
    252             if( abs(c)<=5000) break;
    253         }
    254         if( abs(c)<=5000) continue;
    255         else printf("11111,0,0,
    ");
    256     }*/
    257     cin>>t;
    258     while(t--)
    259     {
    260         int x;
    261         cin>>x;
    262         if(ans[x][0]==11111) cout<<"impossible"<<endl;
    263         else cout<<ans[x][0]<<' '<<ans[x][1]<<' '<<ans[x][2]<<endl;
    264     }
    265     return 0;
    266 }
  • 相关阅读:
    bzoj 1503
    bzoj 1193 贪心+bfs
    bzoj 1798 线段树
    Codeforces 804D Expected diameter of a tree
    bzoj 1208
    bzoj 3224
    HDU 5115 区间dp
    hihocoder #1162 矩阵加速dp
    分块入门
    bzoj 1036 树链剖分
  • 原文地址:https://www.cnblogs.com/Zzqf/p/12022674.html
Copyright © 2011-2022 走看看