- 注册
- 2024年01月28日
- 帖子
- 3
- 金粒
- 金粒621粒
- 钻石
- 钻石0颗
- 嗨币
- 嗨币0个
- 主题 作者
- #1
以下内容由AI生成
AI 总结生成中...
自我介绍就免了吧,大家也看得见我的名字。
今天讲讲如何更好的使用OJ,避免你”怀才不Accepted“
首先,我们来看这段代码:
(P1007 A+B)
需要注意的是,这段代码让OJ来看,是错误的。为什么呢?因为OJ他的解析器(?)是不需要你提示他的。毕竟他也不是ChatGPT,看不懂你的提示词。他只会把你的输出和正确的输出进行对比。如果你不懂我在说啥,可以去GitHub看看HCode OJ的源码
所以,我们要改成这样:
那么如果我们是用C/C++编写的,时间就只能在1000毫秒里面,且内存只能用32兆。其他语言同理。
比如我这样写:
那么我如果提交,就会提示Compile Error。这时候你可以点一下下面的Compile Error,就会跳转到提交详情。这里就可以看到报错信息了。比如我的就是:
这时候,你就需要百度搜报错内容找解决办法,或者在本地进行debug
那么虽然我的程序正确执行了,但是因为返回值是1,编译器就会抛出这个错误:
当然,有时候一些其他的错误也会触发这个Error,那只能百度自己的退出码了
今天讲讲如何更好的使用OJ,避免你”怀才不Accepted“
1.Wrong Answer 的判定
某些人就很奇怪啊,为啥我明明对了,他还是Wrong Answer呢?首先,我们来看这段代码:
(P1007 A+B)
#include<iostream> | |
using namespace std; | |
int main() | |
{ | |
int a,b; | |
cout << "请输入第一个数和第二个数,用空格隔开:"; | |
cin >> a >> b; | |
cout << a + b; | |
return 0; | |
} |
需要注意的是,这段代码让OJ来看,是错误的。为什么呢?因为OJ他的解析器(?)是不需要你提示他的。毕竟他也不是ChatGPT,看不懂你的提示词。他只会把你的输出和正确的输出进行对比。
所以,我们要改成这样:
#include<iostream> | |
using namespace std; | |
int main() | |
{ | |
int a,b; | |
cin >> a >> b; | |
cout << a + b; | |
return 0; | |
} |
2. XXX Limit Exceeded 的判定
我们可能会在编写过程中,遇到Time Limit Exceeded或者Memory Limit Exceeded的错误。这是为什么呢?字面意义上来看,Time Limit Exceeded 就是程序运行时间已超出题目限制,Memory Limit Exceeded 就是程序实际使用的内存已超出题目限制。那限制在哪里呢?我们写题目的时候,可以看到左上角的时间限制和内置限制。比如,这是P1007 A+B的限制:时间限制:C/C++ 1000MS,其他语言 2000MS | |
内存限制:C/C++ 32MB,其他语言 64MB |
那么如果我们是用C/C++编写的,时间就只能在1000毫秒里面,且内存只能用32兆。其他语言同理。
3. Compile Error 的判定
Compile Error一般是因为报错了,编译不了。比如我这样写:
#include<iostream> | |
using namespace std; | |
int main() | |
{ | |
int a,b; | |
cin >> a >> b; | |
cout << a + b // 这里少个分号 | |
return 0; | |
} |
那么我如果提交,就会提示Compile Error。这时候你可以点一下下面的Compile Error,就会跳转到提交详情。这里就可以看到报错信息了。比如我的就是:
main.cpp: In function 'int main()': | |
main.cpp:7:18: error: expected ';' before 'return' | |
7 | cout << a + b // 这里少个分号 | |
| ^ | |
| ; | |
8 | return 0; | |
| ~~~~~~ |
这时候,你就需要百度搜报错内容找解决办法,或者在本地进行debug
4. Runtime Error 的判定
Runtime Error一般是因为你没有正常退出程序。比如说我这样子写:#include<iostream> | |
using namespace std; | |
int main() | |
{ | |
int a,b; | |
cin >> a >> b; | |
cout << a + b; | |
return 1; // 注意这里,我return的不是0,而是1 | |
} |
那么虽然我的程序正确执行了,但是因为返回值是1,编译器就会抛出这个错误:
Runtime Error | |
运行时间1ms | |
运行内存260KB | |
ExitCode: 1 (Hangup) |
当然,有时候一些其他的错误也会触发这个Error,那只能百度自己的退出码了
5.Presentation Error 的判定
这个Error是表明很接近正确答案,这时候就要检查代码格式输出是否有多余空格,换行等空白符。6.Partial Accepted 的判定
这个是因为代码通过了多数判定点,但有些没通过。这时候就要看看代码是不是有些不足,比如…多来几个else if?7.其他
(复制至 Introduction – 高途编程 C++)- __int64不是ANSI标准定义,只能在MSVC编译器使用,在 GNU C++ 中应写成 long long 类型, scanf和printf 请使用%lld作为格式(黄楚钊的解释:__int64是微软给他加上的,原版C+++没有。scanf和printf别用%d,要用%lld(long long整型)(没学过C,应该是这样吧))
- main() 返回值必须定义为 int ,而不是 void(黄楚钊的解释:不能用void main(),然后省略return 0;)
- i 在循环外失去定义 “for(int i=0…){…}”(黄楚钊的解释:for循环的第一个条件的变量是局部的,循环过了之后不能用)
- itoa 不是ansi标准函数(标准 C/C++ 中无此函数)