以ai - bi的值作爲排序,差值越大說明放在前面的性價比就越高,值得注意的是測試用例比較刁鑽,結果和a,b定義爲int類型是無法通過的,改成long long 類型就AC了。
#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <time.h>
#include <vector>
#include <list>
#include<iomanip>
#include<time.h>
#define N_MAX 205
#define INF (0x3f3f3f3f)
using namespace std;
struct SS
{
long long a, b;
bool operator <(const SS& s)const
{
if (a - b == s.a - s.b)
return a < s.a; //最小堆
else
return (a - b) < (s.a - s.b); //最大堆
}
};
priority_queue<SS> Data;
int main()
{
int N;
cin >> N;
long long A, B;
for (int i = 0; i < N; ++i)
{
SS save;
cin >> save.a >> save.b;
Data.push(save);
}
long long sum = 0;
for (int i = 1; i <= N; ++i)
{
sum += Data.top().a * (i - 1) + Data.top().b * (N - i);
Data.pop();
}
cout << sum;
return 0;
}