多校第二场 简单排序计算
思路:先按交叉相乘之差排序好了计算即可了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <cstdlib>
#include <queue>
#include <stack>
#include <vector>
#include <ctype.h>
#include <algorithm>
#include <string>
#include <set>
#define PI acos(-1.0)
#define maxn 210
#define INF 0x7fffffff
#define eps 1e-8
#define MOD 1000000009
typedef long long LL;
typedef unsigned long long ULL;
using namespace std;
struct ques
{
LL t,s;
} q[100005];
bool cmp(ques a,ques b)
{
return a.s*b.t-a.t*b.s>0;
}
int main()
{
int tot;
scanf("%d",&tot);
for(int i=0; i<tot; i++)
scanf("%I64d",&q[i].t);
for(int i=0; i<tot; i++)
scanf("%I64d",&q[i].s);
sort(q,q+tot,cmp);
long long tt=0;
long long ans=0;
for(int i=0; i<tot; i++)
{
tt+=q[i].t;
ans+=tt*q[i].s;
}
printf("%I64d\n",ans);
return 0;
}
浙公网安备 33010602011771号