[vijos1196] 吃糖果遊戲
一開始看看感覺還可以用【科學的】二維sg,一看資料,10000位,exm?
於是我先寫了個sg函式,敲進去幾個資料
啊我好像看到規律了!—> ac
嘛這樣打表是不行的,我們還是看個正解吧
當遊戲狀態屬於前者時,matrix67可以把糖果數被5除餘1、4或正好除盡的那一堆分成糖果數被5除餘數都是2或3的兩堆(他總能做到這一點)
而對方不得不把其中一堆糖果又分出新的糖果數被5除餘1、4或正好除盡的一堆留給matrix67操作。
這樣逼著對方總是面臨必敗的狀態,使得最後對方不得不把2個糖果或者3個糖果分成兩堆,
從而使matrix67贏得遊戲。
反過來,當matrix67面臨兩堆糖果的數目被5除餘數都是2或3的狀態時,shadow總可以取勝。
所以就是如果兩堆的個數的個位數都是2 3 7 8的乙個的話
就是shadow取勝,不然就是matrix
暴力【表】
#include
#include
#include
using
namespace
std;
int sg[1005][1005],n,m;
int get_sg(int x,int y)
bool ext[1005];memset(ext,0,sizeof(ext));
for (int i=1;i+i<=y;i++)
ext[get_sg(i,y-i)]=1;
for (int i=1;i+i<=x;i++)
ext[get_sg(i,x-i)]=1;
for (int i=0;;i++)
if (!ext[i])
return sg[x][y];
}int main()
}
ac
#include
#include
using
namespace
std;
char x[10005],y[10005];
int main()
}
[poj2505] a multiplication game
首先想到打表,但這什麼鬼啊我不會啊!那就硬找規律?
容易發現
[1,9]stan
[10,18]ollie
[19,162]stan
… 我們可以這樣極限考慮,要是stan知道ta會贏,那每回合會選最大的9,ollie知道自己乘上也沒什麼用,給ta個最小的2,然後stan選個9就能達到自己的目標,ollie要是贏的話是同樣的
然後你隨便試試19-162之間的數就發現ollie總是不能贏,就可以發現規律了
1~9*1 stan
9*1+1~9*2 ollie
9*2+1~9*2*9 stan
那麼我們往下推測
9*2*9+1~9*2*9*2 ollie
規律get?
其實還有乙個問題是這個數字很大,但是可以用double讀入
#include
#include
using
namespace
std;
double n;
int main()
if (n<=18)
n/=18;}}
}
[hdu3032] nim or not nim?
alice和bob輪流取石子,每一次可以從任意一堆中拿走任意個石子,也可以將一堆石子分為兩個小堆。先拿完者獲勝。
這個問題可以用sg函式來解決。首先,操作①其實和nim遊戲沒什麼區別,對於乙個石子數為k的點來說,後繼可以為0…k-1。而操作②實際上是把乙個遊戲分成了兩個遊戲。根據遊戲的和的概念,這兩個遊戲的和應該為兩個子遊戲的sg函式值的異或。
比如說,狀態3的後繼有:0、1、2、(1,2),他們的sg值分別為0、1、2、3,所以sg(3) = 4
但是一看資料範圍2^31 - 1。。。然後打了個表,規律get?
#include
#include
using
namespace
std;
int sg[10005];
int get_sg(int x)
return sg[x];
}int find_sg(int x)
int main()
if (k) printf("alice\n");else
printf("bob\n");
}}
[bzoj2463] [中山市選2009] 誰能贏呢?
這題什麼鬼啊,我為什麼連暴力都不會啊?
然後畫了幾個格仔試一試,發現早晚他們都會把整個棋盤走一遍,那不就是看這個棋盤格仔的奇偶嗎。。
再退一步,這不就是看行數的奇偶嗎。。
ac。
#include
using
namespace
std;
int main()
}
找規律博弈小記(更新)
最近在hdoj上水博弈的題目,在這裡記錄一些小規律。1 題意 一堆n個石子,每次最多取q個,最少取p個,切最後不少於p個時必須一次性取完。誰後取完者輸。ps 那麼就是誰先取到剩p個時候就贏了,少於p個的話一定輸,因為必須取完,如果誰當前遇到0個,贏,大於p小於p q個是贏,因為先手總是可以想辦法給後...
找規律類博弈(3)
盒子遊戲 描述 有兩個相同的盒子,其中乙個裝了 n 個球,另乙個裝了乙個球。alice 和 bob 發明了乙個遊戲,規則如下 alice 和 bob 輪流操作,alice 先操作。每次操作時,遊戲者先看看哪個盒子裡的球的數目比較少,然後清空這個盒子 盒子裡的球直接扔掉 然後把另乙個盒子裡的球拿一些到...
hdu1564博弈 找規律
include include include include include include include include include include include include include define pi acos 1 define ll long long define mo...