oj(牛客网在线)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值