【坑】这些天刷基础题犯的诡异错误大集合

这些天刷基础题犯的诡(sha)异(bi)错误大集合 by pkl

        ———其中可能会有部分资料引用,引用会表明链接,如果没有标明敬请指出QAQ抱歉QAQ
----------------------------------

首先安利一发帖子:OI中有哪些常数优化的小技巧

ps:注意是基础题。所以嘛错误nc需要原谅。。毕竟我也是蒟蒻QAQAQ大蒟蒻QAQ

· 循环里的临时变量出了循环便无效
· 递归的临时变量不要定成全局变量
· 赋值的对象不要一不小心手抖写反了…比如b = a写成a = b【估计也只有我会犯这种诡异的错误了…
· 注意初始化
· …全局变量不要一不小心在函数里定义一遍在外面定义一遍…这样的话在函数里给全局变量赋值最后被赋的是函数内的临时变量<
· 多次bfs的时候不要忘了清空队列
· scanf的百分号个数和地址符…
· 检查逻辑运算符= =
· string的种种注意事项…
· getchar读入单个字符包括回车和空格 getline读入回车空格 scanf跳过空格和回车tab等不可见字符 cin不读,但是它认识<【我这说的都是些什么玩意儿。。
· 写各种数据结构的时候主函数一定要看好有没有把build之类的函数调用全…
· 位运算和加减运算的优先级…比如right son 2 * i + 1要写i << 1 | 1
· 网络流建边的时候注意结点的序号
· 注意类型的范围和精度…比如int 和long long…unsigned long long …double 和 float…
· 优先级拿不稳还是加个括号吧不会死
· 不要忘了puts("");…
· strcpy和memcpy使用注意事项
· stl queue没有clear函数。只能一个while然后一个一个pop
· priority_queue の bool operator只能是重载 < 
· 两个for用getchar读入二维的gragh的时候第一个for记得也加一个getchar来读回车…
· 记得看网页编译信息…
· string可以直接用==… char数组用strcmp…strcmp相同返回值为0。。反之为1。。
· bfs想好边界
· dp注意初始化。
· 数组下标越界处理的问题。。比如。。下图://不过poj超范围出数据也不是一次两次了大家都知道23333开大点就行了

· 栈溢出。。int炸了。。种种。。
· const int N = 1
· 每逢dfs 每次调用时初始化变量
· 宏定义。。比如这样:

//泥要开一个N * 4大小的数组
//本来一个const int可以解决结果傲娇的你用了define
//然后一不小心写成了这个德行:

#define N 1000 + 10
int a[N * 4];

//.......这就直接可以上天了...
//这个不大容易查出来。。。。
//不过有一次幸好我侥幸逃过了..因为我是这么写的

#define N 1000 + 10
int a[N << 2];

//233333位运算优先级啊位运算大法好拯救一切2333
= =所以还是用const int吧。。保平安 2333

Example

· 数组大小不要设2的整次幂。会拖慢速度。原因见下图。

· spfa要先松弛再判入不入队· scanf %c读入空格换行符(?)反正少用QAQ

下面一条【引用来源:vijos啦啦啦

· memset int如果是 1 或 INTMAX INTMIN 会有问题, 因为memset 是byte 8 位为单位设置的。 每个bit 设置为 全0 这样如果是int 就是 0000 全1 如果是int 数组 取出来就是 ffff的时候 是没有问题的, 其他情况如果设置数字过大会有高位byte 地位byte重叠的问题 , 设置为1 会出现 1111的情况. 通俗的讲,比如你int memset为1就是将1变为00000001,然后从数组头开始,每8位填充一个00000001,直到填充的次数等于第三个参数。最后如果是int,那就按Int的位数取出来,得到16843009。

下面一条【此处引用来源:memset陷阱

· 静态数组作为参数传入某个函数的时候,就会退化成指针,也就是该数组的首地址,其数组的长度信息就丢掉了,这就是在这个语境下退化的概念。这也是为什么在将数组作为参数传递时,同时要将数组的长度也一并传入的原因。比如这样:

void f(int s[],int len) { memset(s, 0, len); }
  int main(){
  int s[] = {1,2,3,4,5};
  f(s,sizeof(s));
  for (int i = 0; i < 5; ++i)
  printf("%d ", s[i]);
  puts("");
  return 0;
}

Example

当然除了再传递一个数组长度给函数这种方法来防止数组退化成指针之外,还有1种方法是使用数组的引用,加多一个‘&‘就可以了。

下面两条来源:点我QAQ

