【BZOJ】1679: [Usaco2005 Jan]Moo Volume 牛的呼声(数学)
http://www.lydsy.com/JudgeOnline/problem.php?id=1679
水題沒啥好說的。。自己用筆畫畫就懂了
將點(diǎn)排序,然后每一次的點(diǎn)到后邊點(diǎn)的聲音距離和==(n-i)*(a[i+1]-a[i])+之前同樣操作所得的的sum
然后答案就是累加后×2
#include <cstdio> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <algorithm> using namespace std; #define rep(i, n) for(int i=0; i<(n); ++i) #define for1(i,a,n) for(int i=(a);i<=(n);++i) #define for2(i,a,n) for(int i=(a);i<(n);++i) #define for3(i,a,n) for(int i=(a);i>=(n);--i) #define for4(i,a,n) for(int i=(a);i>(n);--i) #define CC(i,a) memset(i,a,sizeof(i)) #define read(a) a=getint() #define print(a) printf("%d", a) #define dbg(x) cout << #x << " = " << x << endl #define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; } inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; } inline const int max(const int &a, const int &b) { return a>b?a:b; } inline const int min(const int &a, const int &b) { return a<b?a:b; } const int N=10005; int n; long long ans, sum[N], a[N]; int main() {read(n);for1(i, 1, n) scanf("%lld", &a[i]);sort(a+1, a+1+n);for3(i, n, 1) { sum[i]=(n-i)*(a[i+1]-a[i])+sum[i+1]; ans+=sum[i]; }printf("%lld", ans<<1);return 0; }?
?
?
?
Description
Farmer John has received a noise complaint from his neighbor, Farmer Bob, stating that his cows are making too much noise. FJ's N cows (1 <= N <= 10,000) all graze at various locations on a long one-dimensional pasture. The cows are very chatty animals. Every pair of cows simultaneously carries on a conversation (so every cow is simultaneously MOOing at all of the N-1 other cows). When cow i MOOs at cow j, the volume of this MOO must be equal to the distance between i and j, in order for j to be able to hear the MOO at all. Please help FJ compute the total volume of sound being generated by all N*(N-1) simultaneous MOOing sessions.
約翰的鄰居鮑勃控告約翰家的牛們太會叫. 約翰的N(1≤N≤10000)只牛在一維的草場上的不同地點(diǎn)吃著 草.她們都是些愛說閑話的奶牛,每一只同時與其他N-1只牛聊著天.一個對話的進(jìn)行,需要兩只牛都按照和她們間距離等大的音量吼叫,因此草場上存在著 N(N-1)/2個聲音.??請計算這些音量的和.Input
* Line 1: N * Lines 2..N+1: The location of each cow (in the range 0..1,000,000,000).
第1行輸入N,接下來輸入N個整數(shù),表示一只牛所在的位置.Output
* Line 1: A single integer, the total volume of all the MOOs.
一個整數(shù),表示總音量.Sample Input
51
5
3
2
4
INPUT DETAILS:
There are five cows at locations 1, 5, 3, 2, and 4.
Sample Output
40OUTPUT DETAILS:
Cow at 1 contributes 1+2+3+4=10, cow at 5 contributes 4+3+2+1=10, cow at 3
contributes 2+1+1+2=6, cow at 2 contributes 1+1+2+3=7, and cow at 4
contributes 3+2+1+1=7. The total volume is (10+10+6+7+7) = 40.
HINT
Source
Silver
總結(jié)
以上是生活随笔為你收集整理的【BZOJ】1679: [Usaco2005 Jan]Moo Volume 牛的呼声(数学)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【 Grey Hack 】万金油脚本:路
- 下一篇: 函数式编程思想概论