zoukankan      html  css  js  c++  java
  • Codevs 1099 字串变换

    1099 字串变换

     

    2002年NOIP全国联赛提高组

     时间限制: 1 s
     空间限制: 128000 KB
     题目等级 : 黄金 Gold
     
     
     
    题目描述 Description

    已知有两个字串 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’

      共进行了三次变换,使得 A$ 变换为B$。

    输入描述 Input Description

    输入格式如下:

       A$ B$
       A1$ B1$
       A2$ B2$  |-> 变换规则
       ... ... / 
      所有字符串长度的上限为 20。

    输出描述 Output Description

    若在 10 步(包含 10步)以内能将 A$ 变换为 B$ ,则输出最少的变换步数;否则输出"NO ANSWER!"

    样例输入 Sample Input

    abcd xyz
    abc xu
    ud y
    y yz

    样例输出 Sample Output

    3

    数据范围及提示 Data Size & Hint

    hehe 

    /*
        宽搜,将每个规则都用一用就好了
        字符串方面的函数不会用不大好办
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<map>
    using namespace std;
    map<string,bool>m;
    string d[100010],e,a[7],b[7];
    int tim[100010];
    int main(){
        int h=0,t=1;
        cin>>d[0]>>e;
        tim[0]=1;
        int n=0;
        while(cin>>a[n]>>b[n])n++;//变换规则 
        while(tim[h]<10&&tim[h]!=0){//到状态h需要的步数 
            for(int i=0;i<n;i++){//尝试每一种规则 
                int pos=d[h].find(a[i]);//找到可替换的字符串在字符串中的位置 
                while(pos!=d[h].npos){//npos表示不存在,也就是只要存在可替换的字符串,就去替换它 
                    d[t]=d[h];
                    d[t].replace(pos,a[i].size(),b[i]);
                    tim[t]=tim[h]+1;
                    if(d[t]==e){cout<<tim[h]<<endl;return 0;}
                    if(m.find(d[t])==m.end())m[d[t++]]=true;
                    pos=d[h].find(a[i],pos+1);
                }
            }
            h++;
        }
        cout<<"NO ANSWER!"<<endl;
        return 0;
    }
  • 相关阅读:
    ASP.NET 2.0 中动态添加 GridView 模板列的例子
    ASP操作Excel技术总结
    JS实现下拉列表效果
    发布无限制版CodePlusV2.0(转载)
    SQL行列转换(转载)
    [转]详解C中volatile关键字
    [转]68013开发笔记之一
    清除计算机占用串口
    modelsim保存仿真波形
    SQL存储过程分页算法研究(支持千万级) 转
  • 原文地址:https://www.cnblogs.com/thmyl/p/7211380.html
Copyright © 2011-2022 走看看