Codeforces 584 C Marina and Vasya【构造+贪心】
来源:互联网 发布:好莱坞爱情电影知乎 编辑:程序博客网 时间:2024/06/03 05:41
题目大意:
给你n个长度的两个字符串 s1,s2,让你找到一个串,使得这个串和s1对应位子有t个字符不相同,和s2也有t个字符不相同(,输出任意一个解即可。
思路:
1、首先,使得有t个字符不相同,其实就是相当于让我们找一个串使得这个串对应s1和s2有n-t个字符相同。
2、那么我们分类讨论:
①如果s1和s2相同的字符(当然位子也要相同)的个数==n-t,那么我们输出的时候,对应相同的字符直接输出,否则输出一个字符和s1不同,和s2也不同(对应随便枚举三个字母就行,因为s1这个位子上有一个字母,s2这个位子上也有一个字母,只要我们枚举出三个字母就一定会有一个字母和这两个字母不同)。
②如果s1和s2相同的字符大于n-t,那么我们对应输出的时候,相同的字符输出n-t个即可,其余的输出与s1不同,与s2也不同的一个字符。
③如果s1和s2相同的字符小于n-t,那么对应输出的字符串还需要和s1相同的字符的个数为:yua=n-t-相同的数量,当然同理,还需要和s2相同的字符的个数也是:yub=n-t-相同的数量,那么不难理解,如果yua+yub>n-相同的个数,那么就要输出-1了,因为剩下的字符串的长度,不够满足题目要求了。
相反,如果yua+yub<=n-相同的个数,那么我们对应相同的字符直接输出,其余要输出yua个字符串a中的字符,yub个字符串b中的字符,再其余的,就输出一个字符和s1不同,和s2也不同的字符即可。
Ac代码:
#include<stdio.h>#include<string.h>using namespace std;char a[100050];char b[100050];char ans[100050];int vis[100050];int n,t;int main(){ while(~scanf("%d%d",&n,&t)) { memset(vis,0,sizeof(vis)); scanf("%s%s",a,b); int m=n-t; int conts=0; for(int i=0;i<n;i++) { if(a[i]==b[i]) { vis[i]=1; conts++; } } if(conts==m) { for(int i=0;i<n;i++) { if(vis[i]==1)printf("%c",a[i]); else { if('x'!=a[i]&&'x'!=b[i])printf("x"); else if('y'!=a[i]&&'y'!=b[i])printf("y"); else if('z'!=a[i]&&'z'!=b[i])printf("z"); } } printf("\n"); } else if(conts>=m) { int contss=0; for(int i=0;i<n;i++) { if(vis[i]==1&&contss<m)printf("%c",a[i]),contss++; else { if('x'!=a[i]&&'x'!=b[i])printf("x"); else if('y'!=a[i]&&'y'!=b[i])printf("y"); else if('z'!=a[i]&&'z'!=b[i])printf("z"); } } printf("\n"); } else { int yua=m-conts; int yub=m-conts; if(yua+yub>n-conts) { printf("-1\n"); continue; } for(int i=0;i<n;i++) { if(vis[i]==1)printf("%c",a[i]); else { if(yua>0) { printf("%c",a[i]); yua--; } else if(yub>0) { printf("%c",b[i]); yub--; } else { if('x'!=a[i]&&'x'!=b[i])printf("x"); else if('y'!=a[i]&&'y'!=b[i])printf("y"); else if('z'!=a[i]&&'z'!=b[i])printf("z"); } } } printf("\n"); } }}
0 0
- Codeforces 584 C Marina and Vasya【构造+贪心】
- Codeforces 584C Marina and Vasya 【构造】
- CodeForces 584C - Marina and Vasya(构造)
- codeforces 324# C. Marina and Vasya (贪心)
- Codeforces 584C Marina and Vasya
- codeforces 584C Marina and Vasya
- Codeforces 584C Marina and Vasya
- codeforces 584C Marina and Vasya
- Codeforces #324 Div2 C Marina and Vasya(构造)
- 【打CF,学算法——二星级】Codeforces 584C Marina and Vasya (简单构造)
- Codeforces Round #324 (Div. 2) 584C. Marina and Vasya
- CodeForces - 584C Marina and Vasya (模拟)找规律
- Codeforces Round #324 C Marina and Vasya
- 贪心 Codeforces584C Marina and Vasya
- Codeforces Round #324 (Div. 2) C. Marina and Vasya(贪心)
- Codeforces 584 C. Marina and Vasya (Codeforces Round #324 (Div. 2))
- Codeforces Round #324 (Div. 2)C. Marina and Vasya
- Codeforces Round #324 (Div. 2) C. Marina and Vasya
- 51nod oj 1043 幸运号码 【数位DP】
- lvm恢复数据
- 4.跟我学solr---SolrRequestHandler详解
- 【OpenCV学习笔记 005】 操作像素
- 对Session的理解
- Codeforces 584 C Marina and Vasya【构造+贪心】
- [JSOI2008]星球大战starwar
- 16年9月14日谈
- Python2.7当中《笨办法学 Python》ex13.py报错的处理办法
- Android ADB常用命令整理
- Java中的main()方法详解
- C++实现两个大数相减
- 18 UI美化自定义主题样式代码
- windows下让自己的程序调用caffe库