Professor GukiZ doesn't accept string as they are. He likes to swap some letters in string to obtain a new one.

GukiZ has strings ab,
and c. He wants to obtain string k by
swapping some letters in a, so that k should
contain as many non-overlapping substrings equal either to b or c as
possible. Substring of string x is a string formed by consecutive segment of characters from x.
Two substrings of string x overlap if there is position i in
string x occupied by both of them.

GukiZ was disappointed because none of his students managed to solve the problem. Can you help them and find one of possible strings k?

Input

The first line contains string a, the second line contains string b,
and the third line contains string c (1 ≤ |a|, |b|, |c| ≤ 105,
where |s|denotes the length of string s).

All three strings consist only of lowercase English letters.

It is possible that b and c coincide.

Output

Find one of possible strings k, as described in the problem statement. If there are multiple possible answers, print any of them.

Sample test(s)
input
aaa
a
b
output
aaa
input
pozdravstaklenidodiri
niste
dobri
output
nisteaadddiiklooprrvz
input
abbbaaccca
ab
aca
output
ababacabcc
Note

In the third sample, this optimal solutions has three non-overlaping substrings equal to either b or c on
positions 1 – 2 (ab), 3 – 4 (ab),5 – 7 (aca).
In this sample, there exist many other optimal solutions, one of them would be acaababbcc.

这题因为字母可以随意调换,所以先数出a,b,c三个字符串所有字母表中的字母的个数,然后看最多能填充多少个b字符串minx,然后填充0~minx个字符串,再看在当前情况下能填充多少个c字符串,计算最大值。

#include<stdio.h>
#include<string.h>
char s1[100006],s2[100006],s3[100006];
int a[30],b[30],c[30],a1[30];
int main()
{
int n,m,i,j,len1,len2,len3,minx1,minx2,maxx,minx,t1,t2;
while(scanf("%s",s1)!=EOF)
{
scanf("%s%s",s2,s3);
len1=strlen(s1);
len2=strlen(s2);len3=strlen(s3);
memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));memset(a1,0,sizeof(a1));
for(i=0;i<len1;i++){
a[s1[i]-'a']++;a1[s1[i]-'a']++;
}
for(i=0;i<len2;i++){
b[s2[i]-'a']++;
}
for(i=0;i<len3;i++){
c[s3[i]-'a']++;
}
minx1=200006;
for(i=0;i<=25;i++){
if(b[i]==0)continue;
if(minx1>(a[i]/b[i]))minx1=a[i]/b[i];
}
minx2=200006;
for(i=0;i<=25;i++){
if(c[i]==0)continue;
if(minx2>(a[i]/c[i]))minx2=a[i]/c[i];
}
maxx=minx2;t1=0;t2=minx2;
for(i=1;i<=minx1;i++){
minx=200006;
for(j=0;j<=25;j++){
a[j]-=b[j];
}
for(j=0;j<=25;j++){
if(c[j]==0)continue;
if(minx>(a[j]/c[j]))minx=a[j]/c[j];
}
if(maxx<minx+i){
maxx=minx+i;
t1=i;t2=minx;
}
}
for(i=1;i<=t1;i++)printf("%s",s2);
for(i=1;i<=t2;i++)printf("%s",s3);
for(i=0;i<=25;i++){
a1[i]=a1[i]-t1*b[i]-t2*c[i];
for(j=1;j<=a1[i];j++){
printf("%c",'a'+i);
}
}
printf("\n");
}
return 0;
}

