2020_CCPC長春L題 Coordinate Paper Exgcd貪心

2020 CCPC Changchun gym102832L

題意
鏈接:點我點我
你需要構造出一個長度爲 \(n\) 的序列滿足以下三個條件:

  1. \(a_i\ge 0\)
  2. \((\sum_{i=1}^na_i)=s\)
  3. 對於任意 \(i\ge 2,\; a_i=a_{i-1}+1\) 或者 \(a_i=a_{i-1}-k\)

\(1\le n,k\le 1e5,1\le s\le 1e18\)

思路
首先假設當 \(i\ge 2\) 的時候恆定有 \(a_i=a_{i-1}+1\) 成立,現在需要選出幾個特殊的下標 \(i\)\(a_i=a_{i-1}-k\) ,其他下標依然滿足 \(a_i=a_{i-1}+1\)

如果第 \(i\) 個數轉爲特殊下標的話,序列的權值和會減少 \((n-i+1)*(k+1)\) .
修改操作只會讓序列權值和減少,如果初始時一定要保證序列權值和大於等於 \(s\) 纔行。

所以初始 \(a_1\) 至少等於最小的非負整數 \(ansL\) 滿足 \(\frac {(a_1+a_1+n-1)*n}{2}\) 大於等於 \(s\) ,令 \(c=\frac {(a_1+a_1+n-1)*n}{2}-s\) .
如果 \(c=0\) 直接輸出解即可。

所以現在只有兩種操作:

  1. \(a_1=a_1+1\) ,權值和加 \(n\)
  2. 選擇一個 \(i(2\le i\le n)\) ,令 \(a_i=a_{i-1}-k\) ,權值和減少 \((n-i+1)*(k+1)\) 且每個 \(i\) 只能被選中一次。

求出一組合法解 \((a,b)\) 滿足 \(c+b*n = (k+1)*a\)\(a\le \frac {n*(n-1)}2\) 即可。
使用擴展歐幾里得求出 \(a\) 的最小非負整數解即可還原出整個數組來,但是要滿足 \(a_i\le 0\)
又因爲最小非負整數解是一組通解,所以我還可以得到任意多組解,包括 \(a\) 的次小非負整數解。

實測只需要使用 \(a\) 的最小非負整數解和次小非負整數解即可通過本題。

使用 \(a\) 還原數組的過程就是儘可能選擇小的下標進行操作2。

AC_CODE
點我點我

My approach to 2020 Changchun by Shanghai JTU Problem L is as follows:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章