- 题目
- 爆搜可枚举序列⭐⭐⭐
- 按顺序连接若干单词(删去重叠部分)
- 一个访问越界error
8783:单词接龙
爆搜可枚举序列⭐⭐⭐无论是 还原文件还是单词接龙,在想要求某个组合时,因为不明白 文件碎片/单词 的排列顺序,需要深搜枚举序列
尤其这题,每个单词可用两遍,更是直指搜索
因为爆搜可以抉择每个单词用几遍
#include#include #include using namespace std; const int N=55; int next[N]; void getnext(string p){ int len=p.size(); int i=0; int j=-1; next[0]=-1; while(i if(j==-1||p[i]==p[j]){ i++,j++; next[i]=j; } else j=next[j]; } } int kmp(string t,string p,int st){ int lt=t.size(); int lp=p.size(); int i=st; int j=0; while(i if(j==-1||t[i]==p[j]){ i++,j++; } else j=next[j]; // if(j==lp){//算是abcdefg efg,所以返回得j是lp // cout< // ios::sync_with_stdio(false); // cin.tie(0); int n; cin>>n; string str=""; string t=""; getline(cin,str); cin>>t; for(int i=1;i cin>>str; getnext(str); int len=str.size(); // int st=max(0,(t.size())-len); int st=t.size()-len; st=max(st,0); int pos=kmp(t,str,st); cout< 笑死,看到题目不知道干了啥
自己臆想了一个题目属于是
最难理解得是kmp中返回得j,j指向得是模式串与主串中不匹配得第一个字符
如若一个都不匹配,最后返回得就是下标0(从-1加过来得)
写的时候,return t 放在了 while(i一个访问越界error C++如果遇到:
1.“terminate called after throwing an instance of ‘std::out_of_range’”
2.“Abort message: 'terminating with uncaught exception of type std::out_of_range”
这样的错误,极有可能是访问越界的问题。
导致越界的原因:
通常情况是在使用c++的容器的时候出现的问题,如在使用vector、map、还有string(差点忘记string也是个容器呀)等的时候出现的



