描述:

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. poj-1042 nyoj-30(Gone fishing)
  2. C++加号运算符重载
  3. 【翻译】.NET 5 RC1发布
  4. logback slf4j_强制Tomcat通过SLF4J / Logback登录
  5. 也说春运网络购票:12306的码农没有你想的那么弱 [转]
  6. linux命令行安装tomcat8,CentOS环境下安装JDK、Tomcat及相关Linux命令
  7. Python办公自动化 - 2 Word办公自动化
  8. Windows 7/Windows Server 2008 R2中创建扩展分区
  9. Java Stream flatMap()
  10. 数学建模案例【人口模型 】(马尔萨斯人口模型,Logistic模型)
  11. SPI通信协议以及概念
  12. Android开发——项目实例(一)迷你背单词软件
  13. 举个栗子~Tableau 技巧(205 ):区域地图中呈现具体位置
  14. android gridview 做日历,android日历控件
  15. 基于神经网络的目标检测论文之结尾:总结与展望
  16. python中随机生成数字方法
  17. C语言学习:除去剪切板内容的换行与回车
  18. 宽容那些与我们不同的人
  19. lodop打印html包含图片,使用lodop.js打印控件打印table并分页等
  20. C语言学习笔记(kk-zkx)

热门文章

  1. cmi编码实验_cmi实验.ppt
  2. Flowable6.5框架遗留的新旧bug
  3. Unity3D攻击范围光圈Shader实现(UGUI)
  4. HTML块级元素、行内元素和行内块元素
  5. 乡村振兴,情绪和人情的使用方式,人情社会的批判,人情犯罪
  6. protocal 协议
  7. 穷人和富人的12种区别 (转)
  8. html一百道选择题,2017年计算机一级考试选择题100道
  9. 你真的了解接口测试吗?
  10. 【使用篇】WebView 实现嵌套滑动,丝滑般实现吸顶效果,完美兼容 X5 webview