bzoj1457 棋盤遊戲

2021-08-17 14:46:35 字數 1029 閱讀 1953

有乙個100 * 100的棋盤,其中左下角的編號為(0, 0), 右上角編號為(99, 99)。棋盤上有n個queen,最開始第i個queen的位置為(xi, yi)。現在有兩個玩家依次來操作,每一次乙個玩家可以選擇其中乙個queen,將它跳到(xi – k, yi)或(xi, yi - k)或(xi – k, yi - k), 其中k > 0。注意在遊戲的過程中,乙個格仔裡面可能出現多個queen。如果誰先將任意乙個queen移動到(0, 0), 誰就獲勝。問先手必勝還是後手必勝?

注意本題是多組資料。 第一行有乙個數t, 表示資料組數。 接下來有t組資料,每組資料的第一行乙個正整數n表示queen的個數。接下來n行每行兩個數表示第i個queen的初始位置xi, yi(0 <= xi <= 99, 0 <= yi <= 99)。

對於每一組資料,你需要輸出是先手必勝還是後手必勝。 如果是先手必勝,輸出「^o^「, 如果是後手必勝,輸出」t_t」。

t <= 10, n <= 1000

弄懂了sg函式的含義就很好做了,這題稍微不同的是第乙個移動到0,0的人贏

那麼就把一步能贏的點sg標記為0,接下來就變成誰不能走誰就輸的經典模型了,套一下就ok

#include 

#include

#include

#define rep(i,st,ed) for (int i=st;i<=ed;++i)

#define fill(x,t) memset(x,t,sizeof(x))

const

int n=100;

int sg[n+5][n+5];

int rec[20005],tot;

int n;

bool check(int x,int y)

int get_sg(int x,int y)

}int main(void)

if (sum||flag) puts("^o^");

else

puts("t_t");

}return

0;}

bzoj1457 棋盤遊戲

題目描述 100 100 的棋盤上有 n 個 queen 每個 queen 可以向左,向下,向左下移動。兩人輪流操作,將任何乙個 queen 移動到 0,0 的人獲勝。乙個位置上可以有很多 queen queen 移動時不需要考慮經過路徑上是否有 queen 題解 這個很像 nim 遊戲,不過這個遊...

1457 棋盤遊戲

time limit 5 sec memory limit 64 mb submit 327 solved 185 submit status discuss 有乙個100 100的棋盤,其中左下角的編號為 0,0 右上角編號為 99,99 棋盤上有n個queen,最開始第i個queen的位置為 x...

BZOJ 3106 cqoi2013 棋盤遊戲

time limit 10 sec memory limit 128 mb submit 859 solved 356 submit status discuss 乙個n n n 2 棋盤上有黑白棋子各一枚。遊戲者a和b輪流移動棋子,a先走。l a的移動規則 只能移動白棋子。可以往上下左右四個方向之...