动不了一点 2024-02-22 00:34 采纳率: 17.2%
浏览 19
已结题

洛谷提交失败不知道为什么

来自洛谷P3375 【模板】KMP 题解,提交失败
代码:

#include "iostream"
using std::cin;
using std::cout;
using std::endl;
using std::strlen;
char a[1000005], b[1000005];
int next[1000005];
int lena, lenb;
int main() {
    cin >> a + 1 >> b + 1;
    lena = strlen(a + 1);
    lenb = strlen(b + 1);
    next[1] = 0;
    int j = 0;
    for (int i = 2; i <= lenb; i++) {
        while (j > 0 && b[i] != b[j + 1])j = next[j];
        if (b[i] == b[j + 1])j++;
        next[i] = j;
    }
    j = 0;
    for (int i = 1; i <= lena; i++) {
        while (j > 0 && a[i] != b[j + 1])j = next[j];
        if (a[i] == b[j + 1])j++;
        if (j == lenb)cout << i - j + 1 << endl;
    }
    for (int i = 1; i <= lenb; i++) {
        cout << next[i] << ' ';
    }
}

  • 写回答

2条回答 默认 最新

  • GISer Liu 2024-02-22 00:35
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据你提供的代码和问题描述,首先需要解决的是提交失败的问题。洛谷的提交失败可能有多种原因,但根据你提供的信息,我猜测可能是代码中的一些细节问题导致了提交失败。

    具体来说,你的代码中存在一些问题:

    1. strlen 函数是C标准库中的函数,用于计算字符串的长度。但是在你的代码中,你使用了 strlen(a + 1)strlen(b + 1),这是不正确的用法。strlen 函数应该接受一个指向字符串首字符的指针,而 a + 1b + 1 并不是指向字符串首字符的指针。因此,需要将 strlen(a + 1)strlen(b + 1) 改为 strlen(a)strlen(b)

    2. 另外,你声明了一个数组 next[1000005],但是在实际使用时,这个数组可能会超出范围,导致内存溢出。这里建议根据实际情况调整数组的大小,或者使用动态内存分配来解决。

    修改后的代码如下所示:

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    char a[1000005], b[1000005];
    int next[1000005];
    int lena, lenb;
    
    int main() {
        cin >> (a + 1) >> (b + 1);
        lena = strlen(a + 1);
        lenb = strlen(b + 1);
        next[1] = 0;
        int j = 0;
        for (int i = 2; i <= lenb; i++) {
            while (j > 0 && b[i] != b[j + 1]) j = next[j];
            if (b[i] == b[j + 1]) j++;
            next[i] = j;
        }
        j = 0;
        for (int i = 1; i <= lena; i++) {
            while (j > 0 && a[i] != b[j + 1]) j = next[j];
            if (a[i] == b[j + 1]) j++;
            if (j == lenb) cout << i - j + 1 << endl;
        }
        for (int i = 1; i <= lenb; i++) {
            cout << next[i] << ' ';
        }
        return 0;
    }
    

    这样修改之后,应该可以解决提交失败的问题。如果还有其他问题,欢迎提出,我会尽力帮助你解决。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月1日
  • 已采纳回答 2月22日
  • 创建了问题 2月22日

悬赏问题

  • ¥15 (标签-android|关键词-app)
  • ¥15 微信小程序web-view嵌套H5页面IOS左滑会出现相同的页面,有什么解决方法吗?
  • ¥60 如何批量获取json的url
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数
  • ¥15 llama3中文版微调
  • ¥15 pg数据库导入数据序列重复
  • ¥15 三分类机器学习模型可视化分析
  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)