Codeforces 584C - Marina and Vasya (简单字符串构造
C. Marina and Vasya
Marina loves strings of the same length and Vasya loves when there is a third string, different from them in exactly t characters. Help Vasya find at least one such string.
More formally, you are given two strings s1, s2 of length n and number t. Let's denote as f(a, b) the number of characters in which strings aand b are different. Then your task will be to find any string s3 of length n, such that f(s1, s3) = f(s2, s3) = t. If there is no such string, print - 1.
The first line contains two integers n and t (1 ≤ n ≤ 105, 0 ≤ t ≤ n).
The second line contains string s1 of length n, consisting of lowercase English letters.
The third line contain string s2 of length n, consisting of lowercase English letters.
Print a string of length n, differing from string s1 and from s2 in exactly t characters. Your string should consist only from lowercase English letters. If such string doesn't exist, print -1.
3 2
abc
xyc
ayd
1 0
c
b
-1
题意:给出长度为n 和不同字符个数t 以及两个长度为n的字符串.f(a,b) 表示ai!=bi的和
求一个字符串f(s1,s3)==f(s2,s3)==t
思路:我们先构造出一个s3 它每个位置都不同于s1,s2,然后d1=d2=n-t表示需要相同的字符个数,然后直接替换s3的字符即可
最后判断 d1 与 d2是否为0即可输出答案
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pll; #define eps 1e-6 #define pb push_back const int INF = 0x3f3f3f3f; const int maxn = 100000+5; const int MOD = 1e9+7; int f[maxn]; int main() { int n,t; string a,b,s; cin>>n>>t; cin>>a>>b; for(int i=0; i<n; i++) { for(char c='a'; c<='z'; c++) { if(a[i]==c||b[i]==c) continue; s.push_back(c); break; } } int d1=n-t,d2=n-t; for(int i=0; i<n; i++) { if(d1==0) break; if(a[i]==b[i]) { s[i]=a[i]; d1--; d2--; f[i]=1; } } for(int i=0; i<n; i++) { if(f[i]) continue ; if(d1) { d1--; s[i]=a[i]; f[i]=1; } else if(d2) { d2--; s[i]=b[i]; f[i]=1; } } if(!d1&&!d2) cout<<s<<endl; else cout<<-1<<endl; }
总结:字符串构造题写得太少emm
PS:摸鱼怪的博客分享,欢迎感谢各路大牛的指点~