zoukankan      html  css  js  c++  java
  • CodeForces

    Oleg the client and Igor the analyst are good friends. However, sometimes they argue over little things. Recently, they started a new company, but they are having trouble finding a name for the company.

    To settle this problem, they've decided to play a game. The company name will consist of n letters. Oleg and Igor each have a set of n letters (which might contain multiple copies of the same letter, the sets can be different). Initially, the company name is denoted by n question marks. Oleg and Igor takes turns to play the game, Oleg moves first. In each turn, a player can choose one of the letters c in his set and replace any of the question marks with c. Then, a copy of the letter c is removed from his set. The game ends when all the question marks has been replaced by some letter.

    For example, suppose Oleg has the set of letters {i, o, i} and Igor has the set of letters {i, m, o}. One possible game is as follows :

    Initially, the company name is ???.

    Oleg replaces the second question mark with 'i'. The company name becomes ?i?. The set of letters Oleg have now is {i, o}.

    Igor replaces the third question mark with 'o'. The company name becomes ?io. The set of letters Igor have now is {i, m}.

    Finally, Oleg replaces the first question mark with 'o'. The company name becomes oio. The set of letters Oleg have now is {i}.

    In the end, the company name is oio.

    Oleg wants the company name to be as lexicographically small as possible while Igor wants the company name to be as lexicographically large as possible. What will be the company name if Oleg and Igor always play optimally?

    A string s = s1s2...sm is called lexicographically smaller than a string t = t1t2...tm(where s ≠ t) if si < ti where i is the smallest index such that si ≠ ti. (so sj = tjfor all j < i)

    Input

    The first line of input contains a string s of length n (1 ≤ n ≤ 3·105). All characters of the string are lowercase English letters. This string denotes the set of letters Oleg has initially.

    The second line of input contains a string t of length n. All characters of the string are lowercase English letters. This string denotes the set of letters Igor has initially.

    Output

    The output should contain a string of n lowercase English letters, denoting the company name if Oleg and Igor plays optimally.

    Examples

    Input
    tinkoff
    zscoder
    Output
    fzfsirk
    Input
    xxxxxx
    xxxxxx
    Output
    xxxxxx
    Input
    ioi
    imo
    Output
    ioi

    题意:A,B都有N个字符,A和B轮流贡献一个字符,A想组成的字典序越小,B想组成的字典序越大。

    思路:A肯定是贡献出最小的(N+1)/2个字符,B贡献出最大的N/2个字符。 错误思路是A从小到大贡献字符,B从大到小贡献字符,但是会出现错误,

    比如A=cbxy,B=aaaa,错误解=baca,正解=abac。正确的贪心策略应该是:对A,如果最小值小于B的最大值,那么把最小值填到前面,否则把最大值填到最后。B同理。

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1000010;
    char a[maxn],b[maxn],ans[maxn];
    int main()
    {
        int N,L,R,h1,t1,h2,t2;
        scanf("%s%s",a+1,b+1); N=strlen(a+1);
        sort(a+1,a+N+1); sort(b+1,b+N+1);
        L=1; R=N; h1=1; t1=(N+1)/2; h2=N; t2=N-N/2+1;
        while(L<=R){
            if(a[h1]<b[h2]) ans[L++]=a[h1++];
            else ans[R--]=a[t1--];
            if(L>R) break;
            if(b[h2]>a[h1]) ans[L++]=b[h2--];
            else ans[R--]=b[t2++];
        }
        for(int i=1;i<=N;i++) printf("%c",ans[i]);
        return 0;
    }
        
  • 相关阅读:
    [Spark内核] 第38课:BlockManager架构原理、运行流程图和源码解密
    [Spark内核] 第37课:Task执行内幕与结果处理解密
    [Spark内核] 第36课:TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解等
    [Spark内核] 第35课:打通 Spark 系统运行内幕机制循环流程
    [Spark性能调优] 第三章 : Spark 2.1.0 中 Sort-Based Shuffle 产生的内幕
    [Spark内核] 第34课:Stage划分和Task最佳位置算法源码彻底解密
    spring boot 日志收集整理
    mybatis 使用redis实现二级缓存(spring boot)
    MD5收集整理
    IntelliJ IDEA 2019.2最新版本免费激活码
  • 原文地址:https://www.cnblogs.com/hua-dong/p/9550230.html
Copyright © 2011-2022 走看看