描述:

Contest Page | CodeChef

上面是原题目的地址,简要概括一下意思:Alice和Bob在玩一个填字符串的游戏,一开始Alice有n个字符,Bob也有n个字符。他们需要用这些字符填成一个长度为2n的字符串。Alice先手,并且她想要让字符串尽可能按字典序上升,Bob后手,他想让字符串尽可能地按字典序下降。

分析:

情景分析①

Alice想要让这个字符串是按字典序升序排列的,所以她的游戏策略是:要让现在字符串当中最小下标的空位,被现在能够用于填充的(也就是Alice和Bob手上拿着的那些没有填的字符)最小字符填充;同样的,现在在字符串当中下标最大的空位,被现在能够用于填充的最大字符串填充。同样的道理,Bob的填充策略应该是与Alice相反的。

情景分析②

我们现在考虑这个情景:

Alice手中的字符比Bob手中的字符都要大(lexicographically larger),比如Alice手上有:T/Y/U/I/O,而Bob手上有:A/C/D/F/G。现在,Alice显然不能用自己手上最小的字符去填充字符串当中下标最小的空白位置,她应该用自己手上最大的字符去填充字符串当中下标最大的空白位置。

同样的,对于Bob而言,现在的他倘若要用自己最大的字符去填充字符串当中最小下标的空白位置,这显然不是一个最优的策略,他应该用自己最小的字符去尽量填充字符串当中下标最大的空白位置。

问题分析:

Alice的最优策略:

·将最小的字符放在字符串的最小下标的空位处

·将最大的字符放在字符串的最大下标的空位处

Bob的最优策略:

·将最大的字符放在字符串的最小下标的空位处

·将最小的字符放在字符串的最大下标的空位处

假设现在是Alice的回合,现在她从她的字符中取出了一个最小的字符。如果这个字符比Bob最大的字符还要大,那就说明Alice的全部字符都要比Bob的要大,进而我们可以推出Alice有现在场上最大的字符,按照最优策略,Alice将把她最大的字符放在字符串的最大下标空位处。

另一方面,如果Alice最小的字符没有Bob最大的字符大,那么现在倘若Alice不把最小的字符放在最小下标空位处,Bob就会在上面放一个大的字符,这显然会比Alice现在的结果更坏,所以这个时候,Alice应该将自己最小的字符放在最小下标空位处。

Bob的回合也是相似的。Bob在自己能够选择的所有字符中选出最大的那一个,假如这个字符比Alice最小的字符还要小,那就说明Bob的所有字符都比Alice的最小的字符要小,并且他还拥有所有字符中的最小值,这个时候如果Bob还打算将自己最大的字符放置于最小下标空位处那就正中Alice下怀了。所以在这种情况下,Bob要将自己最小的字符放到最大下标空位处。

就像我们分析Alice时一样,如果这个时候Bob的最大字符比Alice的最小字符要大。如果Bob不把他最大的字符放在最小下标空位处,Alice最起码可以把她最小的字符放在那个位置,那这样Bob就不再是最优解了。

我们应该注意到的是,上面说的最优解都是当前的最优解,所以这是一个两个玩家都在用贪心策略对抗的游戏。好了,细心如你,你可能已经发现了,我们好像并没有讨论当Alice的最小字符等于Bob的最大字符的情况。我们刚才考虑了,轮到Alice的时候,如果Alice最小的字符比Bob最大的字符还要大,那么Bob只需要拿一个最小的字符填到最大下标空位处就可以阻止Alice获得最优字符,为了阻止Bob,Alice只好将自己最小的字符放到最后面,其实二者相同的时候也是一样的道理。

代码实现:

