codeforces 794C Naming Company(贪心)
来源:互联网 发布:网络客服沟通技巧 编辑:程序博客网 时间:2024/06/15 20:49
题意:
x,y两人轮流从各自的字符串a,b(长度都为n)里选择字符,形象的来说就是往一个长度为n里的容器里放所选择的字符,x先手,x想最后的字典序越小越好,y想最后的字典序越大越好,问他们两都采取最优的策略,问最后获得的字符串是什么
解题思路:
首先我们容易想到,x只能取出前n/2小的字符来投放,并且,最后字符的位置一定是字典序递增的,因为想最后的字典序最小,而y是只能取出前n/2大的字符,并且是最后字符的位置一定是字典序递剑的。
然后就是投放位置的问题。
当轮到x放的时候,假如当前字典序最小的字符都大于等于(等于非常重要)b的字典序最大的字符串了,那么就应该让b的字符越往前放越好,所以应该要让自己字典序最大(因为对于x来说,一定按字典序递增)的字符先放在最后一个位置上。
y的话正好相反
为什么等于也要这样放呢?赛时没过就是因为我没有加等于QAQ
因为a字符串当前字符之后的字符可能大于b里所有的字符,
比如
a:abc
b:aaa
如果不加等于号得到的就是aba 顺序为a--,a-a,aba
加了等于号就是aab 顺序为--b,-ab,aab
对于x来说明显第二种最优。
所以等于号一定要加。
代码:
#include <bits/stdc++.h>using namespace std;const int maxn=3e5+5;char a[maxn];char b[maxn];char c[maxn];bool cmp(char x, char y){ return x>y;}int main(){ scanf("%s%s", a, b); int i, j, n=strlen(a); sort(a, a+n); sort(b, b+n, cmp);// printf("%s\n", b); i=j=0; int k=0, l=0, r=n-1, ir=(n-1)/2, jr=(n-1)/2; if(n%2)jr--; while(k<n) { if(k%2==0) { if(a[i]>=b[j]) { c[r--]=a[ir--]; } else { c[l++]=a[i++]; } } else { if(b[j]<=a[i]) { c[r--]=b[jr--]; } else c[l++]=b[j++]; } k++; } printf("%s\n", c);// j=0, k=0;// for(i=0; i<n; i++)// {// if(i%2==0)printf("%c", a[j++]);// else printf("%c", b[k++]);// } return 0;}
阅读全文
0 0
- Codeforces 794C Naming Company 贪心
- Codeforces 794 C. Naming Company (贪心)
- codeforces 794C Naming Company(贪心)
- codeforces C. Naming Company 贪心+博弈
- Codeforces Round #414 C. Naming Company 贪心
- Codeforces 794C. Naming Company
- C. Naming Company 贪心
- C. Naming Company 贪心
- codeforces 794C C. Naming Company
- 【Codeforces Round #414 C Naming Company】
- C. Naming Company
- C. Naming Company 几何
- C. Naming Company
- codeforces Naming Company 很思维题最优想法
- Codeforces 794C【贪心】
- CodeForces 790C Bear and Company
- CodeForces 580B Kefa and Company <贪心>
- CodeForces 275C 贪心
- 微服务架构浅谈(一)
- 根据underscore精简的函数(集合篇)
- jquery边框特效
- 洛必达法则与泰勒公式
- adb server didn't ack问题
- codeforces 794C Naming Company(贪心)
- java循环语句的学习
- 字节对齐导致的地址计算错误
- CentOS查看内核版本,位数,版本号
- 说说Javaweb 服务器与Tomcat源代码解析
- 中断的概念及意义
- Java 7语法新特性
- Android缓存机制
- tensorflow ubuntu