Thursday, 27 July 2017

Lightoj 1315 - Game of Hyper Knights

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int dp[505][505];
  4. int dx[6]= {22311-1};
  5. int dy[6] = {-1,112,32};
  6. int cal(int x, int y){
  7.     if(== 0 && y == 0){
  8.         return 0;
  9.     }
  10.     if(dp[x][y] != -1){
  11.         return dp[x][y];
  12.     }
  13.     set<int>s;
  14.     for(int i = 0; i <6; i++){
  15.         if(x-dx[i]>=0 && y-dy[i]>= 0){
  16.             s.insert(cal(x-dx[i], y-dy[i]));
  17.         }
  18.     }
  19.     int ans  = 0;
  20.     while(s.find(ans)!= s.end()) ans++;
  21.     dp[x][y] = ans;
  22.     return dp[x][y];
  23. }
  24. int main()
  25. {
  26.  
  27.     int ts;
  28.     cin>>ts;
  29.     memset(dp, -1sizeof(dp));
  30.     for(int p = 1; p <= ts; p++){
  31.     int n;
  32.     cin>>n;
  33.     int ans = 0;
  34.     for(int i = 0; i <n; i++){
  35.         int x, y;
  36.         cin>>x>>y;
  37.         ans = ans^cal(x, y);
  38.         //cout<<cal(x, y);
  39.     }
  40.     if(ans) cout<<"Case "<<p<<": Alice"<<endl;
  41.     else cout<<"Case "<<p<<": Bob"<<endl;
  42.     }
  43.     return 0;
  44. }

No comments:

Post a Comment

Most Featured Post

Lightoj 1159 - Batman

http://lightoj.com/volume_showproblem.php?problem=1159 problem analysis: First i thought of this as if s1, s2 and s3 are those three str...