c++(函数简写,sort排序,前端和)

牛客寒假集训营1:小朋友玩游戏

#include <bits/stdc++.h>   //c++万能头文件
using namespace std;
#define rep(i,a,n) for(int i=a;i<=n;i++)  //函数简写
/*bool cmp(int xx,int yy){
    return xx>yy;
}*/  //cmp可替代greater<int>()
int va[10010], vb[10010];
int suma[10010], sumb[10010];
int T, A, B, n;
int main() {
    cin >> T; //scanf("%d",&T);
    while (T--) {
        cin >> A >> B >> n;
        rep(i, 1, A) cin >> va[i];
        rep(i, 1, B) cin >> vb[i];
        int maxb = min(B / 2, n);
        if (maxb + A < n) {
            puts("-1");
            continue;
        }
        sort(va + 1, va + A + 1, greater<int>()); //排好序  下面遍历各种前端和的情况求最大幸福度
        sort(vb + 1, vb + B + 1, greater<int>());
        rep(i, 1, A) suma[i] = suma[i - 1] + va[i];    //一维数组前端和
        rep(i, 1, B) sumb[i] = sumb[i - 1] + vb[i];
        int ans = -1;              //不熟了开始
        rep(ia, 0, A) {
            int ib = n - ia;
            if (ib > maxb || ib < 0)
                continue;
            else
                ans = max(ans, suma[ia] + sumb[ib]);
        }
        cout << ans << endl;
    }
}

上一篇:vb.net 生成guid的维一的8位标识码


下一篇:5大UX设计谬论,如何去补救?