题意:长度为n的字符串s1,s2,s3。f(s1, s3) = f(s2, s3) = t,
s1,s3有t个字符不同,s2,s3有t个字符不同。给你 n,t,s1,s2求s3。
如果没有输出-1。
分析:s1,s2相同的sum个 如果 n-t-sum>(n-sum)/2
不存在这样的s3 ,-1。
#include
#include
#include
using namespace std;
const int N=100005;
char s1[N],s2[N],s3[N];
int b[N];
int main()
{
int t,n,i,a,sum=0;
scanf("%d%d",&n,&t);
scanf("%s%s",s1,s2);
for(i=0; i
(n-sum)/2) printf("-1\n");
else
{
if(sum>=n-t)
{
int k=n-t;
for(i=0; i
0) { if(b[i]==0) { if((s1[i]-'a'+1)%26==s2[i]-'a') s3[i]=(s1[i]-'a'+2)%26+'a'; else s3[i]=(s1[i]-'a'+1)%26+'a'; } else { s3[i]=s1[i]; k--; } } else { if((s1[i]-'a'+1)%26==s2[i]-'a') s3[i]=(s1[i]-'a'+2)%26+'a'; else s3[i]=(s1[i]-'a'+1)%26+'a'; } } } else { int ss1=n-t-sum,ss2=n-t-sum; for(i=0; i
0) { s3[i]=s1[i]; ss1--; } else if(ss2>0) { s3[i]=s2[i]; ss2--; } else { if((s1[i]-'a'+1)%26==s2[i]-'a') s3[i]=(s1[i]-'a'+2)%26+'a'; else s3[i]=(s1[i]-'a'+1)%26+'a'; } } } } printf("%s\n",s3); } return 0; }