B. ZgukistringZ
题目链接:http://codeforces.com/contest/551/problem/B
题目大意:给你三个字符串,s1,s2,s3. s1任意两个字符串之间可以互相交换。
问,在s1中s2和s3在不重叠的情况下,两个字符串出现的最多次数之和的时候为多少,然后将排完序的字符串输出。
思路:一开始打算用桶排做,将每个字符串中的字符出现的次数记录下来,然后查看每个字符串在s1中出现的次数最多为多少,然后按照最大的输出。结果交上去错了,后来才发现是求s1和s2出现的次数之和的最大值,有可能有如下情况,s1出现的最大次数为3,当s1出现次数为3时,s2的次数为1.但是,当s1出现的次数为2时,这个时候s2的次数为5,显然 3+1 < 2+5 。这个时候就应该先输出2*s1和5*s2.然后又开始改,交上去有一组样例tle了,然后过了断断续续将近两个小时才发下错在哪里,具体原因在下面的代码中解释。
#include<bits/stdc++.h>
using namespace std;
# define inf 0x3f3f3f3f
string s1,s2,s3;
int index;
int d1,d2;
int s;
int len;
map<char,int>q1;
map<char,int>q2;
map<char,int>q3;//桶排
map<char,int >com;
void judge()
{
int len=s2.size();
d1=inf;
for(int i=0; i<len; i++)
{
d1=min(d1,q1[s2[i]]/q2[s2[i]]);//这个地方要注意,和d1比较的是 (q1[s2[i]]/q2[s2[i]]),不能只是比较(d1和q1[s2[i]]),因为s2有可能是由重复字母组成的比如说 s1是‘aaa',s2是'aa',这个时候,如果按照后者的计算的话,答案是3,但是正确答案应该是1.
//cout<<d1<<endl;
}
s=-1;
int t1,t2;
index=0;
for(int j=0; j<=d1; j++)
{
t1=0,t2=0;
t1=j;
int d=inf;
for(int i=0; i<26; i++)//这里就是tle的原因,一开始我是按照 s3的长度开始跑的,结果一直tle,在看别人的代码的时候,突然想了一下,如果按照最大的来算的话,s2在s1中出现的次数为十的五次方,如果s3的长度也是十的五次方,这个时候耗时就成了10的十次方了,肯定会超时。
{
char temp=char(i+'a');
if(q3[temp])
{
d=min(d,(q1[temp]-j*(q2[temp]))/q3[temp]);
}
}
t2=d;
if(t1+t2>s)
{
s=t1+t2;
index=t1;
}
}
}
int main()
{
while(cin>>s1>>s2>>s3)
{
q1.clear();
q2.clear();
q3.clear();
for(int i=0; i<26; i++)
{
char s=char(i+'a');
// cout<<s<<endl;
q1[s]=0;
q2[s]=0;
q3[s]=0;
}
for(int i=0; s1[i]; i++)q1[s1[i]]++;
for(int i=0; s2[i]; i++)q2[s2[i]]++;
for(int i=0; s3[i]; i++)q3[s3[i]]++;
judge();
for(int i=0; i<index; i++)
{
cout<<s2;
}
len=s2.size();
for(int i=0; i<len; i++)
{
q1[s2[i]]-=index;
}
for(int i=1; i<=s-index; i++)
{
cout<<s3;
}
len=s3.size();
int g=s-index;
for(int i=0; i<len; i++)
{
q1[s3[i]]-=g;
}
len=s1.size();
for(int i=0; i<len; i++)
{
if(q1[s1[i]])
{
cout<<s1[i];
q1[s1[i]]--;
}
}
cout<<endl;
}
return 0;
}
B. ZgukistringZ的更多相关文章
- 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) B. ZgukistringZ
题目传送门 /* 题意:任意排列第一个字符串,使得有最多的不覆盖a/b字符串出现 字符串处理/贪心:暴力找到最大能不覆盖的a字符串,然后在b字符串中动态得出最优解 恶心死我了,我最初想输出最多的a,再 ...
- 「日常训练」ZgukistringZ(Codeforces Round #307 Div. 2 B)
题意与分析(CodeForces 551B) 这他妈哪里是日常训练,这是日常弟中弟. 题意是这样的,给出一个字符串A,再给出两个字符串B,C,求A中任意量字符交换后(不限制次数)能够得到的使B,C作为 ...
- 【19.46%】【codeforces 551B】ZgukistringZ
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 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 ...
- Codeforces Round #307 (Div. 2)
A. GukiZ and Contest time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
随机推荐
- ARC062 - F. Painting Graphs with AtCoDeer (Polya+点双联通分量)
似乎好久都没写博客了....赶快来补一篇 题意 给你一个 \(n\) 个点 , 没有重边和自环的图 . 有 \(m\) 条边 , 每条边可以染 \(1 \to k\) 中的一种颜色 . 对于任意一个简 ...
- BZOJ 4032: [HEOI2015]最短不公共子串
4032: [HEOI2015]最短不公共子串 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 446 Solved: 224[Submit][Sta ...
- 【bzoj4818】 Sdoi2017—序列计数
http://www.lydsy.com/JudgeOnline/problem.php?id=4818 (题目链接) 题意 一个长度为$n$的序列,每个元素是不超过$m$的正整数,且这$n$个数的和 ...
- Activiti 用户任务并行动态多实例(多用户执行流程)
在很多情况下,我们需要多用户共同执行余下流程,比如开会流程: 领导发起开会,选择开会人员(多个) 每个开会人员接收到通知后需要签到(一名用户签到不会影响到另一位用户的签到) 签到完成后则流程结束 如果 ...
- 使用Nginx反向代理和proxy_cache缓存搭建CDN服务器加快Web访问速度
碰到问题:移动用户访问web服务器www.osyunwei.com很慢解决办法:1.在移动机房放置一台nginx反向代理服务器2.通过域名DNS智能解析,所有移动用户访问www.osyunwei.co ...
- SQL Server 操作XML数据
.xml.exist 输入为XQuery表达式,返回0,1或是Null.0表示不存在,1表示存在,Null表示输入为空 .xml.value 输入为XQuery表达式,返回一个SQL Server标量 ...
- CSS的显示模式
div与span div与span有什么区别 div单独占一行,span不会单独占一行 div是容器级的标签,而span是一个文本级的标签 容器级的标签有:div , h , ul , ol , dl ...
- String转换为Map
Map<String,Integer> rulsMap = new Gson().fromJson(cachedobj.toString(),new TypeToken<Map< ...
- python爬虫-采集英语翻译
http://fanyi.baidu.com/?aldtype=85#en/zh/drughttp://fanyi.baidu.com/?aldtype=85#en/zh/cathttp://fa ...
- 网络编程基础【day09】:实现简单地ssh(四)
本节内容 概述 简单ssh socket接收大数据的困惑 一.概述 我们用过linux的就知道什么是ssh,它是一种客户端和服务端交互返回的一个解决,输入一个命令,给我返回什么,接下来我们说一说,如何 ...