求助,现在还是迭代加深,但是4AC+1TLE……
查看原帖
求助,现在还是迭代加深,但是4AC+1TLE……
543667
MARENOL_qwq楼主2022/3/19 09:45

是不是还要剪一下枝(

#include<bits/stdc++.h>
#define int1 long long
#define owo 10005
using namespace std;
int1 ii,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 sp){
	int1 n = s.size(),m = cc[t];
	for(j = 0,k = sp; j < m && k < n; j++,k++){ 
		if(s[k] != aa[t][j]){
			break;
        }
    }
	if(j == m){
        return sp;
    }
	return -1;
}
string change(string x,int1 y,int1 r){
	int1 lenx = x.size(),m = 0,i;
	string c = "",tmp = "";
	for(i= r + cc[y]; i < lenx; i++){
		c += x[i];
		m++;               	//owqwq  -   qwq    lenx=5  cc[y]=3   r=2;  m=0;
	}
	for(i = 0; i < r; i++){
        tmp += x[i];
    }
	tmp += bb[y] + c;
	return tmp;
}
void dfs(string x,int1 s){
    //cout<< x << " " << s << endl;
	if(s > ii){
        return;
    }
	if(x == b){
		f = 1;
		return;
	}
	for(int1 i = 1; i <= nn; i++){
		int1 n = x.size(),m = cc[i];
		for(int1 j = 0; j < n - m + 1; j++){
	        if(f){
                return;
            }
			int1 p = son(x,i,j);
			if(p >= 0){
				dfs(change(x,i,p),s + 1);
            }
		}
	}
    //cout<< endl;
	return;
}
int main(){
	cin >> a >> b;
	while(++nn < 7 && cin >> aa[nn] >> bb[nn]){
		cc[nn] = aa[nn].size(),dd[nn] = bb[nn].size();
    }
	nn--;
    for(ii = 1; ii <= 10; ii++){
        dfs(a,0);
        if(f){
            print(ii);
            return 0;
        }
    }
	printf("NO ANSWER!");
	return 0;
}
2022/3/19 09:45
加载中...