<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      題目鏈接:https://www.luogu.org/problem/P1032

      題目描述

      已知有兩個字串A,BA,B及一組字串變換的規則(至多66個規則):

      A_1A1? ->B_1B1?

      A_2A2? -> B_2B2?

      規則的含義為:在 AA中的子串 A_1A1? 可以變換為B_1B1?A_2A2? 可以變換為 B_2B2? …。

      例如:A=abcd,B=xyz,

      變換規則為:

      abcxuudy,yyz

      則此時,AA可以經過一系列的變換變為BB,其變換的過程為:

      abcdxudxyxyz

      共進行了33次變換,使得AA變換為BB。

      輸入格式

      輸入格式如下:

      ABB
      A_1A1? B_1B1?
      A_2A2? B_2B2? |-> 變換規則

      ... ... /

      所有字符串長度的上限為2020。

      輸出格式

      輸出至屏幕。格式如下:

      若在1010步(包含1010步)以內能將AA變換為BB,則輸出最少的變換步數;否則輸出"NO ANSWER!"

      輸入輸出樣例

      輸入 #1
      abcd xyz
      abc xu
      ud y
      y yz
      
      輸出 #1
      3

      題解

      這是一個字符串操作的BFS。和前面做過的01迷宮馬的遍歷相比,每次變化就相當于一次移動,而變換前后的字符串就相當于迷宮中的格點。使用STL中的string類進行find和replace操作還是相當方便的。在前面的例題中使用bool數組來描述是否遍歷過某個格點,而這里使用一個map數組來描述是否遍歷過某個字符串操作結果。下面是代碼。

      #include <iostream>
      #include <stdio.h>
      #include <math.h>
      #include <algorithm>
      #include <string.h>
      #include <map>
      
      using namespace std;
      
      struct Node
      {
          string x;
          int step;
      };
      Node q[100005];
      
      const int MAXN = 1005;
      int cnt = 0, step, front, rear; 
      string n, m, a[MAXN], b[MAXN];
      map<string, bool> vis; //作用等同于數組中的vis數組 
      
      int bfs()
      {
          Node now;
          now.x = n;
          now.step = 0;
          front = rear = 0;
          q[rear] = now;
          rear++;
          while(front < rear)
          {
              now = q[front++];
              if(now.x == m)
              {
                  cout << now.step << endl;
                  return 0;
              }
              if(now.step > 10)
              {
                  return -1;
              }
              for(int i = 0; i < cnt; i++)
              {
                  string temp = now.x;
                  int pos = temp.find(a[i]);
                  while(pos != -1) 
                  {
                      temp.replace(pos, a[i].length(), b[i]); //做變換 = pos 
                      if(vis[temp] == 0) 
                      {
                          vis[temp] = true;
                          q[rear].x = temp;
                          q[rear].step = now.step + 1;
                          rear++;
                      }
                      temp = now.x; 
                      pos = temp.find(a[i], pos + 1); // 從下一個位置查找,做一次變換
                  }
              } 
          }
          return -1;
      }
          
      int main()
      {
          cin >> n >> m;
          cnt = 0;
          while(cin >> a[cnt] >> b[cnt])
          {
              cnt++;
          }
          if(bfs() < 0)
          {
              cout << "NO ANSWER!" << endl;
          }
          return 0;
      }

      程序里面另外一個需要注意的是,A字符串中可能存在多個變換的子串,我們需要每次變換其中的一個。有一個測試例是專門卡這種情況的:

      abaaaba abcdaba
      a b
      b d
      d e
      e f
      f g
      g c

      posted on 2019-08-11 23:25  zealsoft  閱讀(510)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 国产伦视频一区二区三区| 无码专区 人妻系列 在线| 蜜桃无码一区二区三区| 国内精品无码一区二区三区| 无码日韩av一区二区三区| 又大又粗又硬又爽黄毛少妇| 久在线精品视频线观看| 亚洲无码在线免费观看| 亚洲男女羞羞无遮挡久久丫| 最近中文字幕免费手机版| 亚洲乱妇老熟女爽到高潮的片 | 18禁黄无遮挡网站免费| 国产一区二区三区小说| 国产三级国产精品国产专区| 韩国无码AV片午夜福利| 激情综合网激情综合网激情| 18禁黄无遮挡网站免费| 在线看片免费人成视频久网| 国产欧美日韩精品丝袜高跟鞋| 亚洲综合网国产精品一区| 熟女蜜臀av麻豆一区二区| 日韩中文字幕高清有码| 国产精品久久久久久久久人妻| 九九久久人妻一区精品色| 不卡乱辈伦在线看中文字幕| 亚洲精品乱码久久久久久蜜桃 | 疯狂做受xxxx高潮欧美日本| 在线观看美女网站大全免费| 欧美黑人又粗又大又爽免费| 亚洲精品国模一区二区| 大尺度国产一区二区视频| 亚洲一区二区精品偷拍| 潮喷失禁大喷水无码| 国产成人精品亚洲资源| 国产成人午夜福利院| 精品一卡2卡三卡4卡乱码精品视频| 午夜DY888国产精品影院 | 欧美在线观看www| 国产偷人爽久久久久久老妇app| 亚洲国产成人自拍视频网| 日本亚洲一区二区精品|