有趣的nim game
阿新 • • 發佈:2020-08-27
hdoj1730.Northcott Game
當棋子緊貼著時先手必輸,n行緊貼的棋子先手必輸,原題相當於取完n行兩棋子中間的部分構成n行緊貼的局面,等價於nim game
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+10; const int mod=1e9+7; int n,m,k; signed main(){ int T,x,y; while (scanf("%d%d",&n,&m)==2){ int ans=0; for (int i=1;i<=n;i++){ scanf("%d%d",&x,&y); ans^=abs(x-y)-1; } if (ans==0)puts("BAD LUCK!"); else puts("I WIN!"); } return 0; }
hdoj6886.Tic-Tac-Toe-Nim
取完2個格子後,必存在a 0 b類似的行列,要使其構成1 0 1的必輸局面,也就是(a-1)^(b-1)類似的nim game
例 0 2 3 為(2-1)(3-1)(4-1)(6-1)(7-1)(8-1)9
4 0 6
7 8 9
#include<bits/stdc++.h> using namespace std; typedef long long ll; int a[4][4]; int main(){ int T; scanf("%d",&T); while (T--){ for (int i=1;i<=3;i++){ for (int j=1;j<=3;j++){ scanf("%d",&a[i][j]); } } int tot=0; for (int i=1;i<=3;i++){ for (int j=1;j<=3;j++){ int ans=1; for (int k=1;k<=3;k++){ for (int p=1;p<=3;p++){ if (k==i||p==j)continue; int r=0; for (int x=1;x<=3;x++){ for (int y=1;y<=3;y++){ if (x==i&&y==j)continue; if (x==k&&y==p)continue; if (x==k||x==i||y==p||y==j)r^=a[x][y]-1; else r^=a[x][y]; } } if (r==0)ans=0; } } if (ans==1)tot++; } } cout<<tot<<endl; } return 0; }
hdoj5795.A Simple Nim