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; }
  • 相关阅读:
    Xamarin.FormsShell基础教程(3)Shell项目构成
    Xamarin.FormsShell基础教程(2)创建Shell解决方案
    Xamarin.Forms Shell基础教程(1)
    点击按钮,返回顶部
    三角形(css3)
    改变字体大小的媒体查询代码封装
    将毫秒格式化为分钟和秒 ,并补0
    节流函数
    打乱数组方法
    css使用总结
  • 原文地址:https://www.cnblogs.com/xiaoguapi/p/10392477.html
Copyright © 2011-2022 走看看