OJ
文章目录
OJ介绍
OJ(online judge)自动判题系统
原理
前台
- 用户提交程序
后台
- 编译程序
- 执行编译的程序,将结果存放在文件中
- 比较用户输出的和标准答案
注意点
OJ不理会程序的细节
- 安全措施
- 有些OJ会对java语言要求使用固定的类名Main
- 严格的输入和输出格式
- 简单的比较文件
应对
- 正确的处理输入格式
- 正确的处理输出格式
- 输入输出均为标准的输入输出,不读写文件
正确的处理输入格式
常见的输入格式
- 预先不输入数据的组数
- 预先输入数据的组数
- 只有一组数据
应对
- 读到文件结尾
- 读数据组数然后循环
- 直接读数据
预先不输入数据的组数–读到文件结尾
c
while(scanf("%d%d",&a,&b)!=EOF){
printf("%d\n",a+b);
}
C++
while(cin>>a>>b)
{
count<<a+b<<endl;
}
Java
Scanner scanner = new Scanner(System,in);
while(scanner.hasNextint()){
int a = scanner.nextint();
int b = scanner.nextint();
System.out.println(a+b);
}
预先输入数据的组数–读数据组数然后循环
c
scanf("%d",&n);
for(int i=0;i<n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a+b);
}
C++
cin>>n;
for(int i =0;i<n;i++)
{
int a,b;
cin >> a>> b;
count <a+b <endl;
}
Java
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for(int i =0;i<n;i++)
{
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.printfln(a+b);
}
正确的处理输出格式
比较简单,注意细节,看题目要求
- 不要输出case数
- 要输出case 数
- 每个case后有空行–多输出一个换行(原来\n 变成\n\n)
- 两个case后有空行–加入判断语句来处理第一个不输出空行(在标准输入之前。)
处理技巧–输入
不用保存所有的输入 读一组计算一组,字符串小心带空白
- scanf,cin,nextInt,都是读取到空白结束
- gets,cin.getline, nextLine ,再自己parse
- 用scanf ,gets代替cin。bufferedInputStream
处理技巧 --输出
- 注意输出格式
- 字母大小写,换行
- 输出的case后有没有 “:”,“#”这类
- 每行末尾有\n,但一般都空白
- 用printf替代count,尽量使用bufferedOutputStream
OJ常见的结果状态
等待评测: 评测系统还没有评测到这个提交,请稍候
正在评测: 评测系统正在评测,稍候会有结果
编译错误:您提交的代码无法完成编译,点击“编译错误”可以看到编译器输出的错误信息
答案正确: 恭喜!您通过了这道题
运行错误: 您提交的程序在运行时发生错误,可能是空指针
部分正确: 您的代码只通过了部分测试点,继续努力!
格式错误: 您的程序输出的格式不符合要求(比如空格和换行与要求不一致)
答案错误: 您的程序未能对评测系统的数据返回正确的结果
运行超时: 您的程序未能在规定时间内运行结束
内存超限: 您的程序使用了超过限制的内存
异常退出: 您的程序运行时发生了错误
返回非零: 您的程序结束时返回值非 0,如果使用 C 或 C++ 语言要保证 int main 函数最终 return 0
浮点错误: 您的程序运行时发生浮点错误,比如遇到了除以 0 的情况
段错误 : 您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
多种错误: 您的程序对不同的测试点出现不同的错误
内部错误: 请仔细检查你的代码是否有未考虑到的异常情况,例如非法调用、代码不符合规范等。
原链接https://www.nowcoder.com/discuss/276