codeforces 794C C. Naming Company

来源:互联网 发布:单词社交网络 编辑:程序博客网 时间:2024/06/13 00:46

http://codeforces.com/contest/794/problem/C

题意: Oleg 和 Igor 比赛,每个人都有一串相同长度的字符串,他俩想组成一个跟自己的字符串长度相等的串,O想这个串字典序最小,Ig想串字典序最大,每人每次把自己串中的一个字符添加进答案串中,且每个位置的串只能添加一次。问你最后结果。

思路:
先把Oleg的串按小->大排序,之后Igor的串由大->小排序
之后贪心吧,要小心的是Oleg的串的小的字符比Igor大的字符还要大;
我们设定sl为s串左小标,sr为右下标,因为2个串各取一半,所以排序后只要一半就可以。tl,tr同理,al,ar为答案串的左和右之后判断下就可以了。

#include <bits/stdc++.h>#define maxs 202002#define mme(i,j) memset(i,j,sizeof(i))#define ll long longusing namespace std;char s[300005],t[300005],ans[300005];bool cmp(char x,char y){    return x>y;}int main(){    while(~scanf("%s%s",s,t))    {        int len=strlen(s);        sort(s,s+len);        sort(t,t+len,cmp);        int al=0,ar=len-1,sl=0,sr=(len-1)/2,tl=0,tr=(len-1)/2,pos=0;        if(len%2)            tr--;        while(pos<len){            if(pos%2==0){                if(s[sl]>=t[tl]){                    ans[ar--]=s[sr--];                }else                    ans[al++]=s[sl++];            }else{                if(t[tl]<=s[sl]){                    ans[ar--]=t[tr--];                }else                    ans[al++]=t[tl++];            }            pos++;        }        ans[len]='\0';        printf("%s\n",ans);    }    return 0;}
原创粉丝点击