luoguP1032

    xiaoxiao2025-06-03  90

    字符串骚操作

    str.repalce( int s,int len,string str )

    将起点为s,长度为len的字符串替换成str

    str.insert( int s,string str ) 

    起点为s,插入str

    划重点,这题要是用insert一首凉凉。因为删除操作后下表会改变,insert个鬼哦

    #include <bits/stdc++.h> using namespace std; typedef pair<string,int> pii; set<string> se; string ss1[10]; string ss2[10]; string A,B; int n; bool match( const string& s1,const int num,vector<string>& ve ){ int len1 = s1.length(); int len2 = ss1[num].length(); string& s2 = ss1[num]; for(int i = 0;i <= len1 - len2;i++ ){ bool flag = true; for( int j = 0;j < len2;j++ ){ if( s1[i+j] != s2[j] ){ flag = false; break; } } if( flag ){ string str = s1; str.replace( i,len2,ss2[num] ); ve.push_back( str ); } } if( ve.size() ) return true; return false; } queue<pii> que; int bfs( ){ que.push( pii(A,0 ) ); while( que.size() ){ pii x = que.front(); if( x.second >= 11 ) return -1; if( x.first == B ){ return x.second; } que.pop(); string str = x.first; for( int i = 1;i <= n;i++ ){ vector<string> ve; if( match( str,i,ve ) ){ for( int i = 0;i < ve.size();i++ ){ if( se.find( ve[i] ) ==se.end() ){ se.insert( ve[i] ); que.push( pii( ve[i],x.second+1 ) ); } } } } } return -1; } int main() { string x,y; cin >> A >> B; int i= 0; while( cin >>x >> y ){ ss1[++i] = x; ss2[i] = y; } n = i; se.insert( A ); int re = bfs(); if(re != -1){ printf("%d",re); }else{ printf("NO ANSWER!"); } return 0; }

     

    最新回复(0)