BZOJ 1679 [Usaco2005 Jan]Moo Volume 牛的呼声
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ 1679 [Usaco2005 Jan]Moo Volume 牛的呼声相关的知识,希望对你有一定的参考价值。
解法1:
N^2的暴力程序,卡卡常数就过了。
#include <cstdio> #include <algorithm> #include <cmath> int n; int a[10005]; long long tot; inline bool Read(int &ret){ char c; int flag = 1; if(c=getchar(),c==EOF) return 0; while(c!=‘-‘ && (c<‘0‘||c>‘9‘)) c=getchar(); flag = (c==‘-‘) ? -1 :1; ret = (c==‘-‘) ? 0 : (c-‘0‘); while(c=getchar(),c>=‘0‘&&c<=‘9‘) ret=ret*10+(c-‘0‘); ret*=flag; return 1; } int main(){ Read(n); for(register int i=1;i<=n;++i){ Read(a[i]); for(register int j=1;j<i;j++){ tot+=abs(a[j]-a[i]); } } tot*=2; printf("%lld\n",tot); return 0; }
解法2:
排序后,每段距离的对答案的贡献值是 左边的牛×右边的牛。
#include <iostream> #include <algorithm> #include <cmath> #include <cstdio> #include <cstdlib> #define LL long long using namespace std; int n,a[10005]; int main() { scanf("%d",&n); for (int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+1+n); LL ans=0; for (int i=2;i<=n;i++) { ans=ans+(long long )(a[i]-a[i-1])*((i-1)*(n+1-i)); } cout<<ans*2<<endl; return 0; }
以上是关于BZOJ 1679 [Usaco2005 Jan]Moo Volume 牛的呼声的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ 1679 [Usaco2005 Jan]Moo Volume 牛的呼声
[BZOJ1677][Usaco2005 Jan]Sumsets 求和
bzoj 1677: [Usaco2005 Jan]Sumsets 求和
bzoj1737[Usaco2005 jan]Naptime 午睡时间