zoukankan      html  css  js  c++  java
  • Codeforces Round #324 (Div. 2) Marina and Vasya 乱搞推理

    原题链接:http://codeforces.com/contest/584/problem/C

    题意:

    定义$f(s1,s2)$为$s1,s2$不同的字母的个数。现在让你构造一个串$s3$,使得$f(s1,s3)=f(s2,s3)=t$。

    题解:

    设$s1,s2$共有$a$个相同的字母,共有$b$个不同的字母。现在在这$a$个相同的字母中,我让$s3$有$x$个字母和$s1,s2$不同;在这$b$个不同的字母中,我让$s3$有$y$个字母和$s1,s2$都不相同,有$z$个字母和$s1$不同。则我们可以得到以下的约束关系:

    $$f(s1,s3)=x+y+z=t$$

    $$f(s2,s3)=x+y+(b-y-z)=x+b-z=t$$

    $$x in [0,a]$$

    $$y in [0,b]$$

    $$z in [0,b]$$

    $$y+z in [0,b]$$

    然后通过枚举$x$,检查$y,z$就能得到答案了。

    代码:

    #include<iostream>
    #include<cstring>
    #include<string>
    #define MAX_N 100005
    using namespace std;
    
    int n,t;
    string s1,s2;
    
    int ans[MAX_N];
    
    int main() {
        cin.sync_with_stdio(false);
        cin >> n >> t >> s1 >> s2;
        int a = 0, b = 0;
        for (int i = 0; i < n; i++) {
            a += (s1[i] == s2[i]);
            b += (s1[i] != s2[i]);
        }
        for (int x = 0; x <= a; x++) {
            int z = b + x - t;
            int y = t - z - x;
            if (z < 0 || z > b || y < 0 || y > b || y + z > b)continue;
            for (int i = 0; i < n; i++) {
                if (s1[i] == s2[i]) {
                    if (x)ans[i] = (s1[i] == 'z' ? 'a' : s1[i] + 1), x--;
                    else ans[i] = s1[i];
                }
                else {
                    if (y) {
                        int tmp = 'a';
                        while (tmp == s1[i] || tmp == s2[i])tmp++;
                        ans[i] = tmp;
                        y--;
                    }
                    else if (z)ans[i] = s1[i], z--;
                    else ans[i] = s2[i];
                }
            }
            for (int i = 0; i < n; i++)cout << (char) ans[i];
            cout << endl;
            return 0;
        }
        cout << -1 << endl;
        return 0;
    }
  • 相关阅读:
    Google maps not working IE11
    谷歌地图插件
    杨辉三角python的最佳实现方式,牛的不能再牛了
    今日头条推荐算法原理全文详解
    项目启动大会要点
    学金融应该看的书籍
    【从0到1】经典语录
    appium学习链接记录
    Axure-计算输入字数
    如何提升个人专业能力
  • 原文地址:https://www.cnblogs.com/HarryGuo2012/p/4858609.html
Copyright © 2011-2022 走看看