10.13 模擬賽

2huk發表於2024-10-14

2024--夢熊&太戈--NOIP十三連測 #12【訂正】 - 比賽 - 夢熊聯盟 (mna.wang)

覆盤

T1 顯然不太會做。樣例 4 模擬了好久終於明白了。但是顯然不會推廣。

\(n\le2\) 是極易的。對於 \(n =3\),根據剛才模擬樣例時的一些思考,感覺好像除了樣例的 1 2 4 之外答案都是 \(1\)。於是有 \(40\) 了。

T2 是數學題,好像不難。部分分特別充足。很快放棄了衝正解。

中間有一個問題不太會做:

\((0, 0)\) 開始,每一步只能向上/下/左/右走。求恰好 \(m\) 步後走到 \((x,y)\) 的方案數。

後來繞過這個問題做出了 \(60\) 分。但是這個問題貌似也挺重要的。

T3。暴力非常不好打。跳了。

T4。為什麼 24 不是半完全冪?哦 \(a < b\)。那這簡直太困難了。

部分分。直接按照題意模擬,算不了複雜度,但是 \(10^6\) 跑過了。

提交之前想看看 \(10^8\) 要跑多長時間,結果秒出了。於是將 bool 陣列開大至 \(10^8\)。預期 \(50\)

預計 \(40+60+0+50=150\)。結果 D int 函式沒寫返回值掛 0 了。

總結

  • 好的:
    • 數學直覺還是有的。
  • 不足:
    • 做的時候有點懶散,導致 T3 的暴力分拖到了最後導致沒打。
    • 低階錯誤 int 函式無返回值。

知識點

  • T1:找規律;
  • T2:幾何,組合;

題解

A. 硬幣

\(b_i = a_{i+1}/a_i\)。將 \(b\) 升序排序。答案為 \(\max \log_{b_i}i + 1\)

B. 狼群

我們將座標系順時針旋轉 \(45^{\circ}\),得到 \((x-y,x+y)\)。這樣的好處是,原本向上下左右走都只在一個維度上發生改變,而現在必須要在兩個維度上同時發生改變。這樣我們就能將兩個維度獨立開。

即每個點現在能到達的點是 \((x\pm 1, y \pm 1)\)。每一維都必須走一步。

接下來我們考慮求解 \(f(x),g(y)\) 表示最終所有狼走到 \(x\) 這條橫線的方案數,以及 \(y\) 這條橫線的方案數。那麼即走到 \(x\) 這條橫線,也走到 \(y\) 這條豎線,就代表走到了 \((x, y)\) 這個點。即走到 \((x,y)\) 的方案數是 \(f(x) \times g(y)\)

我們要對每個點都求一個方案數再加和,即答案為 \(\sum\sum f(x) \times g(y)\)。顯然可以化簡成 \(\sum f(x) \times \sum g(y)\)。我們考慮 \(f\) 的求解。

\(h(i, j)\) 表示在數軸上從 \(i\) 走到 \(j\),每次只能向前或向後,且總步數恰好為 \(m\) 的方案數。

若能求出來 \(h\),那麼 \(f(j) = \prod_i h(x_i,j)\),即每個點在第一維上都走到 \(j\) 的方案數的乘積。因為我們只是考慮一個維度所以將其視作在數軸上移動也無妨。

於是問題是如何求解 \(h(i, j)\)

注意到,有 \(|i-j|\) 步是我們不得不走的。或者說 \(|i-j|\) 是從 \(i\) 走到 \(j\) 的最短步數。如果 \(|i-j|<m\)\(h(i, j)=0\)

同時,由於如果我們想向後走一步,那麼之後必須會有一步向前抵消這一步。也就是說若 \(|i-j|-m\) 是奇數則 \(h(i, j)=0\)

對於剩下的情況。實際上我們總共向後走多少步是可以計算的,即 \((m - |i-j|)/2\)。於是答案變成從總共 \(m\) 步中選這麼多步向後走的方案數,即 \(\dbinom m {(m - |i-j|)/2}\)