一道题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.特判情况遗漏。

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

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

附:

debug流程(from知乎:

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

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

3、检查数据范围,重新读一遍题,确认题意,思考边界数据对代码的影响,数组是否开小,是否爆int等。

4、进行暴力对跑,写个暴力但保证正确的版本,利用小数据和代码对跑。

5、如果不是个人赛,找队友或者其他朋友帮忙看代码,把代码给他们解释,让他们想有没有问题。如果是在比赛中,现在可以暂时放弃这一题先看别的题了,之后有空再回来看。。

6、如果别人过了就对比两份代码,或者直接对跑

7、睡一觉,补下番,来两把lol,明天再看一遍。。

8、搜数据。。。。

9、搜题解。。。。

10、默念一句:数据有问题,关题目。

版权声明:博主表示授权一切转载:)

时间: 2024-10-16 00:12:29

一道题Wrong Answer之后该何去何从?的相关文章

微软等数据结构+算法面试100题全部答案集锦

1.把二元查找树转变成排序的双向链表. 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10  / \  6 14  / \ / \  4 8 12 16 转换成双向链表 4=6=8=10=12=14=16. 首先我们定义的二元查找树节点的数据结构如下: struct BSTreeNode  {  int m_nValue; // value of node  BSTreeNode *m_pLeft; // left child

hdu4027 Can you answer these queries?

Problem Description A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use our secret weapon to eliminate the battleships. Each of the battleships can be marked a value of endurance. For every attack of ou

bzoj 2482: [Spoj GSS2] Can you answer these queries II 线段树

2482: [Spoj1557] Can you answer these queries II Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 145  Solved: 76[Submit][Status][Discuss] Description 给定n个元素的序列. 给出m个询问:求l[i]~r[i]的最大子段和(可选空子段). 这个最大子段和有点特殊:一个数字在一段中出现了两次只算一次. 比如:1,2,3,2,2,2出现了3次,但只算一次,

HDU 4027 Can you answer these queries?(线段树,区间更新,区间查询)

题目 线段树 简单题意: 区间(单点?)更新,区间求和 更新是区间内的数开根号并向下取整 这道题不用延迟操作 //注意: //1:查询时的区间端点可能前面的比后面的大: //2:优化:因为每次更新都是开平方,同一个数更新有限次数就一直是1了,所以可以这样优化 #include <stdio.h> #include<math.h> #define N 100010 #define LL __int64 #define lson l,m,rt<<1 #define rson

SPOJ 1557. Can you answer these queries II 线段树

Can you answer these queries II Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://www.spoj.com/problems/GSS2/ Description Being a completist and a simplist, kid Yang Zhe cannot solve but get Wrong Answer from most of the OI problems. And he refuse

spoj gss2 : Can you answer these queries II 离线&amp;&amp;线段树

1557. Can you answer these queries II Problem code: GSS2 Being a completist and a simplist, kid Yang Zhe cannot solve but get Wrong Answer from most of the OI problems. And he refuse to write two program of same kind at all. So he always failes in co

HDU 4027 Can you answer these queries? 线段树,区间修改

Can you answer these queries? Problem Description A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use our secret weapon to eliminate the battleships. Each of the battleships can be marked a value of end

Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) F2. Wrong Answer on test 233 (Hard Version) dp 数学

F2. Wrong Answer on test 233 (Hard Version) Your program fails again. This time it gets "Wrong answer on test 233" . This is the harder version of the problem. In this version, 1≤n≤2?105. You can hack this problem if you locked it. But you can h

HDU4027 Can you answer these queries 线段树区间求和+剪枝

给了你n,然后n个数字在一个数组中,接下来m个询问,每个询问三个数字 t,x,y,若t==0,那么修改区间[x,y]的每一个值,变为原来每个位置上的数 开根号取整,若t==1,那么对区间[x,y]求和 由于n,m,很大,所以树状数组铁定超时,若直接用线段树来做区间修改,那么也是超时,这类题目没别的方法了,静心剪枝,发现题目给的数据范围为2^63,有没有发现,2^63开根号 绝对不需要开10次,就能到1,到1以后就不需要再开了,意思就是若有某个区间[x,y]每一个点的值都为1时,这一段区间事实上是