【求助】帮忙改一下TLE的程序可以吗?
查看原帖
【求助】帮忙改一下TLE的程序可以吗?
688069
HFLSLeo24楼主2024/8/31 18:43

暴力做出来了六个点,但是题目没给测试点,能不能帮忙优化一下谢谢啦

#include<bits/stdc++.h>
#include<string>
using namespace std;
//#define delete Im_Your_Dad_Bro

string a[10001];
string b[10001];
int N,M;
int tab,score;
int note;

void Change(int where,int situation,char word){
	b[where][situation]=word;
	return ;
}
void Delete(int where,int situation){
	string u="";
	for(int i=0;i<situation;i++){
		u=u+b[where][i];
	}
	for(int i=situation+1;i<b[where].length();i++){
		u=u+b[where][i];
	}
	b[where]=u;
	return ;
}
void Add(int where,int situation,char word){
	string u="";
	for(int i=0;i<situation;i++){
		u=u+b[where][i];
	}
	u=u+word;
	for(int i=situation;i<b[where].length();i++){
		u=u+b[where][i];
	}
	b[where]=u;
	return ;
}
bool Isword(int where,int situation){
	if(b[where]==a[situation]){
		return true;
	}
	else{
		return false;	
	}
}

int main(){
	cin>>N>>M;
	for(int i=0;i<N;i++){
		cin>>a[i];
	}
	for(int i=0;i<M;i++){
		cin>>b[i];
	}
	for(int i=0;i<M;i++){
		score=0;
		for(int j=0;j<N;j++){
			note=0;
			if(Isword(i,j)){
				score=-1;
				break;
			}
			if(a[j].length()==b[i].length()+1){
				//cout<<"A "; 
				tab=0;
				for(int k=0;k<a[j].length();k++){
					if(a[j][k]!=b[i][k]){
						note=k;
						Add(i,k,a[j][k]);
						break;
					}
				}
				for(int k=note;k<a[j].length();k++){
					if(a[j][k]!=b[i][k]){
						tab++;
						break;
					}
				}
				if(tab==0){
					score++;
				}
				Delete(i,note);
			}
			else if(a[j].length()==b[i].length()){
				//cout<<"C "; 
				char ty=' ';
				tab=0;
				for(int k=0;k<b[i].length();k++){
					if(a[j][k]!=b[i][k]){
						note=k;
						ty=b[i][k];
						Change(i,k,a[j][k]);
						break;
					}
				}
				for(int k=note;k<b[i].length();k++){
					if(a[j][k]!=b[i][k]){
						tab++;
						break;
					}
				}
				if(tab==0){
					score++;
				}
				Change(i,note,ty);
			}
			else if(a[j].length()==b[i].length()-1){
				//cout<<"D "; 
				char ty=' ';
				tab=0;
				for(int k=0;k<b[i].length();k++){
					if(a[j][k]!=b[i][k]){
						note=k;
						ty=b[i][k];
						Delete(i,k);
						break;
					}
				}
				for(int k=note;k<b[i].length();k++){
					if(a[j][k]!=b[i][k]){
						tab++;
						break;
					}
				}
				if(tab==0){
					score++;
				}
				Add(i,note,ty);
			}
		}
		cout<<score<<endl;
	}
}
2024/8/31 18:43
加载中...