Codeforces Round #553 (Div. 2) D. Stas and the Queue at the Buffet 贪心+公式转化

题意 给出n个pair (a,b) 把它放在线性序列上 1--n 上 使得  sum(a*(j-1)+b*(n-j))  最小

思路 :对式子进行合并 同类项 有:    j*(a-b)+  (-a+b*n) 可以发现   只和第一项有关  所以把a-b小的和大的j 结合即可

比赛的时候被B搞得心态爆炸就开始乱搞了 实际上已经试过a-b 了但是不知道为啥没有过样例 也怪自己不冷静 冷静一推也就是半分钟的事情

 #include<bits/stdc++.h>
#define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;i++)
#define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr))
#define F first
#define S second
#define pii pair<int ,int >
#define mkp make_pair
#define pb push_back
#define arr(zzz) array<ll,zzz>
using namespace std;
#define ll long long
const int maxn=3e5+;
const int inf=0x3f3f3f3f;
vector<pii>v;
int main(){
int n;
scanf("%d",&n);
for(int i=;i<n;i++){
int a,b;
scanf("%d%d",&a,&b);
v.pb(mkp(a,b));
}
sort(v.begin(),v.end(),[&](pii a,pii b)->bool{
return a.F-a.S>b.F-b.S;
});
ll ans=; for(int i=;i<n;i++){
ans+=1ll*v[i].F*(i)+1ll*v[i].S*(n-i-);
}
cout<<ans<<endl; return ;
}
上一篇:Mongodb 之insert瞬时完成,测试数据---飞天博客


下一篇:驱动之路-platform简例按键驱动☆☆☆