TJOI2018 教科書般的褻瀆

2022-03-07 02:54:45 字數 2460 閱讀 2212

首先,認真讀題不難發現若血量的區間 \([1,m_i]\) 連續,則只需要一張褻瀆就可以殺死區間 \([1,m_i]\) 內所有怪物,所以 \(k = m+1\)。

考慮到這點,我們就可以輕鬆的寫出式子(保證 \(a_i\) 公升序):

定義 \(a_0 = 0\),有

\[\large ans = \sum\limits_^\left(\sum\limits_^}j^-\sum\limits_^m(a_j-a_)^\right)

\]寫出了這個式子,如果你知識面不足的話,就沒有然後了(至少像我這種蒟蒻是這樣的)。

只需知道 \(\sum\limits_^}j^\) 是乙個 \(m+2\) 次的多項式,這個式子就可以算了。

\(\sum\limits_^i^n\) 是 \(n+1\) 次多項式好像是乙個比較常用的結論,但我本人並沒有找到網路上的證明,所以嘗試著自己證了一下。

大量公式警告

定義:\[f(x) = \sum\limits_^i^n

\]不失一般性,直接考慮 \(n\) 的情況。

設 \(g(x) = x^\)。

對每一項 \(g(x)\) 使用二項式定理展開:

\[\begin

&g(x)=(x-1)^+\tbinom(x-1)^n\cdots+\tbinom(x-1)+\tbinom\\

&g(x-1)=(x-2)^+\tbinom(x-2)^n\cdots+\tbinom(x-2)+\tbinom\\

&\cdots\cdots\\

&g(1) = 1^

\end\]

將上述式子全部合併起來有:

\[\sum\limits_^x}=\sum\limits_^\sum\limits_^\tbinom(x-i)^

\]化簡有:

\[x^ = \sum\limits_^\sum\limits_^\tbinom(x-i)^

\]移項有:

\[x^ = \sum\limits_^\sum\limits_^\tbinom(x-i)^+\sum\limits_^\tbinom(x-i)^

\]\[\sum\limits_^(x-i)^n = \frac-\sum\limits_^\sum\limits_^\tbinom(x-i)^}

\]即為:

\[f(x-1)=\sum\limits_^i^n = \frac-\sum\limits_^\sum\limits_^\tbinom(x-i)^}-1

\]這個式子是乙個最高項為 \(x^\) 次多項式,即猜測成立。

綜上,\(f(x) = \sum\limits_^i^n\) 是乙個 \(n+1\) 次多項式。

\[\large ans = \sum\limits_^\left(\sum\limits_^}j^-\sum\limits_^m(a_j-a_)^\right)

\]\(\sum\limits_^}j^\) 是乙個 \(m+2\) 次的多項式所以可以用拉格朗日插值法算出來。

拉格朗日插值的式子:

\[\ell_i(k)=\prod\limits_^\frac

\]\[f(k) = l(k)= \sum\limits_^y_i\ell_i(k)

\]這樣做是 \(\mathcal(m^2)\),因為本題取值是連續的,所以可以優化到 \(\mathcal(m)\)。

優化後的式子長這樣:

\[f(k) = \sum\limits_^(-1)^y_i\frac\cdot suf_}\cdot fac_}

\]\(pre_i\),\(suf_i\),\(fac_i\) 分別是預處理出來的字首積,字尾積,階乘。

對於原式的 \(\sum\limits_^m(a_j-a_)^\) 直接暴力算就可以了。

最終的時間複雜度是 \(\mathcal(m^2)\) 的。

# include # include # include # include # include # include # include # define ll long long

# define reg register

const ll mod = 1e9+7;

int t;

ll a[55],n,m,k,fac[55],pre[55],suf[55],f[55],ans;

inline int mod(const int x)

inline int qpow(ll x,int p=1e9+5)

inline int lagrange(const int x)

int main()

for(reg int i = 2; i <= k ; ++i) f[i] = (f[i-1]+qpow(i,m+1))%mod;

for(reg int i = 1; i <= m+1 ; ++i)

printf("%d\n",ans);ans = 0;

}return 0;

}

\(\mathcal(m^2)\)

TJOI2018 教科書般的褻瀆

點此看題 首先問題可以轉化成求 i 1nim sum n i m i 1n im0x01 拉格朗日插值法 你會發現這就是板子,因為他是乙個m 1 m 1m 1次多項式,選m 2 m 2m 2個點插值就可以了。時間複雜度o m 3 o m 3 o m3 考試時候降智寫了o m 4 o m 4 o m4...

TJOI 2018 教科書般的褻瀆

題目描述 小豆喜歡玩遊戲,現在他在玩乙個遊戲遇到這樣的場面,每個怪的血量為 a i 且每個怪物血量均不相同,小豆手裡有無限張 褻瀆 褻瀆的效果是對所有的怪造成 1 點傷害,如果有怪死亡,則再次施放該法術。我們認為血量為 0 的怪物死亡。小豆使用一張 褻瀆 會獲得一定的分數,分數計算如下,在使用一張 ...

Code 7 教科書般的褻瀆

不難發現,對於所有血量的隨從都存在的情況,詢問 1,m 1,m 1,m 的答案應為 o n logn o nlogn o nlog n 級別。考慮分別維護 f if i fi 表示 i ii 點法術傷害的褻瀆造成傷害的次數。對於 i o n i leq o sqrt i o n 顯然可以直接維護未出...