题目描述
蒜头君在玩一种卡牌游戏,他有 nn 张卡牌,每张卡牌上写着两个正整数 ai,biai,bi ,aiai 表示这张卡牌的能量值,bibi 表示这张卡牌的魔法值。
他准备一张一张打出这 nn 张卡牌,每张卡牌会对敌人造成的伤害是这张卡牌的能量值乘魔法值。但是蒜头君觉得这样把这 nn 张卡牌都出完对敌人造成的伤害之和还是不够大,所以他偷偷学会了一种仙术。
蒜头君施展一次仙术的时候会任意选择两张卡牌,把它们的魔法值交换,能量值不交换。蒜头君可以使用任意次仙术,当然也可以一次都不使用,他想知道使用了若干次仙术以后一张一张打出这 nn 张卡牌,对敌人造成的伤害之和最大是多少。
输入格式
第一行,一个正整数 n(1≤n≤105)n(1≤n≤105)。
接下来 nn 行,每行两个正整数 ai,bi(1≤ai,bi≤106)ai,bi(1≤ai,bi≤106)
输出格式
输出一行,包含一个整数,表示蒜头君使用若干次仙术以后一张一张打出卡牌,对敌人造成的伤害之和的最大值。
数据范围
对于 70%70% 的数据,1≤n≤103,1≤ai,bi≤1031≤n≤103,1≤ai,bi≤103
对于 100%100% 的数据,1≤n≤105,1≤ai,bi≤1061≤n≤105,1≤ai,bi≤106
输出时每行末尾的多余空格,不影响答案正确性
样例输入
3 1 6 3 4 5 2
样例输出
44
这是比赛的时候的难题,我今天就遇到了[哭泣],主要用数组和sort排序,属于初级难题
代码写了挺久的,给钱!!!
同学:
我:
同学:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x;
cin>>x;
long long a[x],b[x];
for(int i=0;i<x;i++)//
{
cin>>a[i]>>b[i];
}
sort(a,a+x),sort(b,b+x);//排序数组
long long sum=0;
for(int i=0;i<x;i++)
{
sum+=a[i]*b[i];
}
cout<<sum<<endl;//输出
return 0;
}