首页 > 其他分享 >字串变换

字串变换

时间:2023-05-20 09:34:16浏览次数:63  
标签:return 变换 db da int qb 字串 size

字串变换

这道题用双向广搜会比单向快得多(设每次扩展是 \(k\) 个,则就是 \(k^{10},2k^5\) 二者的差距)。但是还是可以被卡掉的。而且双向广搜还需要注意,每次必须扩展一层。如下图,如果两边同时扩展一个点,那么图中左边的情况有一个中间点,而后面的搜索没有中间点,那么答案就会比最优解大 \(1\),导致错误。

注意

  • \(A=B\),特判 \(0\)。

image-20230520084915666

#include<bits/stdc++.h>
using namespace std;
#define Ls(i,l,r) for(int i=l;i<r;++i)
#define Rs(i,l,r) for(int i=r;i>l;--i)
#define L(i,l) for(int i=0;i<l;++i)
const int N=6;
string A,B,a[N],b[N];
int n;
int extend(queue<string>&q,unordered_map<string, int>&da,unordered_map<string, int>db,string a[],string b[]){
    int d=da[q.front()];
    while(!q.empty()&&da[q.front()]==d){
        auto t=q.front();q.pop();
        L(i, n)
            L(j, t.size())
                if(t.substr(j,a[i].size())==a[i]){
                    string r=t.substr(0,j)+b[i]+t.substr(j+a[i].size());
                    if(db.count(r))return d+db[r]+1;
                    if(da.count(r))continue;
                    da[r]=d+1;
                    q.emplace(r);
                }
    }
    return 11;
}
int bfs(){
    queue<string>qa,qb;
    unordered_map<string, int>da,db;
    qa.emplace(A);
    qb.emplace(B);
    da[A]=db[B]=0;
    int step=0;
    while(!qa.empty()&&!qb.empty()){
        int lena=qa.size(),lenb=qb.size(),t;
        if(lena<lenb)t=extend(qa, da, db, a, b);
        else t=extend(qb, db, da, b, a);
        if(t<=10)return t;
        if(++step==10)return -1;
    }
    return -1;
}
int main(){
    // freopen("1.in","r",stdin);
    // freopen("1.out","w",stdout);
    // ios::sync_with_stdio(0);
    // cin.tie(0);
    // cout.tie(0);
    cin>>A>>B;
    if(A==B)return puts("0"),0;
    while(cin>>a[n]>>b[n])n++;
    int t=bfs();
    if(t==-1)puts("NO ANSWER!");
    else printf("%d",t);
    return 0;
}

标签:return,变换,db,da,int,qb,字串,size
From: https://www.cnblogs.com/wscqwq/p/17416761.html

相关文章

  • 2022-2023 春学期 矩阵与数值分析 C2 矩阵的变换和计算
    2022-2023春学期矩阵与数值分析C2矩阵的变换和计算原文引言本文内容来自于对矩阵与数值分析课程资料的整理;本文所涉及的课程指东北某沿海高校,计算机学院硕士生必修课“矩阵与数值分析”,课程资料包括课程PPT、教材《计算机科学计算第二版》[1],以及网络资料,师兄的笔记等。......
  • 电压闭环控制的全桥LLC谐振变换器仿真,分别采用(自抗扰控制和pi控制)两种方式。
    电压闭环控制的全桥LLC谐振变换器仿真,分别采用(自抗扰控制和pi控制)两种方式。含负载跳变,可验证闭环控制的稳定性,任选一个ID:1160671377751128......
  • 储能系统双向DCDC变换器蓄电池充放电仿真模型有buck模式 储能系统双向DCDC变换器蓄电
    储能系统双向DCDC变换器蓄电池充放电仿真模型有buck模式储能系统双向DCDC变换器蓄电池充放电仿真模型有buck模式和boost模式,依靠蓄电池充放电维持直流母线电压平衡ID:9670668092226736......
  • [转]基于Box–Muller变换的正态随机数生成方法
    为什么我的眼里常含泪水?因为我有一个算法不会。为了节约点眼泪,今天我们就来介绍著名的Box–Muller变换,基于这种变换,我们便可以得到一个从均匀分布中得到正态分布采样的算法,本文也会详细解释其中蕴含的数学原理。 Box–Muller变换最初由GeorgeE.P.Box与MervinE.Muller......
  • 连续傅里叶变换性质FT
    常用函数单位阶跃函数事实上,我们并不怎么关心该函数在x=0 处的值,有的书将其定义为u(0)=1/2 。其函数图像如下图所示:单位冲激函数(δ函数/Dirac函数)单位冲激函数可以看做其中有:并且有一个被人们称为“筛选性”的性质。顾名思义,对于任意函数f(t),都能筛选出f(t0)的值......
  • 傅里叶变换
    模拟信号模拟信号x(t)连续,对应傅里叶变换(FT):傅里叶变换实际是一个积分变换,求变换时,实际是对求积分,可以利用矩形近似进行求积分,只要将时间间隔Ts取得非常小,就可以利用求和来近似求积分: (连续信号到离散,需要进行抽样,抽样间隔如何选取)时域有限信号若信号x(t)对于t<0和t>T为0,信......
  • MATLAB快速傅里叶变换(fft)函数详解
    MATLAB快速傅里叶变换(fft)函数详解调用:​​1.Y=fft(y);Y=fft(y,N);式中,y是序列,Y是序列的快速傅里叶变换。y可以是一向量或矩阵,若y为向量,则Y是y的FFT,并且与y具有相同的长度。若y为一矩阵,则Y是对矩阵的每一列向量进行FFT。说明:函数fft返回值的数据结构具有对称性根据采样定......
  • Laplace变换
    拉普拉斯变换笔记摘录于悍将吴老二的视频关于拉氏变换这个视频就够了一、引入概念求解下面的方程会有困难,因为含有\(x(t)\)的导数项。\[\dot{x}(t)+3x(t)=0\]但是可以通过\(Laplace\)变换来转化为下面的式子,求解\(x(s)\)就会变得简单。\[sx(s)-x(0)+3x(s)=0\]原理解......
  • 随堂+变换字典格式
    #反选a='ACXDSFDVCDVFFB'[::-1]#a=a.replace('C','ni')b='ACXDSFDVCDVFFB'[::-2]print(a)print(b)#频繁修改字符串,可以这样做。importios='axscgvmkoi'sio=io.StringIO(s)print(sio)print(sio.getvalue())sio.getvalue()s......
  • NPC,三电平,三电平变换器,三电平逆变器,NPC,中点电位平衡控制,三电平SVPWM
    NPC,三电平,三电平变换器,三电平逆变器,NPC,中点电位平衡控制,三电平SVPWMID:28120674921799923......