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; }
  • 相关阅读:
    Python3开发环境及基本语法(一)
    PostMan接口测试工具
    Jmeter接口测试(三)
    Jmeter接口测试(二)
    Jmeter接口测试(一)
    Fiddler抓包工具
    HTTP协议数据结构分析
    CentOS7种搭建FTP服务器
    CentOS7 apache创建虚拟路径
    CentOS7上搭建WordPress博客
  • 原文地址:https://www.cnblogs.com/xiaoguapi/p/10392477.html
Copyright © 2011-2022 走看看