Vijos P1196吃糖果遊戲 組合遊戲

2021-09-07 07:27:51 字數 1580 閱讀 1556

matrix67和shadow正在做乙個小遊戲。

桌子上放著兩堆糖果,matrix67和shadow輪流對這些糖果進行操作。在每一次操作中,操作者需要吃掉其中一堆糖果,並且把另一堆糖果分成兩堆(可以不相等)留給對方操作。遊戲如此進行下去,糖果數會越來越少,最後必將出現這樣一種情況:某人吃掉一堆糖果後發現另一堆裡只剩一塊糖果不能再分了。遊戲規定此時該操作者吃掉最後這一塊糖果從而取勝。

這個遊戲是不公平的。對於任意一種初始狀態,總有一方有必勝策略。所謂有必勝策略是指,無論對方如何操作,自己總有辦法取勝。

matrix67和shadow將進行10次遊戲,每一次遊戲中總是matrix67先進行操作。matrix67想知道每一次遊戲中誰有必勝策略。

輸入資料一共10行,每行有兩個用空格隔開的正整數,表示一次遊戲開始時桌子上兩堆糖果分別有多少個。

對於50%的資料,這些正整數均不超過100;

對於70%的資料,這些正整數均不超過10 000;

對於100%的資料,這些正整數均不超過10 000位。

輸出十行字串。這些字串只能是「matrix67」或「shadow」,它們表示對應的十行輸入資料中有必勝策略的一方。

請注意大小寫。

1 1

1 21 3

1 41 5

2 12 2

2 32 4

2 5

matrix67

matrix67

matrix67

matrix67

matrix67

matrix67

shadow

shadow

matrix67

matrix67

各個測試點1s

matrix67原創

規定了獲勝狀態

從(x,1)開始遞推

設(x,a),吃掉x,留下的a分開,如果能分成兩部分c和d使(x,c)和(x,d)都是p狀態,(x,a)就是n狀態;如果不得不存在乙個n狀態的,(x,a)就是p狀態

遞推完1...10後》10的%10就行了

還有一種分析:(%matrix67)

當遊戲狀態屬於前者時,matrix67可以把糖果數被5除餘1、4或正好除盡的那一堆分成糖果數被5除餘數都是2或3的兩堆(他總能做到這一點),而對方不得不把其中一堆糖果又分出新的糖果數被5除餘1、4或正好除盡的一堆留給matrix67操作。這樣逼著對方總是面臨必敗的狀態,使得最後對方不得不把2個糖果或者3個糖果分成兩堆,從而使matrix67贏得遊戲。反過來,當matrix67面臨兩堆糖果的數目被5除餘數都是2或3的狀態時,shadow總可以取勝。

#include #include 

#include

#include

using

namespace

std;

const

int n=1e4+5,inf=1e9+5

;char

a[n],b[n];

intmain()

}

vijos1196吃糖果遊戲

matrix67和shadow正在做乙個小遊戲。桌子上放著兩堆糖果,matrix67和shadow輪流對這些糖果進行操作。在每一次操作中,操作者需要吃掉其中一堆糖果,並且把另一堆糖果分成兩堆 可以不相等 留給對方操作。遊戲如此進行下去,糖果數會越來越少,最後必將出現這樣一種情況 某人吃掉一堆糖果後發...

P1196吃糖果遊戲解題報告

name p1196吃糖果遊戲 matrix67 第一次模擬賽 系列 author goal00001111 date 18 12 08 19 47 description 描述 description matrix67和shadow正在做乙個小遊戲。桌子上放著兩堆糖果,matrix67和shado...

vijos1196 吃糖果遊戲 博弈論

描述 matrix67和shadow正在做乙個小遊戲。桌子上放著兩堆糖果,matrix67和shadow輪流對這些糖果進行操作。在每一次操作中,操作者需要吃掉其中一堆糖果,並且把另一堆糖果分成兩堆 可以不相等 留給對方操作。遊戲如此進行下去,糖果數會越來越少,最後必將出現這樣一種情況 某人吃掉一堆糖...