CodeForces794cNaming Company

来源:互联网 发布:詹姆斯对热火数据 编辑:程序博客网 时间:2024/06/08 14:29

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 nletters (which might contain multiple copies of the same letter, the sets can be different). Initially, the company name is denoted by nquestion 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 = tj for 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
tinkoffzscoder
output
fzfsirk
input
xxxxxxxxxxxx
output
xxxxxx
input
ioiimo
output
ioi
Note

One way to play optimally in the first sample is as follows :

  • Initially, the company name is ???????.
  • Oleg replaces the first question mark with 'f'. The company name becomes f??????.
  • Igor replaces the second question mark with 'z'. The company name becomes fz?????.
  • Oleg replaces the third question mark with 'f'. The company name becomes fzf????.
  • Igor replaces the fourth question mark with 's'. The company name becomes fzfs???.
  • Oleg replaces the fifth question mark with 'i'. The company name becomes fzfsi??.
  • Igor replaces the sixth question mark with 'r'. The company name becomes fzfsir?.
  • Oleg replaces the seventh question mark with 'k'. The company name becomes fzfsirk.

For the second sample, no matter how they play, the company name will always be xxxxxx.

题意:

A,B 每人都有一个长度为n的字符串 两人每次向空串C中放字符 A的操作尽可能让C字典序小 B的操作尽可能让C字典序大 A先手 

题解:

果然读不懂出题人思路还是要退役啊。。

 出题人考到一半放了提示:

A,B均知道对面情况

先将A字符串从小到大 B字符串从大到小排序

如果当前A中最小的>=B中最大的的时候

因为“A,B均知道对面情况”

所以B肯定会把自己的放在C串中尽可能右的位置,并且会放较小的这样A就会把大的放在左边 使字典序变大(但不是B中最小的)

A同理

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=300000+10;
char A[maxn],B[maxn],C[maxn];
bool cmp(char a,char b){
return a>b;
}
int main(){
cin>>A>>B;
int len=strlen(A);
int l1=0,l2=0;
int r1,r2;
int L=0,R=len-1;
r1=(len+1)/2-1;
r2=len/2-1;
sort(A,A+len);
sort(B,B+len,cmp);
for(int i=0;i<len;i++){
if(i&1){
if(A[l1]<B[l2])
C[L++]=B[l2++];
else C[R--]=B[r2--];
}
else {
if(A[l1]<B[l2])
C[L++]=A[l1++];
else C[R--]=A[r1--];
}
}
cout<<C;
return 0;
}

0 0
原创粉丝点击