一道题Wrong Answer之后该何去何从?

敲代码手不稳是个大毛病,往往会让一份能AC的代码变成99.995%正确,失之毫厘谬以千里,最近十场个人赛很少有能一次AC的经历,仔细想想除了根本逻辑上的错误,大概都是跪在这些细节上:


1.输出格式,输入格式是否符合规范,有没有Case #?是否有多余空格输出?I64d or lld?输出浮点数尽量不要用cout。


2.i和j,n和m,l和r有没有写混了的。。(今晚检查了两小时的程序发现i<=m写成了i<=n...吾之内心几乎崩溃orz。。


3.边界问题,从0开始还是从1开始?递推式有没有越界?不要使用cnt数组来累计某个值出现多少次,最好使用map来映射。。


4.爆int,爆longlong,数论题尤其要注意,每次测试滚键盘来几个大数字。爆int的话实在拿不准数据范围,在内存允许的情况下#define int long long;爆long long的话把每个乘法操作模除大素数(必要情况下加法操作最好也要。


5.对于不合法输入或无解情况的处理。。是输出-1还是0还是no solution好好读题。


6.某些应该注释掉的句子没注释,freopen什么的。。


7.特判情况遗漏。


8.数据还没完全读入就贸然结束程序。。虽然有些时候答案已经出来了。


解决办法还是静下心来,思路乱的时候手不要碰键盘,太庞大太复杂的流程分模块来写,先想好样例再去写代码。

眼下组队赛要开始了,不能坑队友。


附:

debug流程(from知乎:

1、重新通读一遍代码,检查初始化,检查输出格式,需不需要输出CASE等

2、检查经常出现的一些手误,两重for循环中i,j用混,多重for循环中i被多次使用,long long相关问题等。

3、检查数据范围,重新读一遍题,确认题意,思考边界数据对代码的影响,数组是否开小,是否爆int等。
4、进行暴力对跑,写个暴力但保证正确的版本,利用小数据和代码对跑。
5、如果不是个人赛,找队友或者其他朋友帮忙看代码,把代码给他们解释,让他们想有没有问题。如果是在比赛中,现在可以暂时放弃这一题先看别的题了,之后有空再回来看。。
6、如果别人过了就对比两份代码,或者直接对跑
7、睡一觉,补下番,来两把lol,明天再看一遍。。
8、搜数据。。。。
9、搜题解。。。。
10、默念一句:数据有问题,关题目。
  • 23
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值