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 题目的相关用法有着更深的了解。

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

相关推荐
长安城没有风2 小时前
Java 高并发核心编程 ----- 初识多线程(上)
java·juc
董世昌412 小时前
HTTP协议中,GET和POST有什么区别?分别适用什么场景?
java·开发语言·前端
独自破碎E2 小时前
Java中HashMap的默认负载因子为什么设置为0.75?
java·开发语言·网络
疋瓞2 小时前
C/C++查缺补漏《5》_智能指针、C和C++中的数组、指针、函数对比、C和C++中内存分配概览
java·c语言·c++
幽络源小助理2 小时前
SpringBoot+Vue大学城水电管理系统源码 | 后勤设备管理 | 幽络源
java·开发语言
闻林禹2 小时前
c++并发编程
开发语言·c++
CTO Plus技术服务中2 小时前
一栈式、系统性的C、C++、Go、网络安全、Linux运维开发笔记和面试笔记
c++·web安全·golang
zc.ovo2 小时前
线段树优化建图
数据结构·c++·算法·图论
WaWaJie_Ngen2 小时前
C++实现一笔画游戏
c++·算法·游戏·游戏程序·课程设计