[bzoj1045][HAOI2008] 糖果传递【构造】
2018-03-07 18:02
330 查看
【题目链接】
http://www.lydsy.com/JudgeOnline/problem.php?id=1045
【题解】
记X[i]X[i]为从第ii堆向第i+1i+1堆转移的数量。(第nn堆转移到11)
那么有a[i]−X[i]+X[i−1]=averagea[i]−X[i]+X[i−1]=average
X[i]=a[i]+X[i−1]−averageX[i]=a[i]+X[i−1]−average
移项得:X[1]=a[1]+X[n]−avarageX[1]=a[1]+X[n]−avarage
X[2]=a[2]+X[1]−avarageX[2]=a[2]+X[1]−avarage
=a[2]+a[1]+X[n]−2∗average=a[2]+a[1]+X[n]−2∗average
X[i]=∑ij=1a[i]−X[n]−i∗avarageX[i]=∑j=1ia[i]−X[n]−i∗avarage
记S[i]=∑ij=1a[i]−i∗avarageS[i]=∑j=1ia[i]−i∗avarage
有X[i]=S[i]−X[n]X[i]=S[i]−X[n]
ans=∑ni=1|X[n]−S[i]|ans=∑i=1n|X[n]−S[i]|
当X[n]X[n]为S[i]S[i]中位数的时候ansans取到最小值。
复杂度O(nlog2n)O(nlog2n)
同[bzoj1465][bzoj3293]
http://www.lydsy.com/JudgeOnline/problem.php?id=1045
【题解】
记X[i]X[i]为从第ii堆向第i+1i+1堆转移的数量。(第nn堆转移到11)
那么有a[i]−X[i]+X[i−1]=averagea[i]−X[i]+X[i−1]=average
X[i]=a[i]+X[i−1]−averageX[i]=a[i]+X[i−1]−average
移项得:X[1]=a[1]+X[n]−avarageX[1]=a[1]+X[n]−avarage
X[2]=a[2]+X[1]−avarageX[2]=a[2]+X[1]−avarage
=a[2]+a[1]+X[n]−2∗average=a[2]+a[1]+X[n]−2∗average
X[i]=∑ij=1a[i]−X[n]−i∗avarageX[i]=∑j=1ia[i]−X[n]−i∗avarage
记S[i]=∑ij=1a[i]−i∗avarageS[i]=∑j=1ia[i]−i∗avarage
有X[i]=S[i]−X[n]X[i]=S[i]−X[n]
ans=∑ni=1|X[n]−S[i]|ans=∑i=1n|X[n]−S[i]|
当X[n]X[n]为S[i]S[i]中位数的时候ansans取到最小值。
复杂度O(nlog2n)O(nlog2n)
/* -------------- user Vanisher problem bzoj-1045 ----------------*/ # include <bits/stdc++.h> # define ll long long # define inf 0x3f3f3f3f # define N 1000100 using namespace std; ll read(){ ll tmp=0, fh=1; char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') fh=-1; ch=getchar();} while (ch>='0'&&ch<='9'){tmp=tmp*10+ch-'0'; ch=getchar();} return tmp*fh; } ll a ,cnt,n,s ,ans,now; int main(){ n=read(); for (ll i=1; i<=n; i++) a[i]=read(), cnt+=a[i]; cnt=cnt/n; for (ll i=1; i<=n; i++) s[i]=a[i]-cnt+s[i-1]; sort(s+1,s+n+1); now=s[(1+n)/2]; for (ll i=1; i<=n; i++) ans=ans+abs(s[i]-now); printf("%lld\n",ans); return 0; }
同[bzoj1465][bzoj3293]
相关文章推荐
- BZOJ 1045 HAOI 2008 糖果传递 数学推导
- 【数学】【HAOI2008】【BZOJ1045糖果传递】【BZOJ3293分金币】论数学的重要性
- BZOJ1045 HAOI2008糖果传递
- bzoj 1045: [HAOI2008] 糖果传递【瞎搞】
- bzoj3293 [Cqoi2011]分金币&&bzoj1045 [HAOI2008]糖果传递
- bzoj 1045: [HAOI2008] 糖果传递
- BZOJ 1045 [HAOI2008]糖果传递 ★(环形等分:中位数)
- [BZOJ1045][HAOI2008][贪心]糖果传递
- bzoj3293 [Cqoi2011]分金币&&bzoj1045 [HAOI2008]糖果传递
- [BZOJ1045][HAOI2008] 糖果传递(数学相关)
- [bzoj1045][HAOI2008]糖果传递
- BZOJ 1045 [HAOI2008]糖果传递 ★(环形等分:中位数)
- 1045: [HAOI2008] 糖果传递 - BZOJ
- 【BZOJ1045】【HAOI2008】糖果传递
- bzoj 1045: [HAOI2008] 糖果传递 (数学相关)
- bzoj 1045: [HAOI2008] 糖果传递
- BZOJ1045_[HAOI2008] 糖果传递
- [BZOJ 1045] [HAOI2008] 糖果传递
- BZOJ 1045 [HAOI2008] 糖果传递
- BZOJ 1045: [HAOI2008] 糖果传递