Problem Description
  小明和他的好朋友小西在玩一个新的游戏,由小西给出一个由小写字母构成的字符串,小明给出另一个比小西更长的字符串,也由小写字母组成,如果能通过魔法转换使小明的串和小西的变成同一个,那么他们两个人都会很开心。这里魔法指的是小明的串可以任意删掉某个字符,或者把某些字符对照字符变化表变化。如:
    小西的串是 abba;
    小明的串是 addba;
    字符变化表 d b (表示d能转换成b)。
  那么小明可以通过删掉第一个d,然后将第二个d转换成b将串变成abba。

现在请你帮忙判断:他们能不能通过魔法转换使两个人的串变成一样呢?


Input
  首先输入T,表示总共有T组测试数据(T <= 40)。
  接下来共T组数据,每组数据第一行输入小西的字符串,第二行输入小明的字符串(数据保证字符串长度不超过1000,小明的串的长度大于等于小西的,且所有字符均为小写字母)。接着输入字母表,先输入m,表示有m个字符变换方式(m< = 100),接着m行每行输入两个小写字母,表示前一个可以变为后一个(但并不代表后一个能变成前一个)。


Output
  对于每组数据,先输出Case数。
  如果可以通过魔法转换使两个人的串变成一样,输出“happy”,
  否则输出“unhappy”。
  每组数据占一行,具体输出格式参见样例。


Sample Input

2
abba
addba
1
d b
a
dd
0

Sample Output

Case #1: happy
Case #2: unhappy

Source

2013金山西山居创意游戏程序挑战赛——初赛(1)


解题思路
本题实际上是要找 母串中的字符在相对位置不变的情况下,是否可以经过组合(删除或转变)形成目标子串。
什么叫相对位置?比如母串为adcd要始终在a的后面,c始终要在最后一个位置,这就叫相对位置。

因为字符串不长,所以时我们可以使用暴力匹配方式来解决。大致解题流程如下:

实现代码

#include<iostream>
#include<cstring>
#include<map>using namespace std;bool magicstr(char s1[], char s2[], multimap<char, char> r){int i,j;// index:记录小明字符串的下标// num:记录两个字符串匹配成功的字符数int index = 0, num = 0;int len1 = strlen(s1);int len2 = strlen(s2);for (i = 0; i < len1; i++){// 标记位,判断通过规则转换是否可以匹配成功bool flag = false;for (j = index; j < len2; j++){if (s1[i] == s2[j]){index = j+1; num++;break;}else{if (r.size() != 0){multimap<char, char>::iterator it;for (it = r.begin(); it != r.end(); it++){if (it->first == s2[j] && it->second == s1[i]){index = j+1;  num++;flag = true;break; //跳出规则转换的for循环}}}if (flag) break; //跳出遍历小明字符串的for循环}}}// 匹配成功的字符串跟小西字符串长度一样的话就trueif (num == len1) return true;return false;
}int main(){char s1[1001], s2[1001]; //接收输入的字符串int t;int i, j, m;char c1, c2; // 接收规则中的那两个字符cin >> t;for (i = 0; i < t; i++){// 存放规则的mapmultimap<char, char> rule;scanf("%s%s", s1, s2);cin >> m;for (j = 0; j < m; j++){cin >> c1 >> c2;// 将每个规则放在map中rule.insert(pair<char, char>(c1, c2));}if (magicstr(s1, s2, rule)){cout << "Case #"<< i+1 <<": happy" << endl;}else{cout << "Case #" << i+1 << ": unhappy" << endl;}}return 0;
}

程序详情流程图如下:





这是个人的做题的一些想法及代码实现。已AC,如果小伙伴有更好的思路可以在评论区分享。

学无止境,加油!

