问题标题: 洛谷:p4824 向大佬求解

0
0
已解决
张岳恒
张岳恒
资深光能
资深光能
#include<iostream>
#include<string>
using namespace std;
int main(){
	string a,b;
	int s=0,c,w,k=0;
	cin>>a>>b;
	while(s!=-1){
		bool flag=0;
	s=a.find(b,0);
	if(s!=-1){
		for(int i=0;i<a.size();i++){
			for(int j=0;j<b.size();j++){
				if(a[i]==b[0])c=i;
			   	else if(a[i]==b[b.size()-1]) w=i;
				else if(a[i]==b[i]){
					k++;
					flag=1;
				} 
				if(flag!=1){
					k=0;
					c=0;
					w=0;
				}
				if(k==b.size()){
					break;
				}
			}
			if(k==b.size()){
				break;
			}
		}
		a.erase(c,w);
	}
	}
	cout<<a;
	return 0;
}

AC一个点,为啥TLE,有没有不用栈的方法?

张岳恒在2020-03-13 15:26:22追加了内容

Farmer John为他的奶牛们订阅了Good Hooveskeeping杂志,因此他们在谷仓等待挤奶期间,可以有足够的文章可供阅读。不幸的是,最新一期的文章包含一篇关于如何烹制完美牛排的不恰当的文章,FJ不愿让他的奶牛们看到这些内容。

FJ已经根据杂志的所有文字,创建了一个字符串 SS ( SS 的长度保证不超过 10^6106 ),他想删除其中的子串 TT ,他将删去 SS 中第一次出现的子串 TT ,然后不断重复这一过程,直到 SS 中不存在子串 TT 。

注意:每次删除一个子串后,可能会出现一个新的子串 TT (说白了就是删除之后,两端的字符串有可能会拼接出来一个新的子串 TT )。

输入格式:第一行是字符串 SS ,第二行输入字符串 TT ,保证 SS 的长度大于等于 TT 的长度, SS 和 TT 都只由小写字母组成。

输出格式:输出经过处理后的字符串,保证处理后的字符串不会为空串。

Translated by @StudyingFather

输入输出样例

输入 #1复制

whatthemomooofun
moo

输出 #1复制

whatthefun

0
已采纳
被禁言 何冯成
何冯成
中级光能
中级光能
​
struct data{
    int nxt[26],fail/*,last*/,end;
}a[1000005];
inline void Trie_build(){
    scanf("%s",q);
    int u=0,len=strlen(q);
    for(int i=0;i<len;++i){
        int p=q[i]-'a';
        if(!a[u].nxt[p]) a[u].nxt[p]=++cnt;
        u=a[u].nxt[p];
    }a[u].end=len;
}
void AC_build(){
    queue <int> h;
    for(int i=0;i<26;++i) if(a[0].nxt[i]) h.push(a[0].nxt[i]);
    while(!h.empty()){
        int x=h.front(); h.pop();
        for(int i=0;i<26;++i){
            int &to=a[x].nxt[i];
            if(to){
                a[to].fail=a[a[x].fail].nxt[i];
                //a[to].last= a[a[to].fail].end ? a[to].fail:a[a[to].fail].last;
                h.push(to);
            }else to=a[a[x].fail].nxt[i];
        }
    }
}
//---------以上裸AC自动机------------
void query(){
    int u=0,len=strlen(g);
    for(int i=0;i<len;++i){
        u=a[u].nxt[g[i]-'a'];
        stk1[++top]=u; //栈1存当前点在字典树中的位置
        stk2[top]=i; //栈2存字符(答案)在主串中所在的位置
        while(a[u].end) top-=a[u].end,u= top ? stk1[top]:0; //删除操作
    }
    for(int i=1;i<=top;++i) putchar(g[stk2[i]]);
    putchar('\n'); //不换行就蜜汁爆炸(大雾)
}

​

 

不是整段代码

定义自己想

main    函数里的自己想

-------------------------------

望采纳

0
0
张岳恒
张岳恒
资深光能
资深光能

大佬们快来啊,急,快被淹没了

0
0
0
刘欣然
刘欣然
高级光能
高级光能

可以把题目发一下么,因为我洛谷密码忘了!!!我太难了!!

我要回答