Morass

Songman's little game

Sep 9th, 2016
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using LINT = long long int;
  5. using PII = pair<int,int>;
  6.  
  7. #define PB push_back
  8. #define FI first
  9. #define SE second
  10. #define REP(i,n) for(int i=0;i<(n);++i)
  11. #define FOR(i, a, b) for(int i=(a);i<(b);++i)
  12.  
  13. int dp[10][10][10][10][107][2];
  14.  
  15. int n,k;
  16. bool solve(int d1, int d2, int d3, int d4, int k, bool ada){
  17.     if(k==0)
  18.         return d1*1000+d2*100+d3*10+d4 > n;
  19.     if(dp[d1][d2][d3][d4][k][ada]!=-1)return dp[d1][d2][d3][d4][k][ada];
  20.  
  21.     bool res;
  22.     if(ada)
  23.         res =  solve((d1+1)%10,d2,d3,d4,k-1,!ada)
  24.             || solve(d1,(d2+1)%10,d3,d4,k-1,!ada)
  25.             || solve(d1,d2,(d3+1)%10,d4,k-1,!ada)
  26.             || solve(d1,d2,d3,(d4+1)%10,k-1,!ada);
  27.     else
  28.         res =  solve((d1+1)%10,d2,d3,d4,k-1,!ada)
  29.             && solve(d1,(d2+1)%10,d3,d4,k-1,!ada)
  30.             && solve(d1,d2,(d3+1)%10,d4,k-1,!ada)
  31.             && solve(d1,d2,d3,(d4+1)%10,k-1,!ada);
  32.  
  33.     return (dp[d1][d2][d3][d4][k][ada]=res);
  34. }
  35.  
  36. void process(){
  37.     cin>>n>>k;
  38.     int dd[4];
  39.     int nn=n;
  40.     REP(i,4){
  41.         dd[4-i-1]=nn%10;
  42.         nn/=10;
  43.     }
  44.     // with this it works, dunno why
  45.     memset(dp,-1,sizeof dp);
  46.     if(solve(dd[0],dd[1],dd[2],dd[3],k,true))
  47.         cout<<"Ada"<<endl;
  48.     else
  49.         cout<<"Vinit"<<endl;
  50. }
  51.  
  52. int main() {
  53.     int t;
  54.     cin >> t;
  55.     // memset(dp,-1,sizeof dp);
  56.     while(t--)process();
  57.     return 0;
  58. }
Add Comment
Please, Sign In to add comment