ACM训练合集---HDU4545 魔法串相关推荐

  1. 敲重点!最全大模型训练合集!

     01  大模型训练总体架构 如何利用计算中心成千上百的AI加速芯片的集群,训练参数量超过百亿的大规模模型?并行计算是一种行之有效的方法,除了分布式并行计算相关的技术之外,其实在训练大模型的过程还会融 ...

  2. 『ACM』ACM模板合集

    写在前面: 第一年小白拿铜牌,第二年队友出走,加上疫情原因不能回校训练导致心底防线彻底崩盘,于是选择退役. 自从退役之后,一直想我打了那么久的ACM,什么也没留下觉得很难受,突然想到我打ACM的时候, ...

  3. 蓝桥杯算法训练合集一 1.印章2.拿金币3.数字游戏4.无聊的逗5.礼物

    目录 1.印章(动态规划) 2.拿金币(动态规划) 3.数字游戏(搜索) 4.无聊的逗(状态搜索) 5.礼物(二分法和前缀和) 1.印章(动态规划) 问题描述 共有n种图案的印章,每种图案的出现概率相 ...

  4. 蓝桥杯算法训练合集十三 1.P06022.P07033.逗志芃的危机4.唯一的小可爱5.JOE的矩阵

    目录 1.P0602 2.P0703 3.逗志芃的危机 4.唯一的傻子 5.JOE的矩阵 1.P0602 问题描述 编写一个程序,输入一个4位的自然数,将组成该数的各位数字重新排列,形成一个最大数和一 ...

  5. 蓝桥杯算法训练合集三 1.车的位置2.24点3.最大分解4.RP大冒险5.士兵杀敌(二)

    目录 1.车的位置(搜索) 2.24点(搜索) 3.最大分解(贪心) 4.RP大冒险 5.士兵杀敌(二) 1.车的位置(搜索) 问题描述 在一个n*n的棋盘中,每个格子中至多放置一个车,且要保证任何两 ...

  6. PAT甲级训练合集(1-70)

    本章题解跳转 考点 P1001 数字的数组表示和处理 P1002 多项式的数组表示和处理 P1003 深度优先搜素 P1004 深度优先搜素 P1005 哈希表 P1006 P1007 数组子区间求和 ...

  7. 蓝桥杯算法训练合集四 1.p0802 2.A的B的C次方次方 3.出现次数最多的整数 4.成绩分级 5.台阶问题

    目录 1.p0802 2.A的B的C次方次方 3.出现次数最多的整数 4.成绩分级 5.台阶问题 1.p0802 问题描述 编写一个字符串表达式求解函数int expression(char* s); ...

  8. 蓝桥杯算法训练合集十二 1.比较2.计算最小公倍数3.比赛安排4.潜伏者5.P0702

    目录 1.比较 2.计算最小公倍数 3.比赛安排 4.潜伏者 5.P0702 1.比较 问题描述 给出一个n长的数列,再进行m次询问,每次询问询问两个区间[L1,R1],[L2,R2], 询问数列第L ...

  9. 蓝桥杯算法训练合集十七 1.数字反转2.试题39713.矮人采金子4.筛法5.机器指令

    目录 1.数字反转 2.试题3971 3.矮人采金子 4.筛法 5.机器指令 1.数字反转 问题描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为 ...

最新文章

  1. 从《2018年全球创新指数报告》看中国创新力!
  2. 【内网安全】域横向网络传输应用层隧道技术
  3. MySQL / schema的概念
  4. 使用CodeIgniter
  5. php广告任务网源码_THINKPHP仿我爱广告任务网|任务网站源码下载基于PHP+MYSQL的在线广告打码任务网站源码...
  6. python中range语法
  7. oracle执行runstats,Oracle编程艺术--配置环境:runstats脚本
  8. 海思HI3536 H265解码处理器简介
  9. Word2016如何插入公式?Word2016插入公式方法
  10. 【UE4】使用Composure插件在场景或UI中实时显示CineCamera画面
  11. educoder/python第1关:学习-Python集合之应用一
  12. caffe创建网络_Caffe2-创建自己的网络
  13. 域名里gTLD、new gTLD、ccTLD的含义之间的关系
  14. python飞机大战概要设计_飞机大战大学课程设计初稿.doc
  15. bzoj2096 pilots
  16. win7 系统下实现音量控制
  17. # define xxxx(x,y) x##y引发的感想
  18. LeetCode T36 Valid Sudoku
  19. 直销系统模式开发流程详解
  20. 并查集---找朋友圈个数问题,连通度问题,等的有效算法

热门文章

  1. 常见的5个SQL面试问题
  2. B2C电商项目(第一天、项目搭建、Restful风格、拼音API、txMybatis、品牌增删改查、Swagger)
  3. 有赞要执行996工作制 工作与家庭平衡不好可离婚是白鸦拿华为举例
  4. “少走四十年弯路”,年轻人已经考虑养老了?
  5. poi-tl实现自定义RenderPolicy实现对表格进行列表
  6. 运动会方阵计算机学院,大学运动会方阵入场词
  7. 并发工具类使用详解及区别(CountDownLatch、CyclicBarrier、Semaphore、Exchanger)
  8. [POI2008]Tro
  9. 省选专练[POI2008]TRO-Triangles
  10. mac 访达指定目录