博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces1141D题解(暴力+贪心)
阅读量:7259 次
发布时间:2019-06-29

本文共 1727 字,大约阅读时间需要 5 分钟。

给出两个长度为 n(1≤n≤150000)的仅含有小写字母和'?'的字符串,询问两个字符串最多能有几对匹配的字符。

(每个字母都可以与和它相同的字符匹配,'?'可以与任意字符匹配,匹配与位置无关)
输出最大匹配对数,以及每一对中两个字符在字符串中的位置

/* * CF1141D * Created by hao on 2019/4/11. * 给出两个长度为 n(1≤n≤150000)的仅含有小写字母和'?'的字符串,询问两个字符串最多能有几对匹配的字符。 * (每个字母都可以与和它相同的字符匹配,'?'可以与任意字符匹配,匹配与位置无关) * 输出最大匹配对数,以及每一对中两个字符在字符串中的位置 */#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define ll long long#define mp make_pair#define ff first#define ss second#define pub push_back#define pob pop_back()#define pof pop_front()vector
l[250], r[250];vector
> ans;int main() { ios::sync_with_stdio(false); int n; cin >> n; string s1, s2; cin >> s1 >> s2; //让每一个字符对应自己的位置(下表+1) for (int i = 0; i < s1.length(); i++) { l[(int) s1[i]].pub(i + 1); } for (int i = 0; i < s2.length(); i++) { r[(int) s2[i]].pub(i + 1); } //记录'?'对应的int值,防止'?'和'?'优先匹配 int q = (int) '?'; for (int i = 0; i < 250; i++) { //等于'?'时跳过,防止'?'优先匹配。 if (i == q) continue; //匹配相同的字符,比如'a','a','b','b' while (!l[i].empty() && !r[i].empty()) { ans.pub(mp(l[i].back(), r[i].back())); l[i].pob; r[i].pob; } //让第一个字符串的'?'和第二个字符串的任意字符匹配 while (!l[q].empty() && !r[i].empty()) { ans.pub(mp(l[q].back(), r[i].back())); l[q].pob; r[i].pob; } //让第一个字符串的任意字符和第二个字符串的'?'匹配 while (!l[i].empty() && !r[q].empty()) { ans.pub(mp(l[i].back(), r[q].back())); l[i].pob; r[q].pob; } } //在所有的除去'?'的字符都处理完之后,处理'?'和'?'的情况 while (!l[q].empty() && !r[q].empty()) { ans.pub({l[q].back(), r[q].back()}); l[q].pob; r[q].pob; } //输出匹配对数 cout << ans.size() << endl; //输出匹配的对数的相应的两个位置 for (int i = 0; i < ans.size(); i++) { cout << ans[i].ff << " " << ans[i].ss << endl; } return 0;}

转载地址:http://khkdm.baihongyu.com/

你可能感兴趣的文章
什么是OOP(面向对象编程)?
查看>>
12. Integer to Roman
查看>>
使用noode.js创建一个服务器
查看>>
封装框架的实践
查看>>
5分钟学会开发浏览器扩展
查看>>
最新阿里内推Java后端面试题
查看>>
【修真院“善良”系列之十】初级Java程序员的学习路线
查看>>
Spring Cloud -Zuul
查看>>
聊聊storm的LoggingMetricsConsumer
查看>>
Ghost配置1——删除社交Link
查看>>
keras入门(三)搭建CNN模型破解网站验证码
查看>>
如何编写Go代码
查看>>
慕课网_《RabbitMQ消息中间件极速入门与实战》学习总结
查看>>
一个基于Node.js的本地快速测试服务器
查看>>
【go网络编程】-RPC编程
查看>>
Notadd 4.0.0-alpha.1 基于 nest.js 的微服务架构
查看>>
使用Jest测试JavaScript (入门篇)
查看>>
作为JavaScript开发人员,这些必备的VS Code插件你都用过吗?
查看>>
这个男人让你的爬虫开发效率提升8倍
查看>>
PHP代码静态分析工具PHPStan
查看>>