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.
Input
* Line 1: N
-
Lines 2…N+1: The location of each cow (in the range 0…1,000,000,000).
Output There are five cows at locations 1, 5, 3, 2, and 4. Sample Input 5
1
5
3
2
4
Sample Output
40
这个题其实并不难,放在贪心里,但我没用到贪心,只是用平常方法来做。当然,这个题肯定不会这么简单,有一个很重要的点就是超时问题,单纯用双循环肯定会超时,
我们可以得到以下的形式
01234
10123
21012
32101
43210
WA的
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std
;int main(){
int n;
long long int a[10010];
long long int c=0;
cin>>n;
for(int i=0;i<n;++i)
cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(a[i]>=a[j])
c+=a[i]-a[j];
else
c+=a[j]-a[i];
}
cout<<c;
return 0;
}
经过简化 就可以写出来AC的
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
int n;
long long int a[10010];
long long int c=0;
cin>>n;
for(int i=0;i<n;++i)
cin>>a[i];
sort(a,a+n);
for(int i=1;i<n;i++)
{
c+=(a[i]-a[i-1])*i*(n-i)*2;
}
cout<<c;
return 0;
}