求助,用的迭代加深,1AC,1RE,3WA……
查看原帖
求助,用的迭代加深,1AC,1RE,3WA……
543667
MARENOL_qwq楼主2022/3/18 22:09
#include<bits/stdc++.h>
#define int1 long long
#define owo 10005
using namespace std;
int1 ii,i,j,k,nn,cc[owo],dd[owo];
string a,b,aa[owo],bb[owo],c;
bool f;
int1 read(){
	int1 x = 0,f = 1;
	char ch = getchar();
	while(!isdigit(ch)){
		if(ch == '-'){
			f = -1;
		}
		ch = getchar();
	}
	while(isdigit(ch)){
		x = (x << 1) + (x << 3) + ch - '0';
		ch = getchar();
	}
	return x * f;
}
void print(int1 x){
  	if(x < 0){
    	putchar('-');
    	x = -x;
  	}
  	if(x > 9){
    	print(x / 10);
  	}
  	putchar(x % 10 + 48);
  	return ;
}
string str(){
	char ch = getchar();
	string w = "";
	while(!isalpha(ch)){
		ch = getchar();
	}
	while(isalpha(ch)){
		w += ch;
		ch = getchar();
	}
	return w;
}
int1 son(string s,int1 t){
	int1 n = s.size(),m = cc[t],nm = n - m;
    //cout<< s << " " << t << " " << n << " " << m << endl;
	for(i = 0; i <= nm; i++){
		for(j = 0,k = i; j < m; j++,k++){
            //cout<< s[k] << " " << aa[t][j] << endl;
			if(s[k] != aa[t][j]){
				break;
			}
		}
		if(j == m){
			return i;
		}
	}
	return -1;
}
string change(string x,int1 y,int1 r){
	int1 n = x.size(),nnn = n,m = 0,i,ma = max(cc[y],dd[y]);
	c = "";
	for(i = r + cc[y]; i < nnn; i++){
		c[++m] = x[i];
		n--;
	}
    n -= cc[y];
	for(i = 0; i < ma; i++){
		x[i + r] = bb[y][i];
		n++;
	}
    while(x[n - 1] < 'a' || x[n - 1] > 'z'){
        n--;
    }
	for(i = 1; i <= m; i++){
		x[n] = c[i];
        n++;
	}
    c = "";
    for(i = 0; i < n; i++){
        c += x[i];
    }
	return c;
}
bool d(string x,string y){
    int1 n = x.size(),m = y.size();
    if(n != m){
        return 0;
    }
    for(int1 i = 0; i < n; i++){
        if(x[i] != y[i]){
            return 0;
        }
    }
    return 1;
}
void dfs(string x,int1 s){
    //cout<< x << " " << s << endl;
	if(s > ii){
		return ;
	}
	if(d(x,b)){
		f = 1;
		return ;
	}
	for(int1 i = 1; i <= nn; i++){
        if(f){
            return ;
        }
		int1 p = son(x,i);
        //cout<< i << " : " << p << endl;
		if(p >= 0){
			dfs(change(x,i,p),s + 1);
		}
	}
    //cout<< endl;
	return ;
}
int main(){
	a = str(),b = str();
	while(++i && cin >> aa[i] >> bb[i]){
		cc[i] = aa[i].size(),dd[i] = bb[i].size();
	}
	while(aa[i][0] == '\0'){
		i--;
	}
	nn = i;
    for(ii = 1; ii <= 10; ii++){
	    dfs(a,0);
        if(f){
            print(ii);
            return 0;
        }
    }
	printf("NO ANSWER!");
	return 0;
}
2022/3/18 22:09
加载中...