顯然,符合條件的數必須滿足任何長度的字尾字典序必須嚴格大於全串。
假設乙個串
t t
可以由幾個相同的串
s' role="presentation" style="position: relative;">s
s拼接而成,我們稱
t t
為迴圈串。顯然所有迴圈串都是不滿足條件的。
那麼對於非迴圈串,那麼其所有迴圈表示(就是切下乙個字首拼在後面)都是互不相同的。給出乙個結論:乙個合法串和乙個環的最小迴圈表示串一一對應。
先證明乙個合法串一定是最小迴圈表示串。(以下px
' role="presentation" style="position: relative;">pxp
x表示長度為
x x
的字首,sx
' role="presentation" style="position: relative;">sxs
x表示長度為
x x
的字尾)假設合法串不是最小迴圈表示串,那麼設從第
i' role="presentation" style="position: relative;">i
i位開始,即sn
−i+p
i(i≠
0)s n−
i+pi
(i≠0
)是最小迴圈表示串,那麼我們可以得到sn
−i−i
s n−
i
−i
(矛盾)或者sn
−i=p
n−i sn−
i=pn
−i
並且si
s
i
(也矛盾),於是得證。
再證明乙個最小迴圈表示串一定是合法的。假設其不合法,那麼必然存在乙個si
s
i
(矛盾)或者si
=pi si=
pi
並且把pn
−ip n−
i拼到後面能得到pn
−i>si
p n−
i>si
(也矛盾),得證。
那麼我們設fn
f
n表示長度為
n n
的合法串的個數,顯然有: fn
=1n(
10n−∑
d|n,
dfd)' role="presentation">fn=
1n(10
n−∑d
|n,d
fd)f
n=1n
(10n−
∑d|n
,dfd)其中
∑d|n
dfd ∑d|
ndfd
是減去迴圈串,1n
1
n是因為
n n
種迴圈表示中只有
1' role="presentation" style="position: relative;">1
1種合法。我們設gi
=fi⋅
n2g i=
fi⋅n
2,問題要求的就是∑n
i=1g
i ∑i=
1ngi
,那麼: ∑i
=1ng
i=∑i
=1ni
⋅10i−
∑i=1
n∑d|
i,d⋅gdd
∑ i=
1ngi
=∑i=
1ni⋅
10i−∑
i=1n
∑d|i
,d
⋅gdd
前乙個和式是乙個等比數列乘等差數列,用錯位相減直接求,後乙個和式換成列舉k=
idk =i
d,得到 ∑i
=1ng
i=n⋅
10n+1
−10n+
1−19
+19−
∑k=2
n∑i=
1⌊nk
⌋gk ∑i=
1ngi
=n⋅10
n+1−
10n+1
−19+
19−∑
k=2n
∑i=1
⌊nk⌋
gk
直接杜教篩即可。
**:
include#include
#include
#define ll long long
using namespace std;
const int mod=1000000007;
const int r=100000;
const int t=3000000;
ll n,i9,i2;
int mg[r+5],g[t+5];
ll ksm(ll a,ll b)
ll solve(ll x)
if(x
x]=ans;
return ans;
}int main()
printf("%lld",solve(1));
return
0;}
聯合集訓6 9 El 點分治 雜湊表
轉化題意,就是根據題目所給的式子定義顏色,求同色三角形的個數。有乙個經典結論 完全圖同色三角形個數 總三角形個數 異色角個數 2。因為每個異色三角形都恰有兩個異色角。在有向完全圖中結論依然成立,但這裡的異色角就要分別統計兩齣,一入一出,兩齣三種情況。我們只需要分別知道每個點進 出的紅 綠路徑數量即可...
聯合集訓6 11 期望題
因為a1 a 1是必須要減完的,所以我們只要求出對於ai i 2.n a i i 2.n 在a 1 a 1 減完前期望被減了多少次,最後加上a1 a 1即可。因為期望的線性性,我們只需要分別考慮每乙個ai a i即可。不妨以考慮a1 a2 a1,a2 為例。我們可以把其看成二維平面上的乙個點 a 1...