https://yukicoder.me/problems/no/821
解説
https://yukicoder.me/submissions/343365
☆の割には難しい問題に見える。順位表を見てみると、プロが5分とかで解いている。
ここから導けるのは、エスパーが必要であるということである。
プロが一瞬で思いついた自明な規則性を探していこう。
ここでちょっと気になる条件がある。
操作を0回以上K回以下行うという部分である。
K回ぴったしじゃないんだなという所から、ある程度の柔軟性がありそうだとわかる。
エスパーテク「大体全部つくれちゃう」
これが頭をよぎる。
大体全部作れちゃうとして、どの数が作れるんだろうというのを実験してみる。
N=3 1 2 3 K=0のとき1 6 K=1のとき4 6 4 2 0 K=2のとき6 6 4 2 0 -2 -4 K=3のとき7 6 4 2 0 -2 -4 -6
これをみると+3, +2, +1になってる。
怪しすぎる。
エスパーテク「なんか規則性がある」
こっちだったか。
1+(初項N,公差-1,個数Kの等差数列の総和)が答えっぽい。
tousasm(初項,公差,個数) := 初項N,公差-1,個数Kの等差数列の総和
ご丁寧にエスパー検証用サンプルがサンプル2として用意されているので、検証すると出力と合う。
提出してAC証明。
なお、KがNを超えると計算がバグるので、Kの上限はNとしておく。
ll N, K; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N >> K; chmin(K, N); ll ans = 1 + tousasm(N, -1LL, K); cout << ans << endl; }