首页 > 代码库 > 多校第二场 简单排序计算

多校第二场 简单排序计算

思路:先按交叉相乘之差排序好了计算就行了。

#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;
}