D. Stas and the Queue at the Buffet
思路:
(i-1)*ai+(n-i)*bi = i*(ai-bi)+(bi*n-ai);
所以将ai-bi从大到小排序就好了(当时想到了贪心,却没想到公式化简)。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 300300;
typedef long long LL;
LL a[maxn],b[maxn],c[maxn];
int main(void)
{
int n,i,j;
LL ans = 0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%lld%lld",&a[i],&b[i]);
c[i] = a[i]-b[i];
ans+=(b[i]*n-a[i]);
}
sort(c+1,c+1+n);
for(i=n;i>=1;i--){
ans+=(c[i]*(n-i+1));
}
printf("%lld\n",ans);
return 0;
}