基础Bug

本章节主要阐述一些最基本的bug。

虽然这些bug看起来很弱智简单,但正是因为这些小bug,让我们调代码的时间增加至少 \(2,3\) 个小时。

本系列的宗旨就是综合这些小bug极其对应解决方案,让bug的阻碍尽量减小。

测评结果

测评结果其实并不算Bug,但这些多样的测评结果了解他们能够更好地了解Bug的种类,进而更快地找出Bug,瞬切此题。

  • WA

WA,全称 Wrong Answer,是最为常见的一种错误。

最为常见的引发方式就是输出文件与答案文件不符,随便改一下代码,或者代码实现错误就出来了。

除此之外,也可能是因为空间越界、没有初始化导致的错误。

  • TLE

TLE,全称 Time Limit Exceeded,超时。

一般是因为算法时间复杂度过大导致。

也有的是因为空间越界、输入文件未及时终止、常数过大导致。

  • MLE

MLE,全称 Memory Limit Exceeded,内存超限。

一般是因为使用空间过大导致。

也有访问越界导致的可能。

  • RE

RE,全称 Runtime Error,一般是因为访问越界、访问未定义位置导致。

值得一提的是,在CCF的本地测试中,RE一般会与MLE一同出现。

  • CE

CE,全称Compile Error,编译错误,最不用说的错误,跟着编译器指引就能改好。

(若有欠缺,欢迎补充)

基本算法中的常见Bug

1.位运算

  • 左/右移一个负数。

一般会RE。

  • (1<<63) 爆 long long!(1<<31) 爆 int!

十年OI一场空,不开 long long 见祖宗,祖训自然不用说。

2.递推

  • 空间开小了。

很常见的错误。

  • 递推式错误。

推式子是个很艰难的过程。

  • 递推数组越界

设递推式 \(s_i=s_{i-k}+i\),若 \(i-k<0\) 时则会越界,容易RE。

3.递归

  • 递归爆栈

    两种情况:

第一种,代码无误但大样例测试RE。

这个不是代码author的问题。

如果没有重定义栈空间大小,而有一个 \(10^5\) 级别的大数据,这时,你的本地测试大概率将会RE,但提交测试时没有问题。

第二种,开大栈空间后仍然RE

此时就是本地代码实现的问题了。

  • 无限递归

考虑以下递归函数:

int solve(int l,int r,int x) {
int mid=l+r>>1;
return x<=mid?solve(l,mid,x):solve(mid,r,x);
}

当 \(l=r=x\) 时,会不断重复进入 \(solve(l,mid,x)\) 范围内,由于此时 \(mid=(l+r)/2=l*2/2=l=r\),故此时仍然在 \(solve(l,r,x)\)。成功死循环。欧耶!

  • 递归中不合法

简单来说就是从一开始正常,到后面就会出现一些难以控制的情况,最后可能会导致RE等后果。

很难举例,无限递归就是其中一种。

3.二分

  • 二分边界问题

很常见的情况,但掌握常见算法模板即可免除。

4.排序

  • cmp判定错误

  • 排序边界错误

sort(a+1,a+n+1);//这个排的是 [1,n]
sort(a,a+n)//这个排的是[0,n)

0.其他常见问题

  • 输入问题

请看这题:

给你两个长度分别为 \(n,m\) 的序列,分别输出他们的和。

正确代码:

int n,m,a[100010],b[100010];
int main() {
cin>>n>>m;int sum1=0,sum2=0;
for(int i=1;i<=n;++i) cin>>a[i],sum1+=a[i];
for(int i=1;i<=m;++i) cin>>b[i],sum2+=b[i];
cout<<sum1<<" "<<sum2<<"\n";
}

你可能是写成了:

int n,m,a[100010],b[100010];
int main() {
cin>>n>>m;int sum1=0,sum2=0;
for(int i=1;i<=n;++i) cin>>a[i],sum1+=a[i];
for(int i=1;i<=n;++i) cin>>b[i],sum2+=b[i];//m个数写成了n个。
cout<<sum1<<" "<<sum2<<"\n";
}

值得一提的是,这个问题经常出现在图论中,点数和边数搞反。

  • 唐氏循环
for(int i=1;i<=n;--i) 

for(int i=n;i>=1;++i)

while(n) {
//... (没写减少n的操作)
}
  • 非 void 函数有返回值。

编译没问题,但提交可能莫名出现RE等其他问题。

  • 精度误差

很唐氏玄学。

这么说吧,有的题要开 long double ,但有的题开 long double 反而过不掉。

  • 数组问题
int a[100];
int main() {
for(int i=1;i<=100;++i) cin>>a[i];
}

对于一个数组,若:

int a[N];

那么 \(a\) 数组的下标访问边界是 \([0,N)\)。没错,访问 \(a[N]\) 是不合法的。

debug指南-基础bug的更多相关文章

  1. 【转】Spark性能优化指南——基础篇

    http://mp.weixin.qq.com/s?__biz=MjM5NDMwNjMzNA==&mid=2651805828&idx=1&sn=2f413828d1fdc6a ...

  2. D3D11 Debug Layer的bug

    在开发D3D应用程序时,我们会使用Debug Layer来调试应用程序,以确保我们的程序在最终发布时没有warnings和errors.不过最近在开发应用程序时遇到了这样的问题,就是我把多个网格模型的 ...

  3. Spark性能优化指南——基础篇

    本文转自:http://tech.meituan.com/spark-tuning-basic.html 感谢原作者 前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一 ...

  4. H5活动产品设计指南基础版

    本文来自 网易云社区 . H5一般页面不会很多,看似简单,实际上会有很多细节需要注意,我自己在做过了几个H5之后,发现了一些常犯的问题,做了小结,希望给新开始做H5的产品相关的同学提供一些帮助.  首 ...

  5. Spark性能优化指南——基础篇(转)

    [转]Spark性能优化指南——基础篇 http://mp.weixin.qq.com/s?__biz=MjM5NDMwNjMzNA==&mid=2651805828&idx=1&am ...

  6. 0803-PyTorch的Debug指南

    0803-PyTorch的Debug指南 目录 一.ipdb 介绍 二.ipdb 的使用 三.在 PyTorch 中 Debug 四. 通过PyTorch实现项目中容易遇到的问题 五.第八章总结 py ...

  7. 【转载】 Spark性能优化指南——基础篇

    转自:http://tech.meituan.com/spark-tuning-basic.html?from=timeline 前言 开发调优 调优概述 原则一:避免创建重复的RDD 原则二:尽可能 ...

  8. Spark性能优化指南——基础篇(转载)

    前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作 ...

  9. Spark性能优化指南——基础篇转

    前言 在大数据计算领域,Spark已经成为了越来越流行.越来越受欢迎的计算平台之一.Spark的功能涵盖了大数据领域的离线批处理.SQL类处理.流式/实时计算.机器学习.图计算等各种不同类型的计算操作 ...

  10. Spark性能优化指南--基础篇

    前言 开发调优 调优概述 原则一:避免创建重复的RDD 原则二:尽可能复用同一个RDD 原则三:对多次使用的RDD进行持久化 原则四:尽量避免使用shuffle类算子 原则五:使用map-side预聚 ...

随机推荐

  1. csv导入导出组件jcsv

    jcsv 介绍 jcsv一个简单的.轻量级的csv导入.导出库,相对于opencsv与javacsv,jcsv侧重于导入导出,包括导入校验.导出模板等. 源代码地址:https://gitee.com ...

  2. AvaloniaChat—从源码构建指南

    AvaloniaChat介绍 一个使用大型语言模型进行翻译的简单应用. 我自己的主要使用场景 在看英文文献的过程中,比较喜欢对照着翻译看,因此希望一边是英文一边是中文,虽然某些软件已经自带了翻译功能, ...

  3. 为什么用Vite框架?来看它的核心组件案例详解

    Vite 是一个前端构建工具,它以其快速的开发服务器和生产优化的打包器而闻名前端界,今天的内容,必须得唠唠 Vite 的关键能力,以下是 Vite 的核心组件分析,以及使用案例: 原理分析: Vite ...

  4. zabbix资产清单inventory管理

    概述 监控的设备越来越多,有时候搞不清楚哪台服务器是什么配置,大多公司有自己的资产清单,要去专门的系统查询显得多少有点麻烦.为此,zabbix专门设置了设备资产管理功能.我们创建或者编辑主机的时候,可 ...

  5. 逆向WeChat (五)

    本篇逆向mmmojo.dll,介绍如何使用mmmojo,wmpf_host_export的mojo. 本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/18216717 ...

  6. .net core mvc 跳转LoginPath时端口缺失

    在使用nginx部署.net core mvc的程序时,假如我使用的是5002端口,并且当访问站点时如果未登录,则跳转到登录页面.可是最后却发现跳转的时候端口丢失了,那是因为我配置的是       p ...

  7. 神奇的C语言输出12天圣诞节歌词代码

    12天圣诞节程序怎样运行?1988 年,一个令人印象深刻且令人敬畏的 C 代码,代号为 xmas.c,在国际混淆 C 代码竞赛中获胜.该程序甚至比其输出的"压缩"类型还要小,代表了 ...

  8. 游戏AI行为决策——Behavior Tree(行为树)

    游戏AI行为决策--行为树 前言 行为树,是目前游戏中应用较为广泛的一种行为决策模型.这离不开它成熟的可视化编辑工具,例如Unity商城中的「Behaviour Designer」,甚至是虚幻引擎也自 ...

  9. 工具 – Prettier、ESLint、Stylelint

    前言 以前在 Webpack 学习笔记 有稍微介绍过它们.这篇是单独整理版. 参考 一文彻底读懂ESLint 你的ESLint真的需要Prettier吗? 搞懂eslint和prettier等的关系 ...

  10. Angular – ESLint

    介绍 Angular wrap 了一层 ESLint, 定义了一些 best practice guide. 这篇说说如何 setup 它. 这个 ESLint 并不是 under Angular T ...