
| 🔭 个人主页: 散峰而望 |
|---|
《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 模式一般是竞赛和笔试面试常用的模式,就是只给你一个题目描述,外加输入样例和输出样例,
不会给你任何的代码。此时,选手或者应聘者需要根据题目要求,自己完成如下任务:
- 头文件的包含
- mai 函数的设计
- 自己定义程序所需的变量和容器(数组、链表、哈希表、字符串等等)
- 数据的输入(根据题目叙述控制输入数据的格式)
- 数据的处理(各种函数接口的设计)
- 数据的输出(根据题目叙述控制返回数据的格式)
总而言之,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 超时

可能得的原因:
- 代码中不小心,造成死循环了
- 代码中算法复杂度太高,太耗时
结语
希望读完此片各位朋友对 OJ 题目的相关用法有着更深的了解。
愿诸君能一起共渡重重浪,终见缛彩遥分地,繁光远缀天。
