給出乙個方格陣,初始每個格仔中都沒有石頭,然後每個格仔都有乙個操作序列,並且每時刻執行乙個,迴圈執行,序列長度小於等於6,問t時刻後石頭個數最多的格仔中有幾個石頭。
因為操作序列長度小於等於6,所以每60次操作必有一次迴圈,所以可以對60次操作建乙個矩陣,由60次操作相乘,矩陣的長寬均為方格矩陣的元素總數,操作均可以用矩陣中的數字來表示,其中0號點用來表示所有石頭的源頭,然後矩陣快速冪即可。
#include
#include
#include
#define ll long long
#define n 70
using
namespace std;
ll m,n,tot,t,k,ans,num[n]
[n],len[n]
;char cz[n]
[n];
struct jz
jz operator*(
const jz &u)
const}}
return res;
}void
out(
)puts(""
);}puts(""
);}}qz[n]
,jz;
inline ll zh
(ll u,ll v)
inline jz po
(jz u,ll v)
return res;
}int
main()
}for
(i=1
;i<=k;i++
)for
(i=0
;i<=tot;i++
) qz[0]
.num[i]
[i]=1;
for(i=
1;i<=
60;i++
)else
if(t==
'n'&&j>
1) qz[i]
.num[
zh(j,k)][
zh(j-
1,k)]=
1;else
if(t==
's'&&j.num[
zh(j,k)][
zh(j+
1,k)]=
1;else
if(t==
'e'&&k.num[
zh(j,k)][
zh(j,k+1)
]=1;
else
if(t==
'w'&&k>
1) qz[i]
.num[
zh(j,k)][
zh(j,k-1)
]=1;
}}qz[i]
=qz[i-1]
*qz[i];}
jz.num[0]
[0]=
1;jz=jz*
po(qz[60]
,t/60
)*qz[t%60]
;for
(i=1
;i<=tot;i++
) ans=
max(ans,jz.num[0]
[i])
; cout<}
877 石頭遊戲
亞歷克斯和李用幾堆石子在做遊戲。偶數堆石子排成一行,每堆都有正整數顆石子piles i 遊戲以誰手中的石子最多來決出勝負。石子的總數是奇數,所以沒有平局。亞歷克斯和李輪流進行,亞歷克斯先開始。每回合,玩家從行的開始或結束處取走整堆石頭。這種情況一直持續到沒有更多的石子堆為止,此時手中石子最多的玩家獲...
2 石頭遊戲(坑爹)
題目抽象 一堆石子兩個人輪流取,每次至少要取走乙個。先取的人第一次可以取任意多個,但是不能全部取完。之後每個人取石子時,能取的數目最多不能超過對手剛才取的石子數的k倍 k為給定常量 取走最後乙個石子的人算贏。在兩個人都以最優策略進行遊戲時,先手要麼必勝要麼必負,必勝還是必負取決於一開始有多少個石子,...
11 石頭 剪刀 布遊戲
bin bash 編寫指令碼,實現人機 石頭,剪刀,布 遊戲 game 石頭 剪刀 布 num random 3 computer 通過隨機數獲取計算機的出拳 出拳的可能性儲存在乙個陣列中,game 0 game 1 game 2 分別是 3 中不同的可能 echo 請根據下列提示選擇您的出拳手勢 ...