【题目链接】: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的更多相关文章

  1. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  2. 【35.02%】【codeforces 734A】Vladik and flights

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  3. 【40.17%】【codeforces 569B】Inventory

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. 【74.00%】【codeforces 747A】Display Size

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  6. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  7. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  8. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

  9. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

随机推荐

  1. 【codeforces 716D】Complete The Graph

    [题目链接]:http://codeforces.com/problemset/problem/716/D [题意] 给你一张图; 这张图上有一些边的权值未知; 让你确定这些权值(改成一个正整数) 使 ...

  2. spring datasource和mybatis的datasource来源在哪里

    配置一个数据源     spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0.可以在Spring配置文件中利用这两者中任何一个配置数据源.  配置一个 ...

  3. c# DataTable to Object Mapping

    public static class DataTableExtensions { public static IList<T> ToList<T>(this DataTabl ...

  4. 使用fiddler模拟http get

    wireshark抓到一个http get数据包 GET /Hero/zhCN/client/alert?build=zhCN&targetRegion=0&homeCountry= ...

  5. 关于volatile的一些思考C++

    在c++中,volatile用与修饰容易变动的变量,通常用于多线程的标志,编译器会存在代码优化,假如在同一个大括号中没有修改这么一个参数,那么编译器很可能在读取这个值的时候使用的是快取的方法,即将这个 ...

  6. 修改eclipse最近访问的工程的配置文件

    此文件为:org.eclipse.ui.ide.prefs 配置项为:RECENT_WORKSPACES= 示例:RECENT_WORKSPACES=E\:\\Workspaces\\wokspace ...

  7. Spark RDD概念学习系列之RDD接口

    不多说,直接上干货!

  8. 理解HashMap底层原理,一个简单的HashMap例子

    package com.jl.testmap; /** * 自定义一个HashMap * @author JiangLai * */ public class MyHashMap<K,V> ...

  9. Java对象、Json、Xml转换工具Jackson使用

    在Java项目中將一个对象转换成一段Json格式的字符串是非常常见的,能够实现这种需求的工具包也比较多,例如Gson.JSON-lib.Jackson等等.本文主要介绍Jackson的使用,Jacks ...

  10. 自动化框架的两种断言设计(pytest 版)

    自动化测试断言失败时,根据不同业务场景,可能需要立即终止或继续执行.这里以 Appium + pytest 为例. 一. 断言失败立即终止 用途一:用例的预期结果是其他用例的前提条件时,assert ...