Codeforces Round #307 (Div. 2) B. ZgukistringZ
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 a, b,
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?
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.
Find one of possible strings k, as described in the problem statement. If there are multiple possible answers, print any of them.
aaa
a
b
aaa
pozdravstaklenidodiri
niste
dobri
nisteaadddiiklooprrvz
abbbaaccca
ab
aca
ababacabcc
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的更多相关文章
- 字符串处理/贪心 Codeforces Round #307 (Div. 2) B. ZgukistringZ
题目传送门 /* 题意:任意排列第一个字符串,使得有最多的不覆盖a/b字符串出现 字符串处理/贪心:暴力找到最大能不覆盖的a字符串,然后在b字符串中动态得出最优解 恶心死我了,我最初想输出最多的a,再 ...
- Codeforces Round #307 (Div. 2) B. ZgukistringZ 暴力
B. ZgukistringZ Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/551/probl ...
- 水题 Codeforces Round #307 (Div. 2) A. GukiZ and Contest
题目传送门 /* 水题:开个结构体,rk记录排名,相同的值有相同的排名 */ #include <cstdio> #include <cstring> #include < ...
- 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...
- 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 ...
- 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/ ...
- 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/ ...
- Codeforces Round #307 (Div. 2) D. GukiZ and Binary Operations (矩阵高速幂)
题目地址:http://codeforces.com/contest/551/problem/D 分析下公式能够知道,相当于每一位上放0或者1使得最后成为0或者1.假设最后是0的话,那么全部相邻位一定 ...
- Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana (分块)
题目地址:http://codeforces.com/contest/551/problem/E 将n平均分成sqrt(n)块,对每一块从小到大排序,并设置一个总体偏移量. 改动操作:l~r区间内,对 ...
随机推荐
- RCE - Pikachu
概述: 远程系统命令执行 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口 比如我们常见的路由器.防火墙.入侵检测等设备的web管理界面上 一般会给用户提供一个ping操 ...
- 快速查询表中的NULL数据
正常情况下,NULL值是不会放入B-TREE索引的,因此根据IS NULL查询的时候走的通常是全表扫描,如果记录比较少还好,记录比较多,查询会非常耗时 可以通过创建一个索引来解决 CREATE IND ...
- linux驱动设备号
一.设备号基础 一般来说,使用ls -l命令在时间一列的前一列的数字表示的是文件大小,但如果该文件表示的是一个设备的话,那时间一列的前一列将有两个数字,用逗号分隔开,如下图: 前一个数字表示主设备号, ...
- Ajax编程基础
目录 Ajax编程基础 传统网站中存在的问题 Ajax概述 Ajax的应用场景 Ajax的运行环境 Ajax运行原理及实现 Ajax运行原理 Ajax的实现步骤 1.创建Ajax对象 2.告诉Ajax ...
- 我为什么不鼓吹 WireGuard
原文链接:https://fuckcloudnative.io/posts/why-not-wireguard/ 最近有一款新型 VPN 工具备受瞩目,相信很多人已经听说过了,没错就是 WireGua ...
- zabbix指定版本自动化安装脚本shell
安装服务端zabbix 有时候要部署一个zabbix各种配置啊贼烦. #!/bin/sh #sleep 10 zabbix_version=4.2.5 ###这里你自定义版本,我要的是4.2.5 za ...
- jquery 数据查询
jquery 数据查询 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...
- JavaFx ObservableList的使用详解
原文地址:JavaFx ObservableList的使用详解 | Stars-One的杂货小窝 最近在研究MVVM模式,发现可以将之前写的FxRecyclerView控件改造一下,便是开始尝试,尝试 ...
- js12种应该注意的地方
1. == Javascript有两组相等运算符,一组是==和!=,另一组是===和!==.前者只比较值的相等,后者除了值以外,还比较类型是否相同. 请尽量不要使用前一组,永远只使用===和!==.因 ...
- 有状态 无状态 stateful stateless monolithic architecture microservice architecture 单体架构
为什么游戏公司的server不愿意微服务化? - 知乎 https://www.zhihu.com/question/359630395 我大概说了,方便测试,方便维护,方便升级,服务之间松耦合,可多 ...