zoukankan      html  css  js  c++  java
  • Codeforces 584C Marina and Vasya(构造)

    题意是构造一个字符串,长度为n,和s1,s2不同的个数均为t,与s1和s2不同的个数均为t说明和它们相同的个数为n-t.那我们就根据题意构造出和它们相同个数为n-t

    什么情况下会无解呢,我们用sum表示s1和s2相同的字符个数,如果sum小于n-t,那么对应输出的字符串还需要和s1相同的字符的个数为:cnta=n-t-相同的数量,当然同理,还需要和s2相同的字符的个数也是:cntb=n-t-相同的数量

    即cnta=n-t-sum,cntb=n-t-sum,当cnta+cntb>n-sum时,即2*sum+(n-sum)<2*(n-t)时无解,直接输出-1.

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 1e5 + 5;
    char a[N], b[N], c[N];
    int cnt;
    int main()
    {
    	int n, t;
    	cin >> n >> t;
    	scanf("%s", a);
    	scanf("%s", b);
    	int sum = 0;
    	for (int i = 0; a[i]; i++) 
    		if (a[i] == b[i])   
                 sum++;//相同的个数 int m = n - t; if (sum + (n - sum) / 2 < m) { puts("-1"); return 0; } int k = min(sum, m); int cnt = 0; for (int i = 0, cnt = 1; a[i] && cnt <= k; i++) if (a[i] == b[i]) c[i] = a[i], cnt++;//和a,b都相同的直接输出 int s = m - k;//cnta和cntb for (int i = 0, cnt = 1; a[i] && cnt <= s; i++) if ((a[i] != b[i]) && !c[i]) c[i] = a[i], cnt++;//构造出cnta个仅和a相同的字符 for (int i = 0, cnt = 1; a[i] && cnt <= s; i++) if ((a[i] != b[i]) && !c[i]) c[i] = b[i], cnt++;//构造出cntb个仅和b相同的字符 for (int i = 0; a[i]; i++)//剩下构造出和a,b都不相同的字符 { if (!c[i]) { for (char j = 'a'; j <= 'z'; j++) if (j != a[i] && j != b[i]) { c[i] = j; break; } } } printf("%s", c); return 0; }
  • 相关阅读:
    ajaxUtil
    AJAX学习-----与 XML 文件进行交互式通信
    AJAX-----数据库实例
    AJAX学习-----服务器响应
    AJAX学习-----ASP/PHP 请求实例
    scrapy 反扒措施
    scrapy 中文官网学习
    scrapy 破解图片网站防盗链下载
    scrapy 随机中间件配置
    flask 邮件发送
  • 原文地址:https://www.cnblogs.com/xiaoguapi/p/10392477.html
Copyright © 2011-2022 走看看