·前置 ++。后置 ++ 需要保存临时变量以返回之前的值,在 STL 中非常慢。事实上,int 的后置 ++ 在实测中也比前置 ++ 慢 0.5 倍左右(UOJ 上自定义测试)

· 数据结构用指针代替数组
 数组在用方括号时做了一次加法才能取地址!
 所以在那些计算量超大的数据结构中,你每次都多做了一次加法!!!在 64 位系统下是 long long 相加,效率可想而知。
 因此用指针!
 这里有个 trick:
 由于 C++ 中 a[b] = *(a+b) = *(b+a) = b[a],
 因此你可以用 i[a] 代替 a[i],用 1[b] 代替 b[1],多维数组同样可以,你甚至可以用 5[4[3[2[1[a]]]]] 代替 a[1][2][3][4][5]。
 用处,混乱代码 233。

---------------------------

to be continued..

时间: 2024-10-22 21:05:49

【坑】这些天刷基础题犯的诡异错误大集合的相关文章

牛客网刷基础题错题集

1. HTML 语言中,表格有多少对 <TR> 标签就表示有多少列,这句话是否正确? 否,有多少对<tr>就表示有多少行 2.如果一个HTML文档内含有阿拉伯文,则应该? UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码.UTF-8用1到6个字节编码UNICODE字符.用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文) 3.根据栅格系统的标准用法,错误的是 c <di

【原创】这道Java基础题真的有坑!我也没想到还有续集。

前情回顾 自从我上次发了<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章后.我通过这样的一个行文结构: 解析了小马哥出的这道题,让大家明白了这题的坑在哪里,这题背后隐藏的知识点是什么. 但是我是万万没想到啊,这篇文章居然还有续集.因为有很多读者给我留言,问我为什么?怎么回事?啥情况? 问题片段一:到底循环几次? 有很多读者针对文章的下面的这个片段: 来问了一些问题:为什么会循环三次?循环二次?循环一次? 源码看的脑袋疼.那我觉得我需要"拯救"一下这个哥们

nyist oj 36 最长公共子序列 (动态规划基础题)

最长公共子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列. tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列. 输入 第一行给出一个整数N(0<N<100)表示待测数据组数 接

【HDU1856】More is better(并查集基础题)

裸并查集,但有二坑: 1.需要路径压缩,不写的话会TLE 2.根据题目大意,如果0组男孩合作的话,应该最大的子集元素数目为1.所以res初始化为1即可. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <numeric> 7 #include <

【HDU1325】Is It A Tree?(并查集基础题)

有以下坑点: 1.结束输入不一定-1,题目中的叙述只是说所有权值都为正值. 2.是否构成一棵树不能只判断是否只有一个根节点,没有环路,而且还需要判断每个节点的入度一定是1,不然就不是一棵树. (无环路也可用树的性质:结点数 = 边树 + 1 来取代) 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstring> 4 #include <cctype> 5 #include <cmath&

【HDU1233】还是畅通工程(MST基础题)

无坑,裸题.直接敲就恩那个AC. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cmath> 5 #include <cctype> 6 #include <algorithm> 7 #include <numeric> 8 9 #define typec int 10 using namespace std; 11 1

【HDU2122】Ice_cream’s world III(MST基础题)

2坑,3次WA. 1.判断重边取小.2.自边舍去. (个人因为vis数组忘记初始化,WA了3次,晕死!!) 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <cmath> 6 #include <cctype> 7 #include <algorithm> 8 #include &l

各位大佬Python的第一部分道基础题已经整理好了,希望大家面试的时候能用的上。

Python的第一部分道基础题,希望大家面试的时候能用的上. 1.为什么学习Python? Python是目前市面上,我个人认为是最简洁.最优雅.最有前途.最全能的编程语言,没有之一. 2.通过什么途径学习的Python? 通过自学,包括网上查看一些视频,购买一些相关专业的书籍. 3.Python和Java.PHP.C.C#.C++等其他语言相比? Python:轻量级.易学.自由/开放源码软件.可移植性.支持面向对象.丰富的库.规范的代码. Java:优点:开源性,功能强大,库多 缺点:编译速

python每日经典算法题5(基础题)+1(中难题)

现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级函数的应用.这些题目是在某些刷题的网站上登记的有水平的题目.这里如果有需要input的简单题,就略去了输出结果.如果时间充裕,则就会增加每日更多习题. 一:基础算法题10道 1.判断用户输入的年份是否为闰年 题目解析: (1)问题分析:能被4整除但不能被100整除的年份为普通闰年,能被400整除的年