http://codeforces.com/contest/794/problem/C
题意:A,B两人各有长度为n的字符串,轮流向空字符串C中放字母,A尽可能让字符串字典序小,B尽可能让字符串字典序大,A,B都知道对方的情况;A先手。
首先,A要C的字典序大,B要C的字典序小,所以先贪心,A的按从小到大排序,B的按从大到小排序。
那么现在我们已经知道了A,B分别要选择放到C的字符。
接下来博弈:
B的最大字符等于小于A的最小字符:
- A走:A一定要B放到前面,所以A尽可能放到后面,放哪个呢?当然是大字符;
- B走:B一定要A放在前面,所以B尽可能放在后面,放哪个呢?当然是小字符;
B的最大字符大于A的最小字符:
- A走:A一定要把自己的小字符先放在前面;
- B走:B一定要把自己的大字符先放在前面;
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #include<cmath> 7 #include<set> 8 #include<map> 9 #include<utility> 10 using namespace std; 11 const int maxn=3e5+5; 12 char a[maxn]; 13 char b[maxn]; 14 char c[maxn]; 15 char aa[maxn]; 16 char bb[maxn]; 17 bool cmp(char x,char y) 18 { 19 return y>x; 20 } 21 int main() 22 { 23 scanf("%s",a); 24 scanf("%s",b,cmp); 25 int l=strlen(a); 26 sort(a,a+l); 27 sort(b,b+l); 28 memset(aa,'