题意:从两串长度为n的字符串中找到相同的字符,问号可以和任意字符匹配,然后输出最多可以匹配多少个字符(每个字符最多匹配一次),输出个数x并在接下来x行中输出x对相匹配的字符分别在两串字符中的位置。

题解:stl的运用,开始就用了个vector,没写出来,然后参考了 https://www.cnblogs.com/YDDDD/p/10570981.html

这里的做法。用map<char,queue<int> >来储存第一个串中各个字母的所有位置,然后对第二个串进行循环处理,先处理不是‘?’的字符,如果字符在第一个串中存在或者第一个串中还有‘?’剩余,那就把这个字符的位置和map[' ']的队列中第一个元素(即第一个串中的位置)存入pair<int,int>数组中,同时pop出队列中的第一个元素。接着再处理‘?’,最后把pair数组中的元素依次输出。

#include <iostream>
#include <bits/stdc++.h>
using namespace std;int main()
{ios::sync_with_stdio(false);int n;int x[30],y[30];memset(x,0,sizeof(x));memset(y,0,sizeof(y));map<char,queue<int> > imap;pair<int,int> ans[150010];string a,b;cin>>n;cin>>a;for(int i=0;i<n;i++)imap[a[i]].push(i+1);cin>>b;int cnt=0;for(int i=0;i<n;i++){if(b[i]!='?'){if(imap[b[i]].size()>0){ans[cnt].second=i+1;ans[cnt++].first=imap[b[i]].front();imap[b[i]].pop();}else{if(imap['?'].size()>0){ans[cnt].second=i+1;ans[cnt++].first=imap['?'].front();imap['?'].pop();}}}}for(int i=0;i<n;i++){bool flag=false;if(b[i]=='?'){for(int j=0;j<26;j++){if(imap[char('a'+j)].size()>0){flag=true;ans[cnt].second=i+1;ans[cnt++].first=imap[char('a'+j)].front();imap[char('a'+j)].pop();break;}}if(flag==false){if(imap['?'].size()>0){ans[cnt].second=i+1;ans[cnt++].first=imap['?'].front();imap['?'].pop();}}}}cout<<cnt<<endl;for(int i=0;i<cnt;i++)cout<<ans[i].first<<' '<<ans[i].second<<endl;return 0;
}

[CodeForces-1141D] Colored Boots相关推荐

  1. CodeForces - 1141D Colored Boots(暴力+水题)

    题目链接:点击查看 题目大意:给出两个字符串s和t,两个字符串中相同的字母可以匹配,问号可以和任意字符匹配,现在问两个字符串最多能匹配多少个字符,并给出匹配的下标 题目分析:挺好玩的一道水题,大体思路 ...

  2. Colored Boots

    https://codeforces.com/contest/1141/problem/D 题解: 记录第一个字符串每个字母的位置 历遍第二个字符串,先跳过?字符,因为?不可以与?字符配对先,造成浪费 ...

  3. codeforces-D. Colored Boots

    '?'可以匹配所有的字符 问最多有多少个匹配的字符对 贪心 s1串和s2串中只要有一样的字符就凑一对 剩下的用'?'和另一串中非'?'的匹配 剩下的两串'?'匹配 这样就是最多的了 #include ...

  4. codeforces 424E Colored Jenga (状态压缩,概率dp用hash记忆优化搜索)

    题意: 给出以最多6层的积木,每层可以由三个木块拼成,总共有三种颜色的木块,开始时给出了积木的排列情况,我们每次可以从积木中抽一块木块,抽木块的规则是投骰子,骰子分别投到red,blue,green, ...

  5. CodeForces - 780C Andryusha and Colored Balloons(dfs染色)

    Andryusha goes through a park each day. The squares and paths between them look boring to Andryusha, ...

  6. C. Colored Balls: Revisited codeforces 1728A

    Problem - 1728A - Codeforces 题目大意:有n个袋子,每个袋子有cnt个球,每次可以拿出两个不同袋子的球,问最后可能剩下的是编号为多少的袋子 思路:奇数个球每次拿2个,最后至 ...

  7. codeforces Kyoya and Colored Balls

    题解见:http://blog.csdn.net/libin56842/article/details/46650209 注意这里的组合数取模~~~ 1 /*Author :usedrose */ 2 ...

  8. Codeforces Round #336 (Div. 2) D. Zuma 记忆化搜索

    D. Zuma 题目连接: http://www.codeforces.com/contest/608/problem/D Description Genos recently installed t ...

  9. 【Codeforces】 Round #374 (Div. 2)

    Position:http://codeforces.com/contest/721 我的情况 开始还是rank1,秒出C.(11:00机房都走光了,我ma到11:05才走,只打了一个小时) 结果.. ...

最新文章

  1. 如何理解Android中的xmlns
  2. win7关闭开机启动项_电脑开机全是各种广告?来看看我怎么解决的吧
  3. python报错TabError: inconsistent use of tabs and spaces in indentation解决方案
  4. LBP特征的理论介绍
  5. JavaScript window.getComputedStyle()
  6. Session与Cookie的安全问题
  7. c++ 获取linux系统信息_linux系统c程序移植
  8. 36.rustc编译参数.txt
  9. 002 在大数据中基础的llinux基本命令
  10. LNMP1.4环境中安装fileinfo插件
  11. python调用.so动态链接库,运行时报错 liblapack.so.3: undefined symbol: icamin_k
  12. php server 不支持,SQL server不支持utf8 php却用utf8的矛盾问题解决方法
  13. HashMap底层查找的时间复杂度
  14. [The Diary] 11.9 The Final Day
  15. C语言学习-翁凯(第四章笔记)
  16. ad采样正弦电压计算c语言程序,TMS320F2812 DSP编程之AD采样精度的校准算法(转)...
  17. Ocata Neutron代码分析(一)——Neutron API启动过程分析
  18. php订阅号发送消息,php实现微信公众号主动推送消息
  19. Python骚操作—自动刷抖音
  20. 手把手教你,如何用Python做副业月入10000+!

热门文章

  1. 千锋培训--android ddms中查看线程释疑
  2. android 表情的输入 Unicode实现表情展示 无需图片素材及相关解析
  3. 15.unsafe类的CAS是怎么保证原子性的?
  4. Apple Car将提前“出世”,华为、百度准备好了吗?
  5. 如何在微信中调试时 打开v Console
  6. 【2020年1月-24我和小峰子的聊天】
  7. 【5029】理性和感性哪个对做产品更重要
  8. 03-Linux-Shell
  9. 成都Java培训完什么水平?
  10. Django静态文件的管理