ACM訓練日記 3月12日

2021-08-16 20:12:05 字數 1528 閱讀 4874

週末跟風刷版題刷嗨了,居然忘記寫日記,今天補上吧。

這次就整理下之前牛客網比賽的題目和nim博弈和sg函式。

wannafly挑戰賽11

1,白兔的分身術

白兔學會了分身術。

一開始有乙隻白兔,接下來會進行k輪操作,每一輪中每乙隻白兔都會變成p只白兔。要求k輪後白兔的總數恰好為n。要求找到兩個正整數p,k,最大化p+k

水題,其實就是輸出n+1,千萬別把n因子分解了,否則就掉坑里了。

2,白兔的式子

已知f[1][1]=1,f[i][j]=a*f[i-1][j]+b*f[i-1][j-1](i>=2,1<=j<=i)。對於其他情況f[i][j]=0有t組詢問,每次給出a,b,n,m,求f[n][m] mod (998244353)。

這道題其實看到公式就能自然的反映出這是楊輝三角,然後把這個三角寫一下就能發現規律了,就是如果求(n,m)的值,那麼就是c(n-1,m-1)*a^(n-m)*b^(m-1)%mod。注意要用lucas定理優化,還要用快速冪。

**:using namespace std;

ll mod=998244353;

long long f[100010];

ll exp_mod(ll a, ll b, ll p)

return res;

}void init(long long p)

long long inv(long long a,long long m)

long long lucas(long long n,long long m,long long p)

return ans;

}int main()

=3,mex=0,mex{}=0

對於任意狀態xx, 定義 sg(x)=mex(s)sg(x)=mex(s),其中ss是xx後繼狀態的sg函式值的集合 

如xx有三個後繼狀態分別為sg(a),sg(b),sg(c)sg(a),sg(b),sg(c),那麼sg(x)=mex(sg(a),sg(b),sg(c))sg(x)=mex(sg(a),sg(b),sg(c)) 

sgsg函式的終態為sg(x)=0sg(x)=0,當且僅當xx為必敗點時

取石子問題

有1堆n個的石子,每次只能取個石子,先取完石子者勝利,那麼各個數的sg值為多少?

sg[0]=0,f=,

x=1 時,可以取走1 - f個石子,剩餘個,所以 sg[1] = mex= mex = 1

x=2 時,可以取走2 - f個石子,剩餘個,所以 sg[2] = mex= mex = 0

x=3 時,可以取走3 - f個石子,剩餘個,所以 sg[3] = mex = mex =1

x=4 時,可以取走4- f個石子,剩餘個,所以 sg[4] = mex = mex = 2

x=5 時,可以取走5 - f個石子,剩餘個,所以sg[5] = mex =mex = 3

以此類推…..

關於sg函式,確實是非常好用,但畢竟要分析清楚所有可能的後繼狀態,並且還是要借助陣列表現出來的方法。

接下來還是要多看博弈論的文章,還要總結總結計算幾何的東西吧。

ACM訓練日記 3月7日

這兩天主要在看關於博弈論的內容,總的來說有的巴什博奕,威左夫博弈,尼姆博弈,斐波那契博弈等。最後還有最經典的組合博弈。可能是我比較笨,關於尼姆博弈及其sg函式還沒完全看明白。就先整理一下看懂的吧。1,巴什博奕 來自 只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取...

8月12日訓練日記

今天上午把重點放在了做題上面,上午還是做了一些二分和單調佇列的題目,掌握還是不太紮實,下午的時候重點放在了複習知識點上面,看了一下有關二分的部落格,感覺自己眼光真的狹隘了,有些內容自己還是沒接觸到的,沒了解到的知識還是有很多,眼光不夠寬廣,所以還是需要多看題目。到現在,給我感覺最深的就是二分搜尋的最...

ACM訓練日記 8月4日

今天雖然只a了三個題,但感覺也算是扎扎實實的三道題,分別是數獨,塗顏色,分兩組。數獨這道題很明顯是深搜,9 9的方格填滿數,使得橫排,豎排,和9個3 3的小方塊只有1到9不重複的九個數,該題的關鍵就是做好數字使用過的標記,要做三個vis i j 然後就只需要吧空著的方塊填入判斷填數字,遞迴到填滿為止...