题目链接:http://codeforces.com/contest/551/problem/B

题目大意:给出字符串a, b, c。试图合理的安排a的字母顺序,使其中有尽可能多的与 c 或 b 相同的不重叠的子串.。

解题思路:You just need some power! 记录 a, b, c 中各个字母的个数,然后枚举 b 能出现的所有次数,再算出 c 相应的能出现的次数,两者相加即为一个ans,最终答案即为ans最大的时候对应的情况。最坏情况下的时间复杂度:O(|a| * 26).

AC代码:

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<functional>
#include<list>
#include<map>
#include<istream>
#include<ostream>
#include<queue>
#include<set>
#include<sstream>
#include<string>
#include<stack>
#include<string>
#include<vector>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
const int maxn=+,inf=0x7ffffff;
int ca[],cb[],cc[];
int main(){
string a,b,c;
cin>>a;
cin>>b;
cin>>c;
for(int i=;i<a.size();i++) ca[a.at(i)-'a']++;
for(int i=;i<b.size();i++) cb[b.at(i)-'a']++;
for(int i=;i<c.size();i++) cc[c.at(i)-'a']++;
bool ending=false;
int ans=;
P as;
for(int i=;;i++){
int ta=;
int tempa[];
for(int j=;j<;j++)
tempa[j]=ca[j];
for(int j=;j<;j++){
if(tempa[j]<cb[j]*i){
ending=true;
break;
}
tempa[j]-=(cb[j]*i);
}
if(ending) break;
ta+=i;
int ti=inf;
for(int j=;j<;j++){
int ttt;
if(cc[j]>){
int ttt=tempa[j]/cc[j];
ti=min(ti,ttt);
}
}
if(ti!=inf){
ta+=ti;
}
if(ta>ans){
ans=ta;
if(ti!=inf)
as=make_pair(i,ti);
else
as=make_pair(i,);
}
}
int num_b=as.first,num_c=as.second;
for(int i=;i<;i++){
ca[i]-=(cb[i]*num_b);
ca[i]-=(cc[i]*num_c);
}
string ret;
while(num_b>){
ret+=b;
num_b--;
}
while(num_c>){
ret+=c;
num_c--;
}
for(int i=;i<;i++){
while(ca[i]>){
ret+=(i+'a');
ca[i]--;
}
}
cout<<ret<<endl;
return ;
}

CF551B的更多相关文章

随机推荐

  1. ZK安装、ZK配置、ZK集群部署踩过的大坑

    天天采坑.来来咱们一起来填zookeeper的坑呀!! 解决坑一定要注意zk根目录下的神器,那就是logs目录下的日志, 第一坑:错误: 找不到或无法加载主类 org.apache.zookeeper ...

  2. vue2.x学习笔记(二十九)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12682822.html. 路由 官方路由 对于大多数的单页面应用,都推荐使用官方支持的vue-router库. 从 ...

  3. 谷歌提高Google Assistant中Voice Match的准确性

    谷歌正在提高 Google Assistant 中 Voice Match 的准确性,使其变得更加完善.谷歌表示一旦用户在 Google Assistant 中启用 Voice Match 功能,那么 ...

  4. if __name=='__main__"的作用

    1.__main__的作用 我们可以经常在不同的程序和脚本中看到有这样的代码: if __name__=='__main__':#如果在windows上启动线程池,必须要使用. func() 很多情况 ...

  5. Java的循环语句

    一.while 循环 while(循环条件){ 循环操作语句 } * 循环3要素: 变量的初值.变量的判断.变量的更新 * 缺少循环变量的更新,循环将一直进行下去 public class Whlie ...

  6. android 动画学习总结

    本文内容是本人阅读诸多前辈的学习心得后整理的,若有雷同,请见谅 Android 动画 分类:帧动画,补间动画,属性动画  . 1.帧动画 将一张张单独的图片连贯的进行播放,从而在视觉上产生一种动画的效 ...

  7. Flash调用Alchemy编译的代码时出现Error #1506的解决

    Flash调用Alchemy编译的代码时出现Error #1506的解决这个问题困扰了我很久,因为需要频繁的向Alchemy代码中传递大ByteArray数组.当某次传递的数据量较大时,后面再调用时就 ...

  8. springBoot(6):web开发-模板引擎jsp

    一.新建工程 注意新建的工程下没有webapp目录eclipse下会自动创建webapp目录这里我们需要自动创建一个webapp目录并创建WEB-INF. 对ServletInitializer.ja ...

  9. INTERVIEW #1

    一.数据对齐存储 在32位系统中:int占4Bytes,short占2Bytes,char占1Byte,加起来应该是7Bytes,但是下面这段代码输出却是8. #define _CRT_SECURE_ ...

  10. UVA-1 #1. A + B Problem

    给你两个数 aa 和 bb,请输出他们的和. 输入格式 一行,两个用空格隔开的整数 aa 和 bb. 输出格式 一个整数,表示 a+ba+b. 样例一 input 2 3 output 5 限制与约定 ...