nyoj的取石子有好多道,除了兩道難度為6的,剩下的在這兒簡單總結一下結論。
取石子(一)
有一堆石子共有n個,a和b輪流取,a先,每次最少取1個,最多取m個,先取完者勝,a,b足夠聰明,問誰先勝?
比較簡單的巴什博弈,若n%(m+1)!=0,a勝,否則b勝。
取石子(七)
n個石子擺成一圈,a和b輪流取,每次可以從中取乙個或相鄰兩個,先取完者勝,a先取,問誰勝?
若n==1||n==2 則a勝,否則b勝。
取石子(四)
兩堆石子分別n,m(n>=m)個,a和b輪流取,有兩種取法,一是在任意的一堆中取走任意多的石子,最少為一;二是在兩堆中同時取走相同數量的石子。a先取,先取完者勝,問a是否勝?(勝輸出1,負為0)
結論:若(n-m)*(sqrt(5.0)+1.0)/2.0!=m ,則a勝,否則負。
01.
#include
02.
#include
03.
#include
04.
#include
05.
using
namespace
std;
06.
int
main()
07.
18.
}
wyothoff game
題意同上取石子(四),不過現在要求前n(n<=10w)個必敗態,比如a面對(0,0)必敗,面對(1,2)(3,5)(4,7)也必敗,現在給乙個n,求前n個必敗態。
由上面取石子(四)的題解鏈結可知其第n項為(n*(sqrt(5.0)+1.0)/2,n*(sqrt(5.0)+1.0)/2+n),由此打乙個10w的表
即可。
01.
#include
02.
#include
03.
int
a[100001][2];
04.
int
main()
05.
16.
}
取石子(八)
題意同上上取石子(四),依然為威佐夫博弈,但是如果a勝,要你輸出你第一次怎麼取子,(如果在任意的一堆中取走石子能勝同時在兩堆中同時取走相同數量的石子也能勝,先輸出取走相同數量的石子的情況,假如取一堆的有多種情況,先輸出從石子多的一堆中取的情況,且要求輸出結果保證第二個值不小於第乙個值。)
首先判斷若n==0,則直接輸出(0,0);
else for迴圈從頭到尾把上面wyothoff game的第n項公式迴圈一遍,並分別與n,m比較。
核心**:
01.
for
(i=1; i<=n; i++)
02.
取石子(六)
有n堆石子,每堆石子都有任意個,a和b輪流從取任意堆裡取一定的石子,每次只能從一堆裡至少取乙個,a先取,
先取完者勝,問誰勝?
結論:將n個數異或一遍,若不為0,則a勝,否則b勝。
01.
#include
02.
int
main()
03.
取石子(九)
題意同取石子(六),不過先取完者敗,問誰勝?
尼姆博弈的變種,統計一下所有數一下大於一的個數,並將所有數字異或一遍,若大於一的個數為0&&異或之後為0||大於一的個數大於0&&異或之後不為零,則a(yougth)勝,否則b(hrdv)勝,
**:01.
#include
02.
int
main()
03.
16.
if
(x&&s||!x&&!s)
17.
printf
(
"yougth\n"
);
18.
else
19.
printf
(
"hrdv\n"
);
20.
}
21.
}
取石子(二)
題意同上上取石子(六),不過限定了每堆石子最多可以取的石子數(最少為一),問a是勝還是敗?(第一行是一
個整數t表示測試資料的組數(t<100)
每組測試資料的第一行是乙個整數n(1每行表示一堆石子,這n行中每行有兩個數整數m,n表示該堆石子共有m個石子,該堆石子每次最多取n個。
(0<=m,n<=2^31)
)01.
#include
02.
#include
03.
int
main()
04.
17.
if
(c)
18.
puts
(
"win"
);
19.
else
20.
puts
(
"lose"
);
21.
}
22.
}
取石子(五)
有一堆石子,a和b輪流從中取一定的石子,但規定:第一次不能取完,至少乙個;從第二次開始,每個人取的石子數至少為1,至多為對手剛取的石子數的兩倍。a先取,問a是否會勝?
具體過程:斐波那契博弈
結論:若其對應的石子數目剛好是斐波那契數,則a必敗,否則a必勝。
**:01.
#include
02.
long
long
a[110]=;
03.
int
main()
04.
14.
if
(f)
15.
printf
(
"no\n"
);
16.
else
17.
printf
(
"yes\n"
);
18.
}
19.
}
NYOJ 取石子(一)
取石子 一 時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1...
NYOJ 23 取石子(一)
時間限制 3000 ms 記憶體限制 65535 kb難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1 m 1000...
NYOJ833 取石子(七)
描述 yougth和hrdv玩乙個遊戲,拿出n個石子擺成一圈,yougth和hrdv分別從其中取石子,誰先取完者勝,每次可以從中取乙個或者相鄰兩個,hrdv先取,輸出勝利著的名字。輸入 輸入包括多組測試資料。每組測試資料乙個n,資料保證int範圍內。輸出輸出勝利者的名字。樣例輸入 2 3 樣例輸出 ...