CF.1530 Pursuit

Pursuit

链接:https://codeforces.com/contest/1530/problem/C
构造法的运用

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int N = 100010;
int ga[N], gb[N];
int pre_a[N], pre_b[N];

int main () {
    int cases; cin >> cases;
    while (cases --) {
        int n; cin >> n;
        for (int i = 1; i <= n; i++) cin >> ga[i];
        for (int i = 1; i <= n; i++) cin >> gb[i];
        int num = n - n / 4; // 目前计分的场次
        sort(ga+1, ga+n+1, greater<int>());
        sort(gb+1, gb+n+1, greater<int>());

        int sca = 0, scb = 0;
        for (int i = 1; i <= num; i++) sca += ga[i], scb += gb[i];

        if (sca >= scb) { cout << 0 << endl; continue; }
        int lev = n, pot_a = num, pot_b = num + 1;
        while (++ lev) { // 枚举之后的每一次比赛
            // 如果是4倍数,这一场不增加计分场次,把自己分数最差的换成100
            if (lev % 4 == 0) {
                sca += 100 - ga[pot_a--];
            }
            // 增加一次计分场次,自己加100,对方如果还有分,加上,没有,加0
            else {
                sca += 100;
                if (pot_b <= n) scb += gb[pot_b++];
            }
            if (sca >= scb) break;
        }
        cout << lev - n << endl;
    }
}
上一篇:【遗传算法GA】--计算函数最值(Python)


下一篇:webpack4 坑收集:html-webpack-plugin在多页面时,无法将optimization.splitChunks提取的公共块,打包到页面中