Moon_quakes_xi 2022-03-20 16:00 采纳率: 66.7%
浏览 51
已结题

洛谷P3375测试点12过不了

在洛谷做一道KMP很基础的题
大致就是查找所有子串出现的位置
再打印next数组
一个测试点过不了它属于很长的字符串


```c++
#include<iostream>
#include<string.h>
#include<string>
using namespace std;
const int L = 1e6+10;
void KMP(char *S, char *T, int next[]) {
    int i = 0, j = 0, flag = 0;
    int lenS = strlen(S);
    int lenT = strlen(T);
    while (i < lenS) {
        if (S[i] == T[j] || j == -1) {
            i++;
            j++;
        }
        else {
            j = next[j];
        }
        if (j == lenT) {
            flag = 1;
            cout << i - j + 1 << endl;
            j = next[j];
        }
    }
    if (flag == 0) {
        cout << -1;
    }
    return;
}
void getNext(char *T, int* next) {
    int i = 0, j = -1;
    next[0] = -1;
    int lenT =strlen(T);
    while (i < lenT) {
        if (j == -1 || T[i] == T[j]) {
            i++;
            j++;
            next[i] = j;
        }
        else {
            j = next[j];
        }
    }
    return;
}
int main() {
    char s1[L], s2[L];
    scanf("%s",s1);
    scanf("%s",s2);
    int next[L]={0};
    getNext(s2, next);
    KMP(s1, s2, next);
    int i=0,len=strlen(s2);
    for(i=1;i<len;i++){
        cout<<next[i]<<" ";
    }
    cout<<next[i]<<endl;
    return 0;

}

代码如上,
具体情况就是我复制粘贴那个测试点,就不执行。
我猜是scanf()的问题。
其实cin
scanf
我真的搞不懂

我想要达到的结果
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月28日
    • 创建了问题 3月20日

    悬赏问题

    • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
    • ¥15 怎么看我在bios每次修改的日志
    • ¥15 python+mysql图书管理系统
    • ¥15 Questasim Error: (vcom-13)
    • ¥15 船舶旋回实验matlab
    • ¥30 SQL 数组,游标,递归覆盖原值
    • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
    • ¥20 gitlab 中文路径,无法下载
    • ¥15 用动态规划算法均分纸牌
    • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据