P2345 [USACO04OPEN] MooFest G
题面
约翰的 \(n\) 头奶牛每年都会参加“哞哞大会”。
哞哞大会是奶牛界的盛事。集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等。
它们参加活动时会聚在一起,第 \(i\) 头奶牛的坐标为 \(x_i\),没有两头奶牛的坐标是相同的。
奶牛们的叫声很大,第 \(i\) 头和第 \(j\) 头奶牛交流,会发出
\(\max \{v_i,v_j\}\times |x_i − x_j |\)
的音量,其中 \(v_i\) 和 \(v_j\) 分别是第 \(i\) 头和第 \(j\) 头奶牛的听力。
假设每对奶牛之间同时都在说话,请计算所有奶牛产生的音量之和是多少。
思路
直接暴力模拟 \(O(n^2)\) 可过。
注意要开 long long
!
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,ans;
struct cow{
int v,x;
} cows[20005];
int max(int x,int y){
return x>y?x:y;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cow &ncow = cows[i];
cin>>ncow.v>>ncow.x;
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
ans+=(max(cows[i].v,cows[j].v)*abs(cows[i].x-cows[j].x));
}
}
cout<<ans<<endl;
return 0;
}