https://codeforces.com/contest/1749/problem/C

题意
给定一个长度为 n 的数组 a[]。
游戏开始之前,Alice 选择一个数字 k,表示进行 k 轮游戏。

每一轮 Alice 和 Bob 各对数组 a[] 操作一次:

  • 如果当前是第 i 轮的话,Alice 必须删掉一个小于等于 k-i+1 的数;
  • 然后,如果数组非空的话,Bob 选择一个数使其加上 k-i+1

如果到某一轮 Alice 无法操作(剩下元素都比 k-i+1 大 或者 数组为空),Alice 输。
如果 k 轮结束 Alice 都没有输的话,Alice 就赢。

Bob 尽量不让 Alice 赢。如果两者都采取最佳操作,问 Alice 能赢的最大 k 为多少?

1 ≤ t ≤ 100 , 1 ≤ n ≤ 100 , 1 ≤ a i ≤ n 1≤t≤100,\ 1 \le n \le 100,\ 1 \le a_i \le n 1≤t≤100, 1≤n≤100, 1≤ai​≤n

思路
也就是说,第 1 轮 Alice 删掉 ≤ k 的一个数,Bob 让一个数加上 k;第二轮 Alice 删掉 ≤ k-1 的一个数,Bob 让一个数加上 k-1;…

一开始想的是,假设当前 Alice 要删掉 ≤ k 的数,她肯定会删掉剩下的数中小于等于 k 的最大的数,把较小的数剩下留着下面的轮次再删(因为下面轮次要删的数会更小)。
然后就想,Bob 会阻止 Alice 执行 k 轮,那么 Bob 就要操作她下一轮能够删掉的数(小于等于 k-1 的最大的数),让她下一轮操作不了,那她就输。
其实 Bob 的这种想法并不是最优的。因为最后 Alice 如果要赢的话一定要操作满 k 轮,而最后一轮 Alice 一定要删掉一个小于等于 1 的数,如果 Bob 在前几轮能够直接阻击掉 Alice 所有最终要删掉的 1,那么 Alice 最后无论如何都不能赢。所以 Bob 的最佳操作应该是,在每一轮操作时,都操作搞掉一个 1。

那么,如果 k 大于数列中 1 的个数 cnt 的话,所有的 1 都会被 Bob 搞掉,Alice 最后一轮无法操作,必输。
所以就只需要枚举 1~cnt,看 Alice 是否每一轮都能操作。

其实发现,如果 k 比较大的时候 Alice 能赢的话,k 比较小的时候一定也能赢,具有二段性,可以二分。
时间复杂度可以优化到O(Tnlognlogn)。(甚至有O(Tnlogn)和O(Tn) 的做法)

