zoukankan      html  css  js  c++  java
  • CF388C Fox and Card Game

    基于观察可以发现,双方都一定能保证取到每一列靠近自己的 (lfloor frac{k}{2} floor) 个元素。

    那么一旦一个人想要取另一个人能必然能取的部分,另一个人必然可以不让其取到。

    因此,一个人去取对方一定能取到的部分是无意义的。

    因此双方的策略必然都是先将靠近自身的 (lfloor frac{k}{2} floor) 个元素取完,在抢中间剩下的元素。

    那么对于最后剩下的元素,每次贪心的选择一定是最优的,因此双方的选择必然都是每次选取当前最大的元素。

    那么我们按照这个流程模拟即可,复杂度 (O(sum s_i + n log n))

    #include <bits/stdc++.h>
    using namespace std;
    #define rep(i, l, r) for (int i = l; i <= r; ++i)
    #define dep(i, l, r) for (int i = r; i >= l; --i)
    const int N = 100 + 5;
    int n, m, s, x, A, B, a[N];
    int read() {
        char c; int x = 0, f = 1;
        c = getchar();
        while (c > '9' || c < '0') { if(c == '-') f = -1; c = getchar();}
        while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
        return x * f;
    }
    int main() {
        n = read();
        rep(i, 1, n) {
            s = read();
            if(s & 1) {
                rep(j, 1, s / 2) A += read();
                a[++m] = read();
                rep(j, 1, s / 2) B += read();
            }
            else {
                rep(j, 1, s / 2) A += read();
                rep(j, 1, s / 2) B += read();
            }
        }
        sort(a + 1, a + m + 1);
        dep(i, 1, m) {
            if((m - i + 1) & 1) A += a[i];
            else B += a[i];
        }
        printf("%d %d", A, B);
        return 0;
    }
    
    GO!
  • 相关阅读:
    vuex入门
    element-UI快速上手例子运行失败
    Fix协议
    KDB+
    GO基础知识(基础数据类型之字符串、常量)
    如何实现一个通用的、高性能的排序函数
    线性排序(如何根据年龄给100万用户数据排序)
    【转】OpenResty 究竟解决了什么痛点
    idea项目常用的设置
    php站点ajax请求返回数据异常处理的经历
  • 原文地址:https://www.cnblogs.com/Go7338395/p/13845164.html
Copyright © 2011-2022 走看看