原题链接:

Problem - C - Codeforces

题目描述:

Alice and Bob are playing a game. They have an array of positive integers aa of size nn.

Before starting the game, Alice chooses an integer k≥0k≥0. The game lasts for kk stages, the stages are numbered from 11 to kk. During the ii-th stage, Alice must remove an element from the array that is less than or equal to k−i+1k−i+1. After that, if the array is not empty, Bob must add k−i+1k−i+1 to an arbitrary element of the array. Note that both Alice's move and Bob's move are two parts of the same stage of the game. If Alice can't delete an element during some stage, she loses. If the kk-th stage ends and Alice hasn't lost yet, she wins.

Your task is to determine the maximum value of kk such that Alice can win if both players play optimally. Bob plays against Alice, so he tries to make her lose the game, if it's possible.

Input

The first line contains a single integer tt (1≤t≤1001≤t≤100) — the number of test cases.

The first line of each test case contains a single integer nn (1≤n≤1001≤n≤100) — the size of the array aa.

The second line contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤n1≤ai≤n).

Output

For each test case, print one integer — the maximum value of kk such that Alice can win if both players play optimally.

题目大意:

给定n个数,游戏规则如下:在开始游戏之前,Alice选择一个整数k≥0。游戏进行k回合,每一回合开始Alice先选择一个小于等于k-i+1的数,将其删除,然后Bob选择一个数加上k-i+1,一回合结束,如果Alice在某个阶段无法删除元素,她将失败。如果第k阶段结束,爱丽丝还没有输,她就赢了。请问两边都选择最优策略时,要保证Alice胜利,k最大可以为多少?

解题思路:

最优策略很明显:每回合Alice选择当前能删除的最大的数,而Bob则选择当前最小的数给其加上k-i+1,我们可以看到,题目给出的数据非常的小,而且时间限制也给的很宽,所以我们完全可以从大到小暴力枚举k,模拟两人的最优策略,具体细节参考代码。

代码(CPP):

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 110;
const int INF = 0x3fffffff;
int n, vis[maxn], a[maxn];signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout << fixed;cout.precision(18);int t;cin >> t;while (t--){cin >> n;for (int i = 1; i <= n; i++)cin >> a[i];// 枚举找最大的kfor (int k = n; k >= 0; k--){bool flag = true;memset(vis, 0, sizeof vis);// 游戏进行k个回合for (int i = 1; i <= k; i++){int mx = 0, x = -1, y = -1;// Alice的最优策略是找到当前能删除的最大数(小于等于k-i+1的最大的数)for (int j = 1; j <= n; j++){if (!vis[j] && a[j] <= k - i + 1 && a[j] > mx){mx = a[j];x = j;}}// 如果这一轮Alice没有能够删除的数,则Alice失败if (x == -1){flag = false;break;}// 找到能删除的最大的数了,删除掉vis[x] = true;// Bob的最优策略是找到最小的数字加上k-i+1int mn = 110;for (int j = 1; j <= n; j++){if (!vis[j] && a[j] < mn){mn = a[j];y = j;}}if(y != -1)vis[y] = true; // 等价于a[y] += k = i + 1;}if (flag)  // Alice胜利{cout << k << endl;break;}}}return 0;
}

Educational Codeforces Round 138 (Rated for Div. 2) C. Number Game 解题报告相关推荐

  1. Educational Codeforces Round 138 (Rated for Div. 2)-赛后总结

    Dashboard - Educational Codeforces Round 138 (Rated for Div. 2) - Codeforces 总结一个教训就是不要心急,特别是对于一些题目, ...

  2. Educational Codeforces Round 138 (Rated for Div. 2) D

    Educational Codeforces Round 138 (Rated for Div. 2) D. Counting Arrays 题意 给定长度为nnn的数组aaa,若gcd(ai,i)= ...

  3. Educational Codeforces Round 138 (Rated for Div. 2) A~D

    比赛链接:Dashboard - Educational Codeforces Round 138 (Rated for Div. 2) - Codeforces 目录 A. Cowardly Roo ...

  4. Educational Codeforces Round 138 (Rated for Div. 2)

    文章目录 一.A. Cowardly Rooks 二.B - Death's Blessing 三.C - Number Game 四.D - Counting Arrays 四.E - Cactus ...

  5. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  6. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  7. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  8. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  9. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

最新文章

  1. ISME:广东土壤所孙蔚旻组-脱硫弧菌介导的硫氧化锑还原耦合作用
  2. python3语法手册_Python3 学习手册每日更新
  3. MySQL 中的三中循环 while loop repeat 的基本用法
  4. 如何统计JAVA网站访问次数并获得访问者IP
  5. python模拟购物车购物过程_Python基于数列实现购物车程序过程详解
  6. 【深度学习】12张高清思维导图,总结深度学习
  7. MySQL压测工具--sysbench
  8. java中怎么表示数组中的某个值_java中如何高效判断数组中是否包含某个特定的值...
  9. 1个平方大概多少立杆_普通水泥地面一平方大概要用多少地板漆
  10. pip 安装 sklearn 教程
  11. 个体营业执照与公司营业执照的区别
  12. Android 修改手机状态栏文字颜色
  13. Python爬虫-字体反爬-猫眼国内票房榜
  14. X86加装PCIE网卡无法访问ESXi的问题
  15. StarUML 3 中文文档 包图
  16. 燕文物流完成上市辅导:董事长周文兴持股30%,曾因丢失邮件被批
  17. TeX 家族(TeX, XeTeX, LuaTeX,XeLaTeX …看完这篇就懂了)
  18. 什么是NoSQL数据库
  19. Pycharm激活当前虚拟环境本身的安装包空间
  20. 理解Servlet和Servlet容器、Web容器等概念

热门文章

  1. Agronomy | 3.9分JCR1区微生物组专刊征稿/37天见刊-毕业神器(刘永鑫/于鹏)
  2. Server 2012 网卡teaming 和 cisco 交换机配置, network card teaming
  3. 专家指南|18 个会杀死初创公司的错误
  4. pta——大笨钟的心情,稳赢,统计一行文本的单词个数(c语言)
  5. 大地坐标系转换为地心空间直角坐标系
  6. 可靠性form matlab 求解,含风电场电力系统的可靠性评估Matlab程序
  7. 关注女性健康,分享 echarts 绘制女性体温表源码
  8. 【简答网页】【网页进阶】【网页设计与网站开发HTML、CSS、JavaScript】【第 8 章】网页基础与工具使用1——实验作业
  9. 【初级】个人分享Vue前端开发教程笔记 | 打卡每天一份劝退技能
  10. 达观数据智能工单处理,助力运营商实现业务流程智能化改造