OJ 题目的做题模式和相关报错情况

🔭 个人主页: 散峰而望

《C语言:从基础到进阶》《编程工具的下载和使用》《C语言刷题》《算法竞赛从入门到获奖》《人工智能》《AI Agent》
愿为出海月,不做归山云


🎬博主简介

OJ 题目的做题模式和相关报错情况

  • [1. 做题模式 -- ACM 模式和核心代码模式](#1. 做题模式 -- ACM 模式和核心代码模式)
    • [1.1 ACM 模式](#1.1 ACM 模式)
    • [1.2 核心代码模式](#1.2 核心代码模式)
  • [2. 报错情况](#2. 报错情况)
    • [2.1 牛客](#2.1 牛客)
      • [2.1.1 编译错误](#2.1.1 编译错误)
      • [2.1.2 答案错误](#2.1.2 答案错误)
      • [2.1.3 通过部分用例](#2.1.3 通过部分用例)
      • [2.1.4 运行超时](#2.1.4 运行超时)
    • [2.2 洛谷](#2.2 洛谷)
      • [2.2.1 编译错误](#2.2.1 编译错误)
      • [2.2.2 洛谷WA(wrong answer)](#2.2.2 洛谷WA(wrong answer))
      • [2.2.3 洛谷部分用例通过](#2.2.3 洛谷部分用例通过)
      • [2.2.4 程序运行时出现运行时问题](#2.2.4 程序运行时出现运行时问题)
          • [2.2.4.1 段错误提示](#2.2.4.1 段错误提示)
          • [2.2.4.2 除数为0的提示](#2.2.4.2 除数为0的提示)
      • [2.2.5 超时](#2.2.5 超时)
  • 结语

1. 做题模式 -- ACM 模式和核心代码模式

1.1 ACM 模式

ACM 模式一般是竞赛和笔试面试常用的模式,就是只给你一个题目描述,外加输入样例和输出样例,

不会给你任何的代码。此时,选手或者应聘者需要根据题目要求,自己完成如下任务:

  1. 头文件的包含
  2. mai 函数的设计
  3. 自己定义程序所需的变量和容器(数组、链表、哈希表、字符串等等)
  4. 数据的输入(根据题目叙述控制输入数据的格式)
  5. 数据的处理(各种函数接口的设计)
  6. 数据的输出(根据题目叙述控制返回数据的格式)

总而言之,ACM 模式相当于给你一个空白的代码框,让你自己设计程序来解决问题。

例如: 洛谷平台上一道算法题 --- 地毯

题目要求:

提交页面:

参考代码:

cpp 复制代码
#include <iostream>
using namespace std;
const int N = 1010;
int n, m;
int f[N][N]; // 差分矩阵 
// 差分数组的性质 
void insert(int x1, int y1, int x2, int y2, int k)
{
    f[x1][y1] += k; f[x1][y2 + 1] -= k; f[x2 + 1][y1] -= k; f[x2 + 1][y2 + 1] += k;
}
int main()
{
    cin >> n >> m;
    // 构建差分数组 
    while(m--)
    {
        int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
        insert(x1, y1, x2, y2, 1);
    }
    // 利用前缀和还原修改之后的数组 
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            f[i][j] = f[i - 1][j] + f[i][j - 1] - f[i - 1][j - 1] + f[i][j];
            cout << f[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

1.2 核心代码模式

核心代码模式仅仅甩给你一个函数,我们仅需完成这个函数的功能即可。在你完成这个函数之后,后台会调用你所写的函数,进行测试。

因此,这种情况下,我们只需完成核心的函数接口,无需考虑数据的输入和输出。

例如: leetcode 上一道简单的核心代码模式的题 --- 移除元素

题目要求:

提交页面:

参考代码:

c 复制代码
int removeElement(int* nums, int numsSize, int val) {
    //先创建两个变量
        int src, dst;
        src = dst = 0;
        while(src < numsSize)
        {
            if(nums[src] == val)
            {
                src++;
            }
            else
            {
                //赋值,两指针++
                nums[dst] = nums[src];
                dst++;
                src++;
            }
        }
        //此时dst的值刚好就是新数组的有效长度
        return dst;
}

2. 报错情况

这里展示牛客洛谷的相关报错情况,洛谷相关报错情况网站讲解的比较细就不在这里描述了。

2.1 牛客

牛客给的报错信息也是比较详细的,这里简单例举一下。

2.1.1 编译错误

2.1.2 答案错误

2.1.3 通过部分用例

2.1.4 运行超时

可能性: 代码中出现了死循环,代码的算法复杂度确实是过高,太耗时。
解决办法: 检查代码、优化程序。

2.2 洛谷

2.2.1 编译错误

刷新一下就能看到编译错误的信息:

2.2.2 洛谷WA(wrong answer)

这说明代码运行结果和预期不符,答案是错误的.

2.2.3 洛谷部分用例通过

一个题目可能有多个测试用例,有部分测试用例通过,但是也有部分测试用例未通过,基本的原因是代码考虑不周全。这种情况是最经常遇见的情况

2.2.4 程序运行时出现运行时问题

这种场景代码是程序编译没有语法问题,编译产生了可执行程序,程序运行时出现了问题,比如:段错误、除数为 0 等。

2.2.4.1 段错误提示
2.2.4.2 除数为0的提示

2.2.5 超时

可能得的原因:

  1. 代码中不小心,造成死循环了
  2. 代码中算法复杂度太高,太耗时

结语

希望读完此片各位朋友对 OJ 题目的相关用法有着更深的了解。

愿诸君能一起共渡重重浪,终见缛彩遥分地,繁光远缀天

相关推荐
CylMK几秒前
题解:P11625 [迷宫寻路 Round 3] 迷宫寻路大赛
c++·数学·算法
LucaJu1 分钟前
Java + EasyExcel 实现单个接口导出多个Excel
java·excel
橘子编程10 分钟前
密码学完全指南:从基础到实战
java·python·密码学
计算机安禾12 分钟前
【数据结构与算法】第44篇:堆(Heap)的实现
c语言·开发语言·数据结构·c++·算法·排序算法·图论
kaikaile199515 分钟前
能量算子的MATLAB实现与详细算法
人工智能·算法·matlab
tankeven18 分钟前
HJ175 小红的整数配对
c++·算法
J2虾虾22 分钟前
使用Idea当Jar包的反编译
java·intellij-idea·jar
Aaron158823 分钟前
数字波束合成DBF与模拟波束合成ABF对比浅析
大数据·人工智能·算法·硬件架构·硬件工程·信息与通信·信号处理
成都易yisdong25 分钟前
实现三北方向转换计算器(集成 WMM2025 地磁模型)
开发语言·windows·算法·c#·visual studio
汀、人工智能25 分钟前
[特殊字符] 第91课:课程表
数据结构·算法·数据库架构·图论·bfs·课程表