JacobianDet

Untitled

Jul 26th, 2018
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. int memo[901][8101], digx[901][8101];
  4.  
  5. /*int timus(int sd, int sq)
  6. {
  7.     if(!sd && !sq)
  8.     return 0;
  9.     else if((sd <= 0) || (sq <= 0) || (vis[sd][sq] == 1))
  10.     return 1000000;
  11.     if(vis[sd][sq] == 2)
  12.     return memo[sd][sq];
  13.     vis[sd][sq] = 1;
  14.     int ans = 1000000;
  15.     for(int i=0;i<=9;i++)
  16.     {
  17.         if(ans > 1 + timus(sd-i, sq-i*i))
  18.         {
  19.             ans = std::min(ans, 1 + timus(sd-i, sq-(i*i)));
  20.             digx[sd][sq] = i;
  21.             par[sd][sq] = mp(sd-i, sq-i*i);
  22.         }
  23.     }
  24.     vis[sd][sq] = 2;
  25.     memo[sd][sq] = ans;
  26.     return ans;
  27. }*/
  28.  
  29. int main(void)
  30. {
  31.     std::ios_base::sync_with_stdio(false);
  32.     std::cin.tie(NULL);
  33.     std::cout.tie(NULL);
  34.     for(int i=0;i<=900;i++)
  35.     {
  36.         for(int j=0;j<=8100;j++)
  37.         {
  38.             memo[i][j] = 1000000;
  39.             digx[i][j] = 0;
  40.         }
  41.     }
  42.     memo[0][0] = 0;
  43.     for(int i=1;i<=8100;i++)
  44.     memo[0][i] = 1000000;
  45.     for(int i=1;i<=900;i++)
  46.     memo[i][0] = 1000000;
  47.     for(int i=1;i<=900;i++)
  48.     {
  49.         for(int j=1;j<=8100;j++)
  50.         {
  51.             for(int k=1;k<=9;k++)
  52.             {
  53.                 if(((i-k) >= 0) && ((j-k*k) >= 0) && (memo[i][j] > (1 + memo[i-k][j-k*k])))
  54.                 {
  55.                     memo[i][j] = 1 + memo[i-k][j-k*k];
  56.                     digx[i][j] = k;
  57.                 }
  58.             }
  59.         }
  60.     }
  61.     int T;
  62.     std::cin>>T;
  63.     while(T--)
  64.     {
  65.         int sd = 0, sq = 0;
  66.         std::cin>>sd>>sq;
  67.         if((sd > 900) || (sq > 8100) || (memo[sd][sq] > 100))
  68.         std::cout<<"No solution\n";
  69.         else
  70.         {
  71.             int psd = sd, psq = sq, dig = -1;
  72.             while(psd && psq)
  73.             {
  74.                dig = digx[psd][psq];
  75.                std::cout<<dig;
  76.                psd -= dig;
  77.                psq -= (dig * dig);
  78.             }
  79.             std::cout<<"\n";
  80.         }
  81.     }
  82.     return 0;
  83. }
Add Comment
Please, Sign In to add comment