论那些在vjduge等oj平台踩过的坑

44 篇文章 0 订阅
27 篇文章 1 订阅

论那些在vjduge等oj平台踩过的坑

1.常见问题

(1)题目对时间和空间的要求:开数组时要考虑内存,同时兼顾时间复杂度,对于要求相对较低的题目,可以直接暴力解决。

(2)出现Presentation Error,输出格式不正确。例如:如下的空行问题

(3)注意要输入多少次数据!!!谨记,第二次踩坑了,下不为例!!!自己出数据测试一点没错,找半天bug 找不到。

例如

一定要仔细阅读输入输出,不要范这种低级的错误。而且,在oj平台,这种循环输入应该是非常常见的。

(4)注意,循环之后,有一些全局定义的数组可能会被修改过了,那么循环结束一遍之后,要对它进行初始化,更改称为初始值,否则可能出现叠加情况,导致wrong answer!当然,解决方法可以是在函数体中(或者每次的while循环中)定义新变量,每次重新定义。

(5)虽然看起来cin比较简洁,但是事实上,使用cin可能出现一次数据读入问题,比如说,在我的博文Ants(POJ No.1852)中,如果用cin读入的话,会超时,当然,可以通过添加 ios::sync_with_stdio(false) 语句来解决。不过,事实证明,当需要读入的数据量比较大时,用scanf更划算,同时scanf可以读入一些具有特殊格式的字符串,比如说:3:2可以通过语句

scanf("%d:%d", &a, &b);

来完成,而使用cin的话,至今本人没想起来比这种更方便的读入方式。

(6)初始化!!!!一定要初始化啊!!!

(7)每完成一个案例之后数据要清零。

(8)如果通过了案例却一直WA,那就按照自己思路从新过一遍。不能依赖debug!!!

(9)https://vjudge.net/problem/HDU-2000  输出一个空格之后在换行!=直接换行

(10)float 对应 f%  double  对应lf%   要保留几位小数就直接%.n就OK

(11)未知数据项数目时,判断读取是否已经到了结尾,可以使用~scanf,(貌似和!=EOF等价)当然是用cin>>好像也是可行的

(12)读取字符串,可以使用scanf(“%s”,str),表示读取整个字符串,同时,不需要加取地址符,而scanf(“%c”,&ch),需要加取地址符号,表示读取一个字符,注意在读取char型字符串后,最后一个为'\0',最后一个应该为减一strlen(ch)-1

(13)注意就算是你声明double类型变量,你double temp=1/3;结果仍然是0;所以要在前面加(double)!!!

(14)进制转换,十六进制数,十进制输出,使用C中的语法显得更加有效。

https://vjudge.net/problem/HDU-1720

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    int a, b;
    while(scanf("%x %x", &a, &b) != EOF)
        printf("%d\n", a + b);
    return 0;
}

14.单引号表示和双引号表示,并不相同,双引号是字符串,而单引号是字符,例如:“abcde”是正确的,但是,‘abc’就是错误的。

15.printf 的妙用。

%-m.ns,输出占m列,n个字符输出在m列范围的左侧,右补空格。如果n>m,则m自动取n值,保证n个字符正常输出。

2.OJ必备

个人感觉,学习数据结构的目的就在于为了让你更好地理解STL库中的函数,一定要学会充分利用STL,可以大大提高你解决问题的能力,而不是自己一步步地手写各种函数。同时,也可以让代码更加简洁明了,当然,在比赛中可以节约时间。

例如常用函数sort的各种用法:

            转至博主T.X https://www.cnblogs.com/TX980502/p/8528840.html

重要的话说三遍。

STL!!!

STL!!!

STL!!!

 

 

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值