社区讨论
求助!#5 MLE,结果正确,如何优化
P1032[NOIP 2002 提高组] 字串变换(疑似错题)参与者 2已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @lo8kzn48
- 此快照首次捕获于
- 2023/10/27 20:20 2 年前
- 此快照最后确认于
- 2023/10/27 20:20 2 年前
本地测试输出是和下载的样例一致的,用的BFS,应该是队列爆了
想问一下还能怎么优化,谢谢
(本人很蒻,KMP什么的都不会……)
(变量名可能比较奇妙,见谅)
CPP#include<bits/stdc++.h>
using namespace std;
string a,b;//原字符串和目标字符串
int ans=15;
int cnt=0;
struct change{
string s1,s2;
}aa[105];//可以转换的字符串对应关系
struct Node{
string s;
int step;
};//搜索用结构体
queue <Node> q;//搜索用队列
void bfs(){
Node t;
t.s=a;
t.step=0;
q.push(t);
while(!q.empty()){
t=q.front();
q.pop();
if(t.step>10) return;
if(t.s==b){
ans=t.step;
return;
}
string xs=t.s;
for(int i=0;i<cnt;i++){
if(xs.size()>=aa[i].s1.size()){
for(int j=0;j<xs.size()-aa[i].s1.size()+1;j++){
bool b=1;
for(int k=0;k<aa[i].s1.size();k++){
if(xs[j+k]!=aa[i].s1[k]){
int tt;
cin>>tt;
b=0;
break;
}
}
if(b==1){
t.s=xs.substr(0,j)+aa[i].s2+xs.substr(j+aa[i].s1.size(),xs.size());
t.step++;
q.push(t);
t.step--;
}
}
}
}
}
}
//搜索写的很复杂,因为是自己写的查找子串,用find()函数的话只能返回第一个查到的位置,还要配erase(),思维上有点绕
int main(){
cin>>a>>b;
string xx,yy;
while(cin>>xx>>yy){
aa[cnt].s1=xx;
aa[cnt].s2=yy;
cnt++;
}
bfs();
if(ans==15){
cout<<"NO ANSWER!";
}else{
cout<<ans;
}
return 0;
}
回复
共 8 条回复,欢迎继续交流。
正在加载回复...