首先操作次數m=∑
an(n
+1)2
m=\dfrac}
m=2n(n
+1)
∑a。
考慮差分得到di=
ai−a
i−
1d_i=a_i-a_
di=ai
−ai
−1,對於一次以i
ii開始的操作,d
id_i
di的變化是n−1
n-1n−
1,否則變化是−1-1
−1。全部取完後di=
0d_i=0
di=
0,所以設i
ii第一種操作做了x
ix_i
xi次,第二種操作做了m−x
im-x_i
m−xi
次,xi(
n−1)
−(m−
xi)+
di=0
→xi=
m−di
nx_i(n-1)-(m-x_i)+d_i=0\to x_i=\dfrac
xi(n−
1)−(
m−xi
)+d
i=0
→xi
=nm−
di
最後檢查是否滿足∑xi
=m
\sum x_i=m
∑xi=m
且按照操作i
ii得到的數=ai
=a_i
=ai
即可。特判n=2
n=2n=
2的情況,其餘情況必然存在乙個點度數》
1>1
>
1,將其作為根。
轉化模型:
將每個葉結點上的a
ia_i
ai個石子看做a
ia_i
ai個插頭,每次插頭沿著結點父邊向上走。
對於非葉結點,所有來自不同兒子結點的插頭可以兩兩合併成乙個**頭後停留在這個結點,剩餘的單插頭則繼續向上走,且在這個結點上最多只能容納a
ia_i
ai個單/**頭。
判斷是否能夠使得所有非葉結點上都能恰好容納a
ia_i
ai個插頭,且最後不剩下單插頭。
具體處理:
設對於非葉結點i
ii,一共傳上來f[i
]f[i]
f[i]
個單插頭,假設其中合併成了a
aa個**頭,剩下f[i
]−2a
f[i]-2a
f[i]−2
a個單插頭,且傳上來單插頭最多的乙個兒子傳了mxmx
mx個插頭:
f [i
]−ai
>
min(f
[i]−
mx,⌊
f[i]
2⌋
)f[i]-a_i>\min(f[i]-mx,\lfloor\frac\rfloor)
f[i]−a
i>
min(f[
i]−m
x,⌊2
f[i]
⌋)則無解,否則上傳2ai
−f
i2a_i-f_i
2ai−f
i個單插頭即可。
考慮數中有1
11的最終態,設所有數之和為sum
sumsu
m:若s um
−n
sum-n
sum−
n為奇數,則必勝,否則必敗。
對於數中沒有1
11的情況:
對於初始局面分類討論:
假設先手已經排好序了,那麼答案就是最大字典序拓撲。
考慮如何構圖使得最大字典序拓撲最小:
由於n
≤2000
n\leq 2000
n≤2000
,暴力將兩兩互質的數之間連一條無向邊,建立dfs
dfsdf
s森林(每次選字典序最小的走)。對新圖拓撲排序即可。
博弈論只需要從終態p
pp往前推,具體判定方法:
列舉根進行dfs
dfsdf
s判定每顆子樹的n/p狀態:
如果乙個子樹必勝,那麼必定存在根的乙個兒子是必敗結點,且權值小於根。
正確性顯然(移到兒子後不移回來肯定必勝,否則不停地在這條邊上移動最後兒子權值還是會變成0)
Atcoder AGC006 解題報告
給出長度為 n 的字串 s 和 t 求乙個字串滿足 長度至少為 n 字首為 s 字尾為 t 請找出長度最短的這樣的字串並輸出他的長度 資料範圍很小,直接列舉判斷就好了。給出乙個 n 層的方格金字塔,自頂向下依次標號為第 1 到第 n 層。其中第 i 1 le i le n 層有 2i 1 個方格。第...
Atcoder AGC005 解題報告
有乙個字串 x 對它進行操作。該串只含 s 和 t 凡是 s 與 t 連在一起都要將它們一起去掉。現在進行若干次操作直到該串中沒有連在一起的 st 問剩下的長度。考慮用對頂棧模擬。先將所有的字串加入右棧中。依次將乙個字元從右棧中彈出,加入左棧。如果在任意時刻,出現了左棧頂是 s 而右棧頂是 t 那麼...
Atcoder AGC004 解題報告
用若干個 1 times 1 times 的小方塊 立方體 組成乙個 a times b times c 的大長方體,每個小方塊可以塗成紅色或藍色,但要滿足以下要求 至少有 1 個紅色方塊與 2 個藍色方塊。所有的紅色方塊必須組成乙個長方體。所有的藍色方塊必須組成乙個長方體。求所有滿足要求的染色方案...