Educational Codeforces Round 25 D. Suitable Replacement
2017-07-17 15:46
633 查看
传送门
D. Suitable Replacement
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given two strings s and t consisting
of small Latin letters, string s can also contain '?' characters.
Suitability of string s is calculated by following metric:
Any two letters can be swapped positions, these operations can be performed arbitrary number of times over any pair of positions. Among all resulting strings s,
you choose the one with the largest number of non-intersecting occurrences of string t. Suitability is
this number of occurrences.
You should replace all '?' characters with small Latin letters in such a way that the suitability of
string s is maximal.
Input
The first line contains string s (1 ≤ |s| ≤ 106).
The second line contains string t (1 ≤ |t| ≤ 106).
Output
Print string s with '?' replaced
with small Latin letters in such a way that suitability of that string is maximal.
If there are multiple strings with maximal suitability then print any of them.
Examples
input
output
input
output
input
output
Note
In the first example string "baab" can be transformed to "abab" with
swaps, this one has suitability of 2. That means that string "baab" also
has suitability of 2.
In the second example maximal suitability you can achieve is 1 and there are several dozens
of such strings, "azbz" is just one of them.
In the third example there are no '?' characters and the suitability of the string is 0.
题意:给你一个长度为1e6串,下面给一个模版串,问你输出最大使用下面的模版的串。?是可以替代为任意字符的地方。
做法:看代码。
//china no.1
#include <vector>
#include <iostream>
#include <string>
#include <map>
#include <stack>
#include <cstring>
#include <queue>
#include <list>
#include <stdio.h>
#include <set>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <iomanip>
#include <cctype>
#include <sstream>
#include <functional>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define pi acos(-1)
#define endl '\n'
#define srand() srand(time(0));
#define me(x) memset(x,0,sizeof(x));
#define foreach(it,a) for(__typeof((a).begin()) it=(a).begin();it!=(a).end();it++)
#define close() ios::sync_with_stdio(0); cin.tie(0);
typedef long long LL;
const int INF=0x3f3f3f3f;
const LL LINF=0x3f3f3f3f3f3f3f3fLL;
//const int dx[]={-1,0,1,0,-1,-1,1,1};
//const int dy[]={0,1,0,-1,1,-1,1,-1};
const int maxn=1e3+5;
const int maxx=1e6+100;
const double EPS=1e-7;
const int MOD=10000007;
#define mod(x) ((x)%MOD);
template<class T>inline T min(T a,T b,T c) { return min(min(a,b),c);}
template<class T>inline T max(T a,T b,T c) { return max(max(a,b),c);}
template<class T>inline T min(T a,T b,T c,T d) { return min(min(a,b),min(c,d));}
template<class T>inline T max(T a,T b,T c,T d) { return max(max(a,b),max(c,d));}
#define FOR(x,n,i) for(int i=x;i<=n;i++)
#define FOr(x,n,i) for(int i=x;i<n;i++)
#define W while
inline int Scan()
{
int res=0,ch,flag=0;
if((ch=getchar())=='-')flag=1;
else if(ch>='0' && ch<='9')res=ch-'0';
while((ch=getchar())>='0'&&ch<='9')res=res*10+ch-'0';
return flag ? -res : res;
}
int main()
{
string s,t;
int i,j,hash[26]={0};
cin>>s>>t;
for(i=0;i<s.size();i++) hash[s[i]-97]++;//把s[i]的每个字符都记录下来。
int z=0;
for(i=0;i<s.size();i++)
{
if(s[i]=='?')//当然?里面应该是把t串的字符从头到尾的用一遍这个串就至少有了一个t串
//但有可能本来s串里有t串的部分字母。所以刚开始要存一个s串字符的多少的数组
{
z++;
z%=t.size();
if(hash[t[z]-97] > 0)//如果t[z]这个位置s串中有这个字符就跳过
{
hash[t[z]-97]--;//就把这个字符--
i--;//回到上一个位置 下一个位置还是?
}
else
s[i]=t[z];
}
}
cout<<s<<endl;
}
D. Suitable Replacement
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given two strings s and t consisting
of small Latin letters, string s can also contain '?' characters.
Suitability of string s is calculated by following metric:
Any two letters can be swapped positions, these operations can be performed arbitrary number of times over any pair of positions. Among all resulting strings s,
you choose the one with the largest number of non-intersecting occurrences of string t. Suitability is
this number of occurrences.
You should replace all '?' characters with small Latin letters in such a way that the suitability of
string s is maximal.
Input
The first line contains string s (1 ≤ |s| ≤ 106).
The second line contains string t (1 ≤ |t| ≤ 106).
Output
Print string s with '?' replaced
with small Latin letters in such a way that suitability of that string is maximal.
If there are multiple strings with maximal suitability then print any of them.
Examples
input
?aa? ab
output
baab
input
??b? za
output
azbz
input
abcd abacaba
output
abcd
Note
In the first example string "baab" can be transformed to "abab" with
swaps, this one has suitability of 2. That means that string "baab" also
has suitability of 2.
In the second example maximal suitability you can achieve is 1 and there are several dozens
of such strings, "azbz" is just one of them.
In the third example there are no '?' characters and the suitability of the string is 0.
题意:给你一个长度为1e6串,下面给一个模版串,问你输出最大使用下面的模版的串。?是可以替代为任意字符的地方。
做法:看代码。
//china no.1
#include <vector>
#include <iostream>
#include <string>
#include <map>
#include <stack>
#include <cstring>
#include <queue>
#include <list>
#include <stdio.h>
#include <set>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <iomanip>
#include <cctype>
#include <sstream>
#include <functional>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define pi acos(-1)
#define endl '\n'
#define srand() srand(time(0));
#define me(x) memset(x,0,sizeof(x));
#define foreach(it,a) for(__typeof((a).begin()) it=(a).begin();it!=(a).end();it++)
#define close() ios::sync_with_stdio(0); cin.tie(0);
typedef long long LL;
const int INF=0x3f3f3f3f;
const LL LINF=0x3f3f3f3f3f3f3f3fLL;
//const int dx[]={-1,0,1,0,-1,-1,1,1};
//const int dy[]={0,1,0,-1,1,-1,1,-1};
const int maxn=1e3+5;
const int maxx=1e6+100;
const double EPS=1e-7;
const int MOD=10000007;
#define mod(x) ((x)%MOD);
template<class T>inline T min(T a,T b,T c) { return min(min(a,b),c);}
template<class T>inline T max(T a,T b,T c) { return max(max(a,b),c);}
template<class T>inline T min(T a,T b,T c,T d) { return min(min(a,b),min(c,d));}
template<class T>inline T max(T a,T b,T c,T d) { return max(max(a,b),max(c,d));}
#define FOR(x,n,i) for(int i=x;i<=n;i++)
#define FOr(x,n,i) for(int i=x;i<n;i++)
#define W while
inline int Scan()
{
int res=0,ch,flag=0;
if((ch=getchar())=='-')flag=1;
else if(ch>='0' && ch<='9')res=ch-'0';
while((ch=getchar())>='0'&&ch<='9')res=res*10+ch-'0';
return flag ? -res : res;
}
int main()
{
string s,t;
int i,j,hash[26]={0};
cin>>s>>t;
for(i=0;i<s.size();i++) hash[s[i]-97]++;//把s[i]的每个字符都记录下来。
int z=0;
for(i=0;i<s.size();i++)
{
if(s[i]=='?')//当然?里面应该是把t串的字符从头到尾的用一遍这个串就至少有了一个t串
//但有可能本来s串里有t串的部分字母。所以刚开始要存一个s串字符的多少的数组
{
z++;
z%=t.size();
if(hash[t[z]-97] > 0)//如果t[z]这个位置s串中有这个字符就跳过
{
hash[t[z]-97]--;//就把这个字符--
i--;//回到上一个位置 下一个位置还是?
}
else
s[i]=t[z];
}
}
cout<<s<<endl;
}
相关文章推荐
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D. Suitable Replacement【二分】
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D Suitable Replacement 贪心
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 D. Suitable Replacement
- Educational Codeforces Round 25 B. Five-In-a-Row
- Educational Codeforces Round 25 题解
- Educational Codeforces Round 25 B. Five-In-a-Row
- Educational Codeforces Round 25
- Educational Codeforces Round 25 A. Binary Protocol