Tranvick

DP_TIMUS

Jan 9th, 2012
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #pragma comment(linker, "/STACK:65777216")
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <cstdlib>
  5. #include <ctime>
  6. #include <cstdio>
  7. #include <algorithm>
  8. #include <cmath>
  9. #include <vector>
  10. #include <set>
  11. #include <stack>
  12. #include <map>
  13. #include <queue>
  14. #include <string>
  15. #include <memory.h>
  16. #include <iterator>
  17. #define mem(A,X) memset(A,X,sizeof(A))
  18. #define memo(A) memset(A,0,sizeof(A))
  19. #define forn(I,B) for (int I=1;I<=(B);I++)
  20. #define forg(H,V) for (int H=first[V];h;h=next[H])
  21. #define rep(I,B) for (int I=0;I<(B);I++)
  22. #define labs(X) (((X)>0)?(X):(-(X)))
  23. #define ropen(X) freopen(X,"r",stdin)
  24. #define wopen(X) freopen(X,"w",stdout)
  25. #define pb push_back
  26. #define mp make_pair
  27. #define all(X) (X).begin(),(X).end()
  28. #define sqr(X) ((X)*(X))
  29.  
  30. using namespace std;
  31.  
  32. typedef pair <int,int> pii;
  33. typedef pair <long long,long long> pll;
  34. typedef double ld;
  35. typedef long long ll;
  36. typedef vector<int> vi;
  37. const int N=11111;
  38. const int K=111;
  39. const int INF=111111111;
  40. const double eps=1e-9;
  41. const double pi=3.14159265358979;
  42.  
  43. int f[K][N],g[K][N],s,q;
  44. vi ans;
  45.  
  46. bool rec(int n,int c,int p){
  47.     bool ok=1;
  48.     ans.clear();
  49.     int tt=n;
  50.     while (n && ok){
  51.         ok=0;
  52.         forn(last,9) if (last<=p && last*last<=c &&f[n-1][p-last] && g[n-1][c-last*last]){
  53.             --n;p-=last;c-=last*last;
  54.             ans.pb(last);
  55.             ok=1;
  56.         }
  57.         if (!ok && tt==100){
  58.             printf("-1\n");
  59.             return 0;
  60.         }
  61.         if (!ok && tt!=100) return ok;
  62.     }
  63.     sort(all(ans));
  64.     rep(i,tt) printf("%d",ans[i]);
  65.     putchar('\n');
  66.     return ok;
  67. }
  68.  
  69. int main(){
  70.     f[0][0]=g[0][0]=1;
  71.     forn(i,100) forn(j,10000) forn(last,9){
  72.         if (last>j) break;
  73.         f[i][j]|=f[i-1][j-last];
  74.     }
  75.     forn(i,100) forn(j,10000) forn(last,9){
  76.         if (last*last>j) break;
  77.         g[i][j]|=g[i-1][j-last*last];
  78.     }
  79.     int kol;
  80.     scanf("%d",&kol);
  81.     while(kol--){
  82.         scanf("%d%d",&s,&q);
  83.         forn(i,100) if (rec(i,q,s)) break;
  84.     }
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment