提问:是否遇到过如下情形?
1、代码差一个点AC
2、刚开始有思路,后来写着写着思路忘了
3、测试样例过了,然后莫名全部WA
4、……
好了,如果有类似的或者一样的人可以看一看下文
(其实,没有的也可以看一看,给我提点改进建议_)
问题一:还差一丢丢AC
像这样
这样
这样
例子还有好多……好多(此处省略无穷个好多),那既然这么多,该怎么解决呢?
从调试代码开始
- 因为在竞赛中是不可能让各位把代码先交上去评测,得到结果后再次调试的,所以,在调代码的时候,一定要把所有情况都考虑到。
注意特例
有时只错那么几个点可能是特例问题,因为特例的状况如下:
-
1、数据点太大(如图2 , 2、3、4测试点实际上是10、11、12,巨大无比)
-
2、0和极限(比如图1很可能)
-
3、特殊规则(俗称“卡常”,比如图3很可能)
测试特例
-
我们是有主动权的人类,所以要自己test自己的代码能不能过特例
-
1、大数据点:这个……貌似现场出完了考试也结束了,就检查一下算法复杂度能不能优化就行了
-
2、0和极限:0我们可以自己算出答案,极限的答案就算了
-
3、特殊规则:卡常点自己出自己算自己干没问题
-
总而言之,考场上一定要干自己能做、不怎么浪费时间的事!
然后,如果还是错了,那就没办法了。我们做好自己能做的、该做的,剩下的就听天由命了!
问题二:测试样例愉快AC,交上去全部WA
附上脑图:
问题三:写着写着……哎?思路是啥?
-
这实际上是一个注释没写好问题的翻版
-
刚开始学的时候,一定要养成写注释的好习惯,要不再往后学,越学越复杂,算法都记不住,不写注释岂不是越来越乱?
-
举个栗子,我就是一开始嫌写注释麻烦,还得来回来去折腾中英文输入法
-
但是后来,我就觉得不写注释有两大坏处:
1、别人看不懂:某谷网友帮我调代码,看不懂我这里那里是要干什么;老师帮我调代码,问我为什么要这么干
2、自己看不懂:过一段时间,我去复习知识点
(好习惯值得表扬),看见我初期写的代码,根本看不懂 -
话说回来,思路不能靠记,好记性不如烂键盘嘛
-
那什么样的注释会赢得众人欢呼呢?
以c++为例:
-
实际上,这篇代码的注释是按照写复杂算法的需求写的
-
这篇代码只需要这些:
//这里可以加上题目编号,方便查找
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int a[100100];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
//使用打枪法排序 ,从小到大
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
if(a[i]>a[j]) swap(a[i],a[j]);//大的放后面
}
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
-
注释可以写在当行后面,也可以写在此行的上一行
-
看怎么习惯怎么来吧
问题四:如何检查程序?输出对应什么评测状态?
话不多说,上万能脑图: