BZOJ 3119 Book (贪心+数学推导)
BZOJ 3119 Book (貪心+數學推導)
手動博客搬家: 本文發表于20191029 22:49:41, 原地址https://blog.csdn.net/suncongbo/article/details/78388925
URL: http://www.lydsy.com/JudgeOnline/problem.php?id=3119
題目大意:
給定一個序列v[]的長度n (n<=1e5), 第一個元素的值p以及序列中所有元素的和m (m在long long范圍內), 規定對于任意的2<=i<=n, 都有v[i]=v[i-1]+a或v[i]=v[i-1]-b, 同時給定a,b, 確定一組可能的v[]至并輸出。
思路分析:
為了方便起見,先將b變為輸入數的相反數(即變為一個負數)。
首先,考慮初始值x造成的影響: 它使得1至n的序列所有元素增加了x, 因此可以將這個值剔除,這樣和變成了\(m-np\).
其次,考慮第i個元素的值v[i]=v[i-1]+a造成的影響: 它使得i至n的序列中所有元素增加了a,使總和增加了\((n+1-i)a\).
同理可得,若v[i]=v[i-1]+b (b為負數)則使總和增加了\((n+1-i)b\)
在這里,我們稱這次賦值對總和產生了\((n+1-i)\)點影響。
顯然,所有的賦值對總和一共產生了\(\sum_{i=2}^n (n+1-i)=\sum_{i=1}^{n-1} i=\frac{1}{2}n(n-1)\)點影響。設其中+a產生的影響為x點,+b產生的影響為y點。由剛才的結論得:\[x+y=\frac{1}{2}n(n-1)\]\[xa+yb=m-nx\]
解二元一次方程組可得\[x=\frac{1}{2}n(n-1)-y\]\[y=\frac{\frac{1}{2}an(n-1)-m+np}{a-b}\]
于是只需構造方案即可。這一步比較簡單??梢杂秘澬膩韺崿F。
我們的目標是在1至n得正整數范圍內找到一些互不相同數使得他們的和恰好是x,其余的數的和恰好是y, 因為\(x+y=\frac{1}{2}n(n-1)\).因此,我們只需選出和為x的部分??紤]到\[1=1\]\[2=2, 3=2+1\]\[4=3+1, 5=3+2, 6=3+2+1\]\[7=4+3, 8=4+3+1, 9=4+3+2, 10=4+3+2+1\]\[...\]
注:第i行能用的最大的數是i.
因此,我們得到一種貪心策略: 從n開始,從大到小依次選擇,如果剩余的x能夠選上i就選,并且x-=i, 直至x==0為止,剩余的就是y.
若為x, 則v[i]=v[i-1]+a; 否則v[i]=v[i-1]+b (b<0)
但由于對總和產生了i點影響的是(n+i-1)號決策,因此輸出時勿忘倒著輸出。
代碼實現:
(Memory: 920KB; Time: 376MS; Code: 614B)
總結
以上是生活随笔為你收集整理的BZOJ 3119 Book (贪心+数学推导)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU 2795 Billboard (
- 下一篇: BZOJ 1101 Luogu P345