Codeforces Round #324 (Div. 2)C

时间:2022-11-16 13:18:05

C. Marina and Vasya
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
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 a and 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.

Input
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.

Output
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.

Examples
input
3 2
abc
xyc
output
ayd
input
1 0
c
b
output
-1

思路比较简单,先把不同的换成相同的有几个
然后两个相等的直接落下来并且m–
其他的就把q串落下来m个,w也一样
如果个数不够就-1

思路好像

疯狂wa

模拟题神烦

#include<iostream>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
string q, w, e;
int main()
{
    int n, m;
    cin >> n >> m;
    m = n - m;
    cin >> q >> w;
    e = q;
    int yy = 0;
    for (int a = 0;a < n;a++)
    {
        if (q[a] == w[a] && m>0)
        {
            m--;
            e[a] = q[a];
            yy++;
        }
        else e[a] = '.';
    }
    if (yy + m + m > n)
    {
        cout << -1;
        return 0;
    }
    int jj = 0;
    int ee = m;
    for (int a = 0;a < n;a++)
    {
        if (q[a] == w[a])continue;
        jj++;
        if (jj > m + ee)
        {
            for (int b = 'a';b <= 'z';b++)
            {
                if (b != q[a] && b != w[a])
                {
                    e[a] = b;
                    break;
                }
            }
        }
        else if (jj > m)e[a] = w[a];
        else e[a] = q[a];
    }
    for (int a = 0;a < n;a++)
    {
        for (int b = 'a';b <= 'z';b++)
        {
            if (e[a] == '.'&&b!=q[a]&&b!=w[a])
            {
                e[a] = b;
                break;
            }
        }
    }
    cout << e;
}