#include<bits/stdc++.h>
using namespace std;
int main() {int t;cin >> t;while(t--){int n; cin >> n;vector<char> a(n),B(n);deque<char> an,bn;for(auto &i : a) cin >> i;for(auto &i : B) cin >> i;sort(a.begin(), a.end());//从小到大sort(B.rbegin(), B.rend());//从大到小for(auto o:a) an.push_back(o);for(auto o:B) bn.push_back(o);vector<char> ans(2*n);int f=0, b=2*n-1;for(int i=0;i<2*n;i++){if((i%2)==0){if(bn.size() && an.front() >= bn.front()){ans[b--] = an.back();an.pop_back();}else{ans[f++] = an.front();an.pop_front();}}else{if(an.size() && an.front() < bn.front()){ans[f++] = bn.front();bn.pop_front();}else{ans[b--] = bn.back();bn.pop_back();}}}for(auto i:ans) cout<<i;printf("\n");}return 0;
}

CodeChef Starters 26 Division 3 (Rated)----STNGAME(中文题解)相关推荐

  1. Geeks3D FurMark v1.26 显卡压力测试工具中文便携版带GPU-Z

    前言 Geeks3D FurMark 是一款显卡压力测试工具,显卡性能测试软件,由oZone3D.net网站开发,通过皮毛渲染算法来衡量显卡的性能,同时还能借此考验显卡的稳定性,最低要求NVIDIA ...

  2. 【26】processing-分析(中文)

    程序的解剖学 J David Eisenberg 许多处理教程集中在语言可以做什么 (改变颜色,绘制形状,创建对象数组) 以及哪些函数调用可以让你完成这些任务.为了编写一个正在处理的程序,你需要知道这 ...

  3. 欧拉计划(project euler)最详细中文题解

    欧拉计划是一个在线解题网站,题目以各类数学问题为主,通常需要结合一定的数学与编程知识,写出适当的程序求解问题(详细介绍可以参见我的文章).相比于力扣等刷题网站,欧拉计划上的题目有着更丰富的知识背景,在 ...

  4. 中文版GPT-3来了?智源研究院发布清源 CPM —— 以中文为核心的大规模预训练模型...

    清源 CPM(Chinese Pretrained Models)是北京智源人工智能研究院和清华大学研究团队合作开展的大规模预训练模型开源计划,清源计划是以中文为核心的大规模预训练模型.首期开源内容包 ...

  5. 中文版GPT-3来了?智源、清华发布清源 CPM——以中文为核心的大规模预训练模型

    2020-11-18 23:43:21 清源 CPM(Chinese Pretrained Models)是北京智源人工智能研究院和清华大学研究团队合作开展的大规模预训练模型开源计划,清源计划是以中文 ...

  6. html 中加载字体太慢,前端解决中文字体加载慢的问题

    CSS3中,使用@font-face即可加载自定义字体了. 推荐的跨浏览器 @font-face CSS 写法: /*声明 WebFont*/ @font-face { font-family: 'f ...

  7. 中文宾州树库标记含义

    来源:http://blog.csdn.net/neutblue/article/details/7375085 1        Part-Of-Speech tags: 33 tags 标记 英语 ...

  8. 交互式多模型_26亿参数,智源、清华开源中文大规模预训练模型

    近日,北京智源人工智能研究院和清华大学研究团队联合发布了以中文为核心的大规模预训练语言模型 CPM-LM,参数规模达 26 亿,预训练中文数据规模 100 GB. 26亿参数,智源.清华开源中文大规模 ...

  9. C# 正则计算中文,数字,英文字数统计方法

    因为功能需求,需要实现对于文章字数统计的一个方法编写.此处就不多说.直接进行代码讲解. 先来看看功能实现的字数统计要求: 字数统计区分中英文,一个英文单词为一个字,一个汉字为一个字,一个数字计为一个字 ...

最新文章

  1. mc幻想乡java_我的世界1.7.2幻想乡整合版下载_我的世界1.7.2东方幻想乡下载_游戏之家...
  2. xshell 图形化连接ubuntu
  3. linux c 命令行解析 getopt getopt_long optarg optind opterr optopt 简介
  4. jquery选中以什么开头的元素
  5. Linux实操篇——实用指令学习笔记(详解)
  6. 附录:更多字符串操作命令
  7. 洛谷 P3367 ---- 【模板】并查集
  8. 生姜红糖水怎么喝健康呢?
  9. SpringMVC第六篇【校验、统一处理异常】
  10. 2017河北对口升学计算机试题,2017河北对口升学计算机专业理论试题(含答案).doc...
  11. Java网络爬虫实操(6)
  12. 第一次部署海康威视DEMO的一些坑,最终运行成功
  13. 51单片机C语言程序100例
  14. python文本处理
  15. 有了这15款编程游戏,谁都可以学编程!
  16. vhg电路是什么意思_显示装置和电力监测电路的制作方法
  17. 5月6阴阳师服务器维护,阴阳师正式服5月6日更新公告
  18. 类似java制作计算器的游戏_急求一Java编写的类似计算机带的计算器的程序!!...
  19. larval 进程管理
  20. 从零开始配置腾讯云 CDN

热门文章

  1. 一文详解各城市智能网联道路技术规范
  2. 大数据“比你更懂你”,会有不怕失业的专业?
  3. c语言usleep头文件,C语言Sleep clock time函数的使用
  4. 图腾柱工作原理(转载)
  5. 计算机主机声音怎么办,电脑主机噪音怎么办?
  6. playsound播放中文名歌曲时,可以在歌曲名中加上空格正常播放音乐
  7. hdu-2606 Renovation Problem(递推)
  8. 正确卸载和重装docker的方式
  9. 物价上涨就是货币贬值啊,工资一涨那还得交税,所以不涨工资是为大家着想...
  10. 标准为王、开放为王、免费为王、体验为王