BZOJ 3106 cqoi2013 棋盤遊戲

2022-03-03 07:58:00 字數 1416 閱讀 7669

time limit: 10 sec  memory limit: 128 mb

submit: 859  solved: 356

[submit][status][discuss]

乙個n*n(n>=2)棋盤上有黑白棋子各一枚。遊戲者a和b輪流移動棋子,a先走。

l         a的移動規則:只能移動白棋子。可以往上下左右四個方向之一移動一格。

l         b的移動規則:只能移動黑棋子。可以往上下左右四個方向之一移動一格或者兩格。

和通常的「吃子」規則一樣,當某遊戲者把自己的棋子移動到對方棋子所在的格仔時,他就贏了。兩個遊戲者都很聰明,當可以獲勝時會盡快獲勝,只能輸掉的時候會盡量拖延時間。你的任務是判斷誰會贏,需要多少回合。

比如n=2,白棋子在(1,1),黑棋子在(2,2),那麼雖然a有兩種走法,第二個回合b總能取勝。

輸入僅一行,包含五個整數n, r1, c1, r2, c2,即棋盤大小和棋子位置。白色棋子在(r1,c1),黑色棋子在(r2,c2)(1<=r1,c1,r2,c2<=n)。黑白棋子的位置保證不相同。

輸出僅一行,即遊戲結果。如果a獲勝,輸出white x;如果b獲勝,輸出black x;如果二者都沒有必勝策略,輸出draw。

2 1 1 2 2

black 2

n<=20

題解:暴力dp即可;

f[i][j][k][l][m][n]:表示:第i位,第一,二,三個數用了i,j,k個,n表示是否有進製;

1 #include2

using

namespace

std;

3#define clr(a,b) memset(a,b,sizeof(a))

4 typedef long

long

ll;5

const ll inf=0x3f3f3f3f3f3f3f3fll;

6ll a,b,c;

7ll la,lb,lc,len;

8 ll dp[62][40][40][40][2];9

void getlen()

10ll getnum(ll x)

1114

return

sum;15}

16void

work()

17

38}

39}

40}

41//

cout<42

if(dp[len][la][lb][lc][0]>=inf) printf("

-1\n");

43else printf("

%d\n

",dp[len][la][lb][lc][0

]);44}45

46int

main()

47

view code

3106 cqoi2013 棋盤遊戲

乙個n n n 2 棋盤上有黑白棋子各一枚。遊戲者a和b輪流移動棋子,a先走。a的移動規則 只能移動白棋子。可以往上下左右四個方向之一移動一格。b的移動規則 只能移動黑棋子。可以往上下左右四個方向之一移動一格或者兩格。和通常的 吃子 規則一樣,當某遊戲者把自己的棋子移動到對方棋子所在的格仔時,他就贏...

bzoj1257 CQOI 餘數之和

題目 time limit 5 sec memory limit 162 mb submit 2383 solved 1105 submit status discuss 給出正整數n和k,計算j n,k k mod 1 k mod 2 k mod 3 k mod n的值,其中k mod i表示k除...

BZOJ1818 Cqoi2010 內部白點

給定平面上的一些黑點,其它位置都是白點,乙個白點如果上下左右都有黑點就會變成黑點,求最終會有多少個黑點 就是求交點個數 離散化後,取出所有線段,然後沿任意乙個軸朝著乙個方向掃,然後把平行於另乙個軸的線段用端點記錄,掃到一端就在樹狀陣列裡 1,另一端 1,樹狀陣列求個區間和貢獻答案即可 const m...