Codeforces 794C Naming Company 贪心

来源:互联网 发布:mac桌面不见了 编辑:程序博客网 时间:2024/06/03 06:41

点击打开链接

题意:两个人A,B都有string,长度为n,从A开始,每次轮流从中取出一个,A想让字典序小,B想让字典序尽量大,问最后组成长度为n的string?

n/2轮,A肯定从前n/2小选,B肯定从前n/2大选

情况1:如果a最小比b最大还小,则a肯定先用最小的占高位

情况2:如果a最小比b最大还大,则a用最大的占领最低位,让前面尽量小

#include <bits/stdc++.h>using namespace std;const int N=6e5+20;const double eps=1e-10;char a[N],b[N];char s[N];int main(){while(scanf("%s%s",a+1,b+1)!=EOF){memset(s,0,sizeof(s));int n=strlen(a+1);sort(a+1,a+n+1);sort(b+1,b+n+1);reverse(b+1,b+1+n);int p1=1,q1=n/2;int p2=1,q2=n/2;if(n%2)q1++;//p1,q1为A的选择范围int i=1,l=1,r=n;while(l<=r){if(i%2){//如果相等,b是递减的,让b占领高位, if(a[p1]<b[p2])//等号不能加阿 s[l++]=a[p1++];else s[r--]=a[q1--];}else{if(b[p2]>a[p1])s[l++]=b[p2++];elses[r--]=b[q2--];}i++;}printf("%s\n",s+1);}return 0;}


0 0
原创粉丝点击