zoukankan      html  css  js  c++  java
  • 洛谷 P1032 字串变换

    P1032 字串变换

    #include<iostream>
    #include<string>
    #include<map>
    using namespace std;
    map<string,bool> map1;
    string s1,s2;
    int n,l=1,r=0;
    int deep[500000];
    string que[500000];
    string sa[7];
    string sb[7];
    void in(string s,int deep1)
    {
        que[++r]=s;
        deep[r]=deep1;
        map1[s]=true;
    }
    
    void do1(string s,string rule1,string rule2,int deep1)
    {
        string sx;
        int k=s.find(rule1,0),i;
        bool flag;
        while(k!=string::npos)
        {
            flag=false;
            sx=s;
            sx.erase(k,rule1.length());
            sx.insert(k,rule2);
            if(sx==s2)
            {
                cout<<deep1+1;
                exit(0);
            }
            /*for(i=0;i<didnum;i++)
                if(did[i]==sx)
                    flag=true;*/  //此处原来是用did记录所有已搜索到的字串,然后每次遍历did数组判断是否重复,后用map优化
            if(map1.count(sx)==0)
            {
                in(sx,deep1+1);
                //cout<<sx<<k<<endl;
            }
            k=s.find(rule1,k+1);
        }
    }
    void work()
    {
        int i;
        while(l<=r)
        {
            if(deep[l]>=10)
            {
                cout<<"NO ANSWER!";
                exit(0);
            }
            for(i=1;i<=n;i++)
            {
                do1(que[l],sa[i],sb[i],deep[l]);
            }
            l++;
        }
    }
    int main()
    {
        int i;
        cin>>s1>>s2;
        while(cin>>sa[n+1]>>sb[n+1])n++;
        in(s1,0);
        work();
        cout<<"NO ANSWER!";
        return 0;
    }


  • 相关阅读:
    CCF 201712-4
    图论_最短路径
    图论_查并集
    let和const
    Promise
    实现表单label两端对齐
    始终让footer在底部
    react——使用this.setState({ })修改state状态值
    react——css样式
    react脚手架
  • 原文地址:https://www.cnblogs.com/hehe54321/p/8470460.html
Copyright © 2011-2022 走看看