【codeforces 794C】Naming Company
【题目链接】:http://codeforces.com/contest/794/problem/C
【题意】
有n个位置;
两个人;
每个人都有n个字符组成的集合s1,s2(可以有重复元素);
然后两人轮流从各自的集合中取出一个字符;
把它放在这n个位置中的任意一个位置;
其中一个人想要让这n个字符组成的字符串字典序尽量小;
另外一个人则想让他尽量大;
问你最后字符串会变成什么样
【题解】
s1和s2是两个人的集合
可以先把s1升序排;
然后s2降序排;
设ls1,ls2分别为s1和s2最左的边的未被选走的字符;
rs1,rs2则是最右的;
然后到第一个人选的时候
比较s1[ls1]和s2[ls2];
①如果s1[ls1]< s2[ls2]
则我们必须要把s1[ls1]尽可能地放在最后的字符串的最左边;
因为如果你不占据最左边那个位置的话;
s2[ls2]那个最大的就能放在最左边那个位置了;
而这无疑给了对手把字符的字典序变大的机会;
②
如果s1[ls1]>=s2[ls2];
这个时候;
就相当于是这样的情况
x y z
c b a
即s1里面的每一个字符的字典序都比s2里面的来得大;
则,这个时候;
我们就不能着急着把x放在开头了;
应该机灵一点;
先看看自己还能放几个字符;
然后尽量把自己的,字典序大的放在最后面;
(让那些字典序大的占的位权小一点)
然后就能逼迫对方把较小的字符放在最开头了:)
比如当前你还能放两个字符(知道还能放两个字符的作用就在于此,不然你会错误地选择最后一个字符z放在最后面,而实际上最后一个字符放y比较优)
则你先把y放在最后面,然后再考虑对方会怎么做?,对方也应该会执行这样的策略,即也看看自己还能放多少个字符x,然后把第ls2+x-1个字符放在最后面,即,尽量把字典序小的字符放在后面,让字典序小的字符的位权占的少一点,逼迫对方让对方把大字典序的字符放在前面;
所以一旦遇到②的情况,其实就能直接出结果了;
每个人都从令x=ls+自己能放的字符个数-1个字符开始,轮流把x,x-1,x-2…放在最后的答案字符的末端.
【Number Of WA】
8
【完整代码】
【codeforces 794C】Naming Company的更多相关文章
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【35.02%】【codeforces 734A】Vladik and flights
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【40.17%】【codeforces 569B】Inventory
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【74.00%】【codeforces 747A】Display Size
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【codeforces 707E】Garlands
[题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...
- 【codeforces 707C】Pythagorean Triples
[题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...
- 【codeforces 709D】Recover the String
[题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...
- 【codeforces 709B】Checkpoints
[题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...
- 【codeforces 709C】Letters Cyclic Shift
[题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...
随机推荐
- 使用Word2016直接发布博客
使用Word2016直接发布博客
- 将 excel文件数据导入MySQL数据库中
第一步:先将Excel文件另存为文本文件(制表符分割) 第二步:将生成的txt文件另存,并修改编码格式utf8; 第三步:将文件放到指定位置,或自己想要的位置: G:\city.txt 第四步:避免创 ...
- H3C SecPath U200-S 如何在内网使用外网IP地址访问内网服务器
H3C SecPath U200-S 如何在内网使用外网IP地址访问内网服务器 ------------------------------------------------------------ ...
- 为屏而生,为屏而死 - IT "精英”们的杯与具
为屏而生,为屏而死 - IT "精英"们的杯与具 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一 ...
- Toast分析——实现自己的Toast
android 4.0以后,新增了一个功能:关闭某个应用发出的通知.Toast等.详细操作为:打开应用安装列表.找到要屏蔽的应用(长按通知,点击弹出的"应用信息",就可以跳到应用信 ...
- git在win7下安装的问题
本帖最后由 ikscher 于 2015-07-30 20:24:16 编辑 从官网下载的最新版本号git-1.9.2-preview版本号,安装在还有一台win7下没有此错误,可是安装在当中一台出现 ...
- uninstall OpenJDK9
sudo apt--jre openjdk--jdk ///要慎用auto命令,会把所有的软件包删掉 https://www.linuxidc.com/Linux/2017-11/148941.htm ...
- 什么是BOM头(字节顺序标记(ByteOrderMark))
在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑ut ...
- GIT 常用方法
代码提交顺序: conmmit(提交代码到本地仓库) --->>> pull(将本地仓库代码合并) ---->>> push(将本地合并后的代码提交到 ...
- art-template模板渲染及其过滤器
原生语法 使用原生语法,需要导入template-native.js文件.在HTML中定义模板,注意模板的位置,不要放到被渲染区域,防止模板丢失. <script id="tpl&qu ...