Codeforces Round #547 (Div. 3) D. Colored Boots (贪心,模拟)
2024-09-02 15:41:58
题意:有两个字符串,两个字符串中的相同字符可以相互匹配,\(?\)可以和任意字符匹配,输出最大匹配的字符数量和它们分别两个字符串中的位置.
题解:很容易贪心,我们先遍历第一个字符串,然后在第二个字符串中去找与当前位置相同的字符,这个过程我们可以先将每个字符的位置存下来然后再操作,遍历完后再遍历字符和问号,最后是问号和问号匹配,具体看代码吧,主要是想学习一下用队列来模拟操作(会方便很多).
代码:
int n;
string l,r;
queue<int> h1[30],h2[30];
vector<PII> ans; int main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n;
cin>>l>>r; rep(i,0,n-1){
if(l[i]=='?') h1[0].push(i+1);
else h1[l[i]-96].push(i+1);
if(r[i]=='?') h2[0].push(i+1);
else h2[r[i]-96].push(i+1);
} rep(i,1,26){
int mi=min(h1[i].size(),h2[i].size());
rep(j,1,mi){
ans.pb({h1[i].front(),h2[i].front()});
h1[i].pop();
h2[i].pop();
}
} rep(i,1,26){
int mi=min(h1[0].size(),h2[i].size());
rep(j,1,mi){
ans.pb({h1[0].front(),h2[i].front()});
h1[0].pop();
h2[i].pop();
}
} rep(i,1,26){
int mi=min(h1[i].size(),h2[0].size());
rep(j,1,mi){
ans.pb({h1[i].front(),h2[0].front()});
h1[i].pop();
h2[0].pop();
}
} int mi=min(h1[0].size(),h2[0].size());
rep(i,1,mi){
ans.pb({h1[0].front(),h2[0].front()});
h1[0].pop();
h2[0].pop();
} cout<<(int)ans.size()<<'\n'; rep(i,0,(int)ans.size()-1) cout<<ans[i].fi<<' '<<ans[i].se<<'\n'; return 0;
}
最新文章
- js基础
- PHP $_SERVER详解
- JAVA数据压缩简单测试
- SQL Server里的闩锁介绍
- C#获取CPUID(MD5输出),网卡ID,主DNS,备用DNS
- C#中的两种debug方法
- React学习笔记(三) 组件传值
- webform开发经验(一):Asp.Net获取Checkbox选中的值
- fcntl,F_GETFL,F_SETFL,flags
- 一次使用Eclipse Memory Analyzer分析Tomcat内存溢出(转)
- wordpress建站过程5——footer.php
- SQL Server 存储过程进行分页查询
- 学习Android路上的一些感慨和总结,慢慢来,比较快!
- Spring Boot @EnableWebMvc 与 mvc 配置
- 引擎设计跟踪(九.14.3.1) deferred shading: Depthstencil as GBuffer depth
- fiddler学习总结--autoresponder替换资源
- Json 转 dynamic
- HTML中select的option设置selected=";selected";无效的解决方案
- Oracle 批量修改某个用户下表的表空间
- ffmpeg查看音频文件信息