Codeforces Round #307 (Div. 2) B. ZgukistringZ的更多相关文章

  1. 字符串处理/贪心 Codeforces Round #307 (Div. 2) B. ZgukistringZ

    题目传送门 /* 题意:任意排列第一个字符串,使得有最多的不覆盖a/b字符串出现 字符串处理/贪心:暴力找到最大能不覆盖的a字符串,然后在b字符串中动态得出最优解 恶心死我了,我最初想输出最多的a,再 ...

  2. Codeforces Round #307 (Div. 2) B. ZgukistringZ 暴力

    B. ZgukistringZ Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/551/probl ...

  3. 水题 Codeforces Round #307 (Div. 2) A. GukiZ and Contest

    题目传送门 /* 水题:开个结构体,rk记录排名,相同的值有相同的排名 */ #include <cstdio> #include <cstring> #include < ...

  4. 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)

    题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...

  5. Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana 分块

    E. GukiZ and GukiZiana Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/55 ...

  6. Codeforces Round #307 (Div. 2) C. GukiZ hates Boxes 贪心/二分

    C. GukiZ hates Boxes Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/551/ ...

  7. Codeforces Round #307 (Div. 2) A. GukiZ and Contest 水题

    A. GukiZ and Contest Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/551/ ...

  8. Codeforces Round #307 (Div. 2) D. GukiZ and Binary Operations (矩阵高速幂)

    题目地址:http://codeforces.com/contest/551/problem/D 分析下公式能够知道,相当于每一位上放0或者1使得最后成为0或者1.假设最后是0的话,那么全部相邻位一定 ...

  9. Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana (分块)

    题目地址:http://codeforces.com/contest/551/problem/E 将n平均分成sqrt(n)块,对每一块从小到大排序,并设置一个总体偏移量. 改动操作:l~r区间内,对 ...

随机推荐

  1. SonarQube学习(六)- SonarQube之扫描报告解析

    登录http://192.16.1.105:9000,加载项目扫描情况 点击项目名称,查看报告总览 开发人员主要关注为[问题]标签页. 类型 主要关注为bug和漏洞. 其中bug是必须要修复的,漏洞是 ...

  2. ASP.NET Core错误处理中间件[1]: 呈现错误信息

    NuGet包"Microsoft.AspNetCore.Diagnostics"中提供了几个与异常处理相关的中间件.当ASP.NET Core应用在处理请求过程中出现错误时,我们可 ...

  3. 1.2V升压5V和2.4V升压5V芯片,适用于镍氢电池产品

    一节镍氢电池1.2V升压5V电路芯片,两节镍氢电池2.4V升压到5V的电源芯片 PW5100具有宽范围的输入工作电压,从很低的0.7V到5V电压. PW5100输出电压固定3V,3.3V,5V可选固定 ...

  4. 关于java并发场景下,HttpServletRequst中session丢失问题

    使用场景: 在list数据进来之后使用安全数组    Lists.newCopyOnWriteArrayList() 进行了   parallelStream  并行处理,在接口中进行了登录者信息接口 ...

  5. Ubuntu18.04完全卸载mysql5.7并安装mysql8.0的安装方法

    Ubuntu18.04版本下,如果直接输入: sudo apt install mysql-server 命令,会默认安装mysql5.7版本,安装过程并没有提示输入密码,安装完成后也无法正常登录,这 ...

  6. 微信小程序腾讯地图SDK使用方法

    一.本篇文章主要知识点有以下几种: 1.授权当前位置 2.map组件的使用 3.腾讯地图逆地址解析 4.坐标系的转化 二.效果如下: 三.WXML代码 <map id="map&quo ...

  7. SQL Server 2012 忘记sa用户处理方法

    SQL Server 2012 忘记sa用户的密码,可重置sa密码,方法如下: 1.将身份验证改成Windows身份验证,登录进去 2.进入SQL Server控制台,在对象资源管理器中找到Secur ...

  8. 【图像处理】RGB Bayer Color分析

    Bayer色彩滤波阵列 拜耳色彩滤波阵列(Bayer Color Filter Array,CFA)是非常有名的彩色图片的数字采集格式.色彩滤波器的模式如上图所示,由一半的G,1/4的R,1/4的B组 ...

  9. Java 给Word不同页面设置不同背景

    Word文档中,可直接通过[设计]-[页面颜色]页面颜色,通过Java代码可参考如下设置方法: 1. 设置单一颜色背景 doc.getBackground().setType(BackgroundTy ...

  10. 虚拟化kvm的搭建

            虚拟化, 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 ,在一台计算机上同时运行多个逻辑计算机,每台逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不 ...