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. 微软张若非:搜索引擎和广告系统,那些你所不知的AI落地技术
  2. UVA 610 Street Directions 双连通分量
  3. [Nikon D80]Beauty
  4. tensorflow使用tf.placeholder会报错
  5. [C#.NET 拾遗补漏]16:几个常见的TAP异步操作
  6. spring的bean范围_Spring Bean范围
  7. 50 days before NOI2017
  8. matlab已知ft求f2t,基于Matlab的信号与系统实验指导2
  9. C# Monitor实现
  10. .NET Framework-多线程网络编程
  11. 数据结构时间复杂度_数据结构之时间复杂度分析
  12. libgmailer更新了,俺的下载空间又可以使用了(使用G-Share)
  13. wdcp安装多种php版本共存
  14. C++ Windows键盘钩子
  15. JEECG框架的dictSelect下拉
  16. 日志易:IT 运维分析及海量日志搜索的实践之路(上)
  17. Matlab中mapminmax函数使用注意事项
  18. 1995-2013年RSA大会历届主题回顾
  19. 探秘 Containerd 容器中的 Shim 进程
  20. java毕业设计校园闲置物品租售系统mybatis+源码+调试部署+系统+数据库+lw

热门文章

  1. 微服务应用故障定位系统实现原理剖析
  2. 三十而立如何成为准富人
  3. 网络计算机组显示不全,win10系统网络邻居显示不全只能看到2台计算机的方案介绍...
  4. 极致稳帧性能旗舰!红魔7S系列携专业端游电竞装备发布
  5. 2022,视频号的十大机会
  6. Day0001:代码诉说for循环的顺序
  7. HDU 5050 Divided Land (二进制上的最大公约数)
  8. ai银行业信息安全_银行业的人工智能
  9. 在计算机中打不开录音笔,录音笔有哪些常见故障
  10. 奇异值分解和豪斯赫尔德变换法