题目链接:hdu 4882 ZCC Loves Codefires
题目大意:就是CF的比赛,根据时间的推迟会相应的扣掉题目的分数,问说最少扣几分。
解题思路:相邻交换法,判断两个题目之间的比率确定前后位置。
#include
#include
#include
using namespace std; const int maxn = 1e5+5; typedef __int64 ll; struct state { ll e, k; }s[maxn]; int n; bool cmp (const state& a, const state &b) { return a.e * b.k < a.k * b.e; } int main () { while (scanf("%d", &n) == 1 && n) { for (int i = 0; i < n; i++) scanf("%I64d", &s[i].e); for (int i = 0; i < n; i++) scanf("%I64d", &s[i].k); sort(s, s + n, cmp); ll ans = 0, t = 0; for (int i = 0; i < n; i++) { t += s[i].e; ans += s[i].k * t; } printf("%I64d\n", ans); } return 0; }