Stas and the Queue at the Buffet
题意:
有 n 个人,n 行a b,每个人都有一个不满意度。第 i 个人在 x 位置的的不满意度为 ai*(x−1)+bi*(n−x),可以任意更换位置,求最小的不满意度。
题解:
将公式 a*(x−1)+b*(n−x) 化简一下就变为 (a-b)*x+b*n-a,因为a,b,n都是定值所以按照(a-b)的值从大到小排序,求出来的就是最小值
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<bitset>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#define mod 1000000007
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;
struct node
{
ll a,b;
ll s;
bool operator <(const node &w) const
{
return s>w.s;
}
}q[maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%I64d%I64d",&q[i].a,&q[i].b);
q[i].s = q[i].a-q[i].b;
}
sort(q+1,q+n+1);
ll ans = 0;
for(int i=1; i<=n; i++)
ans += q[i].a*(i-1)+q[i].b*(n-i);
printf("%I64d\n",ans);
return 0;
}