(Luogu) P1032 字串变换

2024-03-20 17:32
文章标签 luogu 变换 字串 p1032

本文主要是介绍(Luogu) P1032 字串变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接 https://www.luogu.org/problemnew/show/P1032

AC代码

#include<bits/stdc++.h>
using namespace std;
string A,B;
int N=0,maxlen=0,minlen=1e6+5;//maxlen,minlen为最长长度 ,最短长度 
string a[7],b[7];
int res=1e6+5;
map <string, int > id;//记录每种字符串出现的次数 
void bfs(string tt,int num) {queue<pair<string,int> > q;q.push(make_pair(tt,num));id[tt]++;while(!q.empty()) {pair<string, int > xx;xx=q.front();q.pop();string tt=xx.first;int num=xx.second;if(num!=0 && tt==A)	continue; //如果经过变化又变成了A,不用往下考虑了 if(tt.size()+(10-num)*(maxlen-minlen)<B.size()) continue ;//每次都给他将最短的变成从最长的还达不到B长度,不用考虑了 if(num>10) continue ;// 计数达到>10 不用考虑了 if(tt==B) { //到了,更新结束 res=min(res,num);break;}for(int i=0; i<N; ++i) { //a[i]变b[i],尝试每一种变化 if(tt.size()>=a[i].size()) {for(int j=0; j<=tt.size()-a[i].size(); ++j) {string tmp=tt;//用string太方便了 if(tmp.substr(j,a[i].size()) == a[i] ) {tmp.replace(j,a[i].size(),b[i]);if(id[tmp]++==0) {//如果这种变换没有出现过,入队列 q.push(make_pair(tmp,num+1));}}}}}}}
int main() {cin>>A>>B;string ta,tb;while(cin>>ta>>tb) {a[N]=ta,b[N++]=tb;int xx=tb.size();maxlen=max(xx,maxlen);minlen=min(xx,minlen);}bfs(A,0);if(res==1e6+5) {cout<<"NO ANSWER!"<<endl;} else	cout<<res<<endl;return 0;
}

稍微想一下就知道这是一个广搜题,不过需要剪枝一下,不然会T,但是我一开始却用的递归,将广搜写成了深搜,T了以后,加了好几重剪枝,还是T了一个点。(哭了)

string简单操作可以看一下https://blog.csdn.net/TDD_Master/article/details/83184641

这篇关于(Luogu) P1032 字串变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/830217

相关文章

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

FHQ Treap模版(luogu P3369)

FHQ Treap模版(自用),带注释 #include<bits/stdc++.h>using namespace std;const int N=1e5+10;int n,root,idx;struct node{int l,r;int val,key,size;}tr[N];int getnew(int v){tr[++idx].val=v;//权值tr[idx].key=rand(

【数字信号处理】一文讲清FFT(快速傅里叶变换)

目录 快速傅里叶变换(Fast Fourier Transform,FFT)FFT的背景快速傅里叶变换(Fast Fourier Transform,FFT)DFT的数学表达实际计算重要性和应用频谱泄露、频谱混叠奈奎斯特采样定理参考链接 快速傅里叶变换(Fast Fourier Transform,FFT) FFT的背景 1、为什么要时域→频域频率?50Hz+频率120Hz

每日一练:无重复字符的最长字串

一、题目要求 给定一个字符串 s ,请你找出其中不含有重复字符的 最长  子串  的长度。 示例 1: 输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: s = "

傅里叶变换家族

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

齐次变换矩阵的原理与应用

齐次变换矩阵的原理与应用 通过齐次变换矩阵,可以描述机械臂末端执行器(法兰)在三维空间中的平移和旋转操作。该矩阵结合了旋转和平移信息,用于坐标变换。 1. 齐次变换矩阵的基本形式 一个齐次变换矩阵 T是一个 4x4 矩阵,表示刚体的旋转和平移: T = [ R t 0 1 ] = [ r 11 r 12 r 13 x r 21 r 22 r 23 y r 31 r 32 r 33 z 0

MATLAB分析图像的离散余弦变换(DCT)

1. MATLAB的介绍以及所需函数的说明:  1.1 MATLAB  MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设

PyTorch Demo-4 : 数据变换Transforms

Transforms的函数有很多,每次都是直接copy已有的代码,但是不知道具体是什么样子,在这里记录一下 Transforms常用方法的具体说明参考链接1,链接2,或者官方文档。 原始图像采用图像处理经典的Lena: Python代码 from PIL import Imagefrom torchvision import transforms as tfimport ma

【Get深一度】小波变换通俗解释 -算法与数学之美

链接:http://www.zhihu.com/question/22864189/answer/40772083 文章推荐人:杨晓东 从傅里叶变换到小波变换,并不是一个完全抽象的东西,可以讲得很形象。小波变换有着明确的物理意义,如果我们从它的提出时所面对的问题看起,可以整理出非常清晰的思路。     下面就按照傅里叶-->短时傅里叶变换-->小波变换的顺序,讲一下为什么会出现小波这个东

【Get深一度】信号处理(二)——傅里叶变换与傅里叶级数的区别与联系

1.傅里叶级数和傅里叶变换:  傅里叶级数对周期性现象做数学上的分析 傅里叶变换可以看作傅里叶级数的极限形式,也可以看作是对周期现象进行数学上的分析。 除此之外,傅里叶变换还是处理信号领域的一种很重要的算法。要想理解傅里叶变换算法的内涵,首先要了解傅里叶原理的内涵。 傅里叶原理表明:对于任何连续测量的数字信号,都可以用不同频率的正弦波信号的无限叠加来表示。     傅里叶变