洛谷 P1032 字符变换
题目描述
已知有两个字串 A,B 及一组字串变换的规则(至多 6 个规则):
A1 -> B1
A2 -> B2
规则的含义为:在 A 中的子串 A1 可以变换为 B1 , A2 可以变换为 B2 …。
例如: A =' abcd ' B =' xyz '
变换规则为:
‘ abc ’->‘ xu ’‘ ud ’->‘ y ’‘ y ’->‘ yz ’
则此时, A 可以经过一系列的变换变为 B ,其变换的过程为:
‘ abcd ’->‘ xud ’->‘ xy ’->‘ xyz ’
共进行了 3 次变换,使得 A 变换为 B 。
输入输出格式
输入格式:
输入格式如下:
A B
A1 B1
A2 B2 -> 变换规则
... ... /
所有字符串长度的上限为 20 。
输出格式:
输出至屏幕。格式如下:
若在 10 步(包含 10 步)以内能将 A 变换为 B ,则输出最少的变换步数;否则输出"NO ANSWER!"
输入输出样例
abcd xyz
abc xu
ud y
y yz
3 思路:双向广搜
#include<cstring>
#include<cstdio>
#define M 100005
#define MM 55
using namespace std;
int n, add[], xl[], yl[];
char q[M][MM];
char p[M][MM];
char x[][MM], y[][MM]; int main() {
int i, j, k, xx, step, len;
char jiewei;
scanf("%s%s", q[], p[]);
jiewei = p[][strlen(p[])];
while(scanf("%s%s", x[n], y[n]) == ) {
xl[n] = strlen(x[n]), yl[n] = strlen(y[n]);
add[n] = yl[n] - xl[n];
n++;
}
if(n == ) { //判断两个字符串在不能变换的情况下能否相同
if(strcmp(q[], p[]) == ) printf("0\n");
//strcmp函数,判断两个字符串是否相同,当s1<s2时,返回为负数;当s1==s2时,返回值= 0;当s1>s2时,返回正数
else printf("NO ANSWER!\n");
return ;
}
int l1 = , r1 = , s1 = ;
int l2 = , r2 = , s2 = ;
for(step = ; step <= ; step++) {
for(i = ; i < n; i++)
for(j = l1; j <= r1; j++)
for(len = strlen(q[j]), k = ; k < len && len+add[i] < ; k++)
if(strncmp(x[i], q[j]+k, xl[i]) == ) {
s1++;
strncpy(q[s1], q[j], k);
//strncpy函数,将字符串src中最多n个字符复制到字符数组dest中
strncpy(q[s1]+k, y[i], yl[i]);
strncpy(q[s1]+k+yl[i], q[j]+k+xl[i], len-k-xl[i]);
q[s1][len+add[i]] = jiewei;
for(xx = l2; xx <= r2; xx++)
if(strcmp(p[xx], q[s1]) == ) {
printf("%d\n", step+step-);
return ;
}
}
if(s1 != r1) l1 = r1+, r1 = s1;
for(i = ; i < n; i++)
for(j = l2; j <= r2; j++)
for(len = strlen(p[j]), k = ; k < len && len-add[i] < ; k++)
if(strncmp(y[i], p[j]+k, yl[i]) == ) {
s2++;
strncpy(p[s2], p[j], k);
strncpy(p[s2]+k, x[i], xl[i]);
strncpy(p[s2]+k+xl[i], p[j]+k+yl[i], len-k-yl[i]);
p[s2][len-add[i]] = jiewei;
for(xx = l1; xx <= r1; xx++)
if(strcmp(q[xx], p[s2]) == ) {
printf("%d\n", step+step);
return ;
}
}
if(s2 != r2) l2 = r2+, r2 = s2;
}
printf("NO ANSWER!\n");
return ;
}
洛谷 P1032 字符变换的更多相关文章
- 洛谷 P1032 子串变换
题目链接 https://www.luogu.org/problemnew/show/P1032 本题是一道bfs问题,从a串开始,每一步完成替换一对字符串(但是一个一步替换可以将这对字符串替换好几次 ...
- 【题解】洛谷P1032 [NOIP2002TG]字串变换(BFS+字符串)
洛谷P1032:https://www.luogu.org/problemnew/show/P1032 思路 初看题目觉得挺简单的一道题 但是仔细想了一下发现实现代码挺麻烦的 而且2002年的毒瘤输入 ...
- 题解-洛谷P7114 字符串匹配
题面 洛谷P7114 字符串匹配 \(T\) 组测试数据.给定字符串 \(S\),问有多少不同的非空字符串 \(A\),\(B\),\(C\) 满足 \(S=ABABAB...ABC\) 且 \(A\ ...
- [洛谷P1032] 字串变换
洛谷题目链接:字串变换 题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B ...
- 洛谷 P1032 [ NOIP 2002 ] 字串变换 —— 字符串+bfs
题目:https://www.luogu.org/problemnew/show/P1032 字符串好复杂...先写了个 dfs ,RE一个点TLE一个点,不知该怎么改了... #include< ...
- 洛谷P1032 字串变换【bfs】
题目链接:https://www.luogu.org/problemnew/show/P1032 题意: 给定一个原字符串和目标字符串,以及几个字符串变换的规则. 问能否根据这几个规则在十步之内把原字 ...
- 洛谷 P1032 字串变换题解
题目链接:https://www.luogu.org/problem/P1032 题目描述 已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则): A_1A1 ->B_1B1 A ...
- 洛谷 P1032 字串变换
题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...
- 洛谷 P1032 字串变换(map)
题目传送门 解题思路: 搜索题,因为要求最少次数,用bfs. AC代码: #include<cstdio> #include<iostream> #include<cst ...
随机推荐
- ORA-01555错误总结(二)
这篇文章紧接着上一篇"ORA-01555错误总结(一)".主要描写叙述延迟块清除导致的ORA-01555错误. 以下是一些简介(上一遍已经介绍过) ORA-01555错误是一种在o ...
- 30.angularJS第一个实例
转自:https://www.cnblogs.com/best/tag/Angular/ AngularJS 通过 ng-directives 扩展了 HTML. ng-app 指令定义一个 Angu ...
- chown---改变某个文件或目录的所有者和所属的组
chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组.用户可以是用户或者是用户D,用户组可以是组名或组id.文件名可以使由空格 ...
- 翻译《虚幻引擎4艺术大师 - 蓝图 III 》 中文版
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/49800063 作者:c ...
- Android布局之LinearLayout
LinearLayout 1.核心属性 高度:layout_height (基于内容 wrap_content:基于父控件:) 宽度:layout_width 方向:orientation (纵 ...
- Java 学习(13):抽象类& 抽象方法& 封装
目录 --- 抽象类 --- 封装 抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的 ...
- jQuery UI炫酷雨滴落在水面上的波纹涟漪特效
raindrops是一款效果很炫酷的jQuery UI雨滴落在水面上的特效. 该特效模拟水滴从空中落入平静的水面上的效果. 通过參数能够设置水面波纹的大小,强度,波纹扩散的速度等等属性. 效果演示:h ...
- Android与webserver数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台执行
背景:原先的b/s设计中在一个jsp界面中实现多个复杂的工作流... 为实现移动接口的调用保证工作流的正常webproject特别给提供了该虚拟浏览器的方案 原理:通过该方案实现虚拟浏览器后台运行js ...
- 57.NodeJS入门--环境搭建 IntelliJ IDEA
转自:https://blog.csdn.net/wang19891106/article/details/51127133 NodeJS入门–环境搭建 IntelliJ IDEA 本人也刚开始学习N ...
- Ajax的跨域问题分析
一.Ajax的跨域问题 Ajax是利用javascript内置XMLHttpRequest对象来进行传输的,所以它依赖于XMLHttpRequest对象,而XMLHttpRequest对象却有很多的限 ...