#include<bits/stdc++.h>
using namespace std;#define Ios ios::sync_with_stdio(false),cin.tie(0)const int N = 200010, mod = 1e9+7;
int T, n, m;
int a[N];bool check(int k)
{multiset<int> st;for(int i=1;i<=n;i++) st.insert(a[i]);for(int i=k;i>=1;i--){auto it = st.upper_bound(i);if(it == st.begin()) return 0;it --;st.erase(it);if(st.size()){it = st.begin();int x = *it;st.erase(it);st.insert(x + i);}}return 1;
}signed main(){Ios;cin >> T;while(T--){cin >> n;int cnt = 0;for(int i=1;i<=n;i++){cin >> a[i];if(a[i] == 1) cnt ++;}int l = 0, r = cnt;while(l < r){int mid = l + r + 1 >> 1;if(check(mid)) l = mid;else r = mid - 1;}cout << l << endl;
//      int maxa = 0;
//      for(int k=1;k<=cnt;k++) if(check(k)) maxa = max(maxa, k);
//      cout << maxa << endl;}return 0;
}

CF - C. Number Game(思维,博弈)相关推荐

  1. CodeForces - 594A Warrior and Archer(思维+博弈)

    题目链接:点击查看 题目大意:给出n个坐标轴上的点,两个人轮流操作,每次取走其中的一个点,直到最后剩余两个点为止,Vova先手,Vova希望两个点的距离尽可能小,Lesha希望两个点的距离尽可能大,问 ...

  2. surreal number(不平衡博弈的一类解决方法)

    近期复习博弈论,以前一直不会surreal number.现在回去看了看,利用几篇博客: 博客 国家队论文 初步了解了surreal num(超实数),大概可以用来解决一些较裸的不平等博弈的题目(=, ...

  3. 创业与投资的思维博弈均衡,是创投长期成功之道

    2015年被普遍视为中国企业服务创业元年,自2015年至今三年来出现了不少优秀的企业服务创业案例.在2018年初的时候,专注于中国企业服务创投服务的咨询机构.定位于中国TMT产业升级与融合加速器钛资本 ...

  4. 2019牛客暑期多校训练营(第七场)D Number(思维)

    链接:https://ac.nowcoder.com/acm/contest/887/D 来源:牛客网 题目描述 I have a very simple problem for you. Given ...

  5. 【CodeForces - 768C】Jon Snow and his Favourite Number(思维,技巧,套路,数学异或,循环节,trick)

    题干: Jon Snow now has to fight with White Walkers. He has n rangers, each of which has his own streng ...

  6. 打表+dp思维+博弈

    E. Sending a Sequence Over the Network 应该属于一个经典dp,可惜我没做出来... 思路:对于一个数字来说,它可以向左扩展,也可以向有扩展. 设计状态:f[i]表 ...

  7. Educational Codeforces Round 73 (Rated for Div. 2) E. Game With String 思维博弈 好题(2500)

    传送门 文章目录 题意: 思路: 题意: 思路: 我们将每一段...拿出来看成若干段,将其分成以下四种情况: (1)len<b(1)len<b(1)len<b (2)b≤len< ...

  8. codeforces 768 C. Jon Snow and his Favourite Number(思维+暴力)

    题目链接:http://codeforces.com/contest/768/problem/C 题意:给出n个数,k个操作,和一个x,每次操作先排序然后对奇数位数进行xor x操作,最后问k次操作后 ...

  9. CF - D. Letter Picking(博弈 + 区间dp)

    https://codeforces.com/problemset/problem/1728/D 题意 给定长度为 n 的字符串 S,n 为偶数.Alice 和 Bob 初始分别都有一个空串. 现在 ...

最新文章

  1. jsp 实栗 jsp + jdbc 登录
  2. 比JD-GUI还要好用的Luyten
  3. mybatis 配置文件中set丢失逗号
  4. 腾讯老照片修复算法开源,细节到头发丝,3种预训练模型可下载 | GitHub热榜
  5. linux 找出耗io的,linux根据io消耗找进程
  6. html表格固定行高_Excel表格向Word复制不变形,Word表格向Excel复制不变形,一次全掌握。...
  7. libinject的编译
  8. leetcode 959. 由斜杠划分区域(并查集)
  9. 弹窗进度条_QQ 大更新!语音进度条来了,还有这 5 个新变化
  10. 使用Nginx反向代理来实现简单的负载均衡
  11. 大数——大数相加(hdu1002)
  12. angularjs自动加载和手动加载
  13. 几个北大和南开学霸公众号,值得学习
  14. jquery的deferred使用详解
  15. 【解决】Windows Mobile 6 Professional SDK Refresh.msi 在xp上一直卡死
  16. ElastcSearch的Mapping映射建立
  17. 关于SESSION如何产生,由谁产生,保存位置的记录
  18. 破解版的ABBYY FineReader OCR文字识别软件,真的好用吗?
  19. 关于游戏,能戒就戒吧
  20. 《操作系统真象还原》从零开始自制操作系统 自写源码实现 (fs相关文件)

热门文章

  1. 安装mysql3306被占用_安装mysql提示3306端口已经被占用解决方案
  2. 杀毒软件智能主动防御的软肋——无驱恢复系统SSDT表
  3. 程序员哭诉:面试被头条HR人身攻击,说我长相让他失望,被打击
  4. [从头学绘画] 第18节 六十四式八卦掌 (49-56)
  5. 用python写一个图形界面!
  6. 2018第九届蓝桥杯JavaB组省赛真题及详解
  7. macos命令行启动docker服务
  8. css 中ex,规格 - css'ex'单位的价值是多少?
  9. 老叶 mysql_老叶观点:MySQL开发规范之我见
  10. Flash Builder 4.5下载地址与注册码