NOIP易犯错误集锦

合集下载

noip不会做咋办,快用骗分导论,高效得分

noip不会做咋办,快用骗分导论,高效得分

noip不会做咋办,快用骗分导论,高效得分【1】遇到难题时心态要稳定,先搞定简单的题目,最后思考难题。心态是第一位。

【2】如果难题实在不能解决也不能放弃,虽然写不出完美的算法,但可以用象贪心,搜索之类的算法,虽然不能AC 但一般能过几个,有分总比没分好。

举个例子

例如下图中,存在3 个磁场,白点表示机器人的位置,黑点表示矿石的穿越磁场(cross)探险机器人在Samuel 星球上寻找一块奇特的矿石,然而此时它陷入了一片神秘的磁场区域,动弹不得。探险空间站立刻扫描了这片区域,绘制出该区域的磁场分布平面图。这

片区域中分布了N 个磁场,每个磁场呈正方形,且边与坐标轴平行。

位置:

科学家们分析平面图,进一步发现:这些磁场为大小不一的正方形,可能相交,甚至覆盖,但是它们的边缘不会重合,顶点也不会重合。例如下面的两种情形是不会出现的:科学家们给探险机器人启动了磁力罩,这样它就可以在磁场中自由穿越了。初始时,探险机器人和所有矿石都不在任何磁场的边缘。由于技术限制,

X

Y

O

3

在穿越过程中机器人只能够水平或垂直移动,且不能够沿着磁场的边缘行

动。

由于磁力罩的能量有限,科学家们希望探险机器人穿越尽量少的磁场边

缘采集到这块矿石。例如上图中,探险机器人最少需要穿越两次磁场边缘。

现在小联请你编写程序,帮助科学家们设计探险机器人的路线,统计探

险机器人最少需要穿越多少次磁场边缘。

输入(CROSS.IN):第一行有一个整数N,表示有N 个磁场(1 < N < 100)。随

后有N 行,每行有三个整数X、Y、C(0 < X ,Y ,C < 10000),表示一个磁场

历年NOIP选题题解汇总

历年NOIP选题题解汇总

历年NOIP选题题解汇总

联赛前上vijos板刷往年联赛题,使⽤在线编辑编写代码,祝我rp++。

废话不多说,挑⽐较有意思的记⼀下。

题⽬是按照年份排序的,最早只到了03年。

有些题⽬因为我还没写/很早之前写的忘了所以就没写题解。

NOIP2003

神经⽹络:按照题⽬怎么说怎么做,BFS即可。注意输出层是指出度为0的层,不是指深度最⼤的。

传染病防治:爆搜题,枚举每⼀层减掉哪个。复杂度不可算,理论在O(2^30*8!)左右,但好像强势不满。想了⼀会貌似卡不掉?

NOIP2004

⾍⾷算:知⼆推三,边搜边判。

NOIP2005

篝⽕晚会:⾸先你得知道两个排列可以看成若⼲个环,⽽且每个点只要转⼀次就可以转出来……⽽这题正好是两个排列的形式,即找到⼀个1-n的环和原环匹配最多就是不要动的⼈。把每个⼈在环中的1的位置记下来取最多的就好了。

过河:把边权>=100的缩成100,因为长度过长没有意义,⼤于100了前⾯的情况必然可以凑出来,然后在1000下暴⼒DP即可。注意特判S=T的情况,还有不要以为给出的点都在L内。

等价表达式:随便找⼏个数字(1~20)带进去算在模意义下都相等就可以了(跟解⽅程的思想有点像?),重点是化为后缀表达式处理的trick。

NOIP2006

2^k进制数:⼤整数组合数。

NOIP2007

先坑着

NOIP2008

传纸条:显然的⽹络流,其实化为四维DP可做。

双栈排序:若存在i<j且A[i]>A[j],即A[j]在A[i]前⾯弹栈。因为A[i]最终也要出栈,所以⽐A[i]还要⼤的、在[i,j]中间的⼀定不能和A[i]在同⼀个栈中,即构成⼆分图。判断有解就是⼆分图染⾊。输出……反正我铁定WA的输出因为数据⽔过去了,不予置评。

信息学奥赛(NOIP)常见问题汇总

信息学奥赛(NOIP)常见问题汇总

信息学奥赛(NOIP)常见问题汇总

这里大家汇总了信息学奥赛(NOIP)常见问题,欢迎大家点击查看!

1、普及组的题目难度分配是怎样的?

第一题是相对简单的题,但是一般会有操作起来较麻烦,考虑情况很多,数据类型很大这样的特点来考你。第二题是模拟,需要你抽象化问题,把问题的人工解决方法模拟出来,建立一个合适的数学模型,再用代码动手实验它。模拟的题一般比较麻烦,出错多很正常,甚至3个小时你不一定能解决一道模拟。第三题是一个跳板,一般是考不难的DP、图论、搜索,需要有足够的算法知识和做题经验。第四题相对比较难吧,会考一些像“单源最短路”、“SPFA”这样的比较“高级”的算法,所用到的数据结构也会比较“高级”,对于技巧、经验和心理都是一个考验。(对于各位新生来说,如果有难度,时间紧张,不妨放弃3、4两道题,第一题和第二题AC了也能有200分。)

2、拿到试卷后该做些什么?

不要着急下手做题,先浏览一下试题,对题目的难易有个把握,哪些题目自己能做出来心里要有数。先做相对简单的题,做题之前先在纸上写写画画,优化可不可行什么的都要试一下。

然后,看看哪些题目可以简单的骗分(比如没有答案就输出-1这样的),先把骗分程序写一个拷贝到对应文件夹下,等到考试最后你忙着做题就没时间写骗分程序了。

再有,有时候你看到一个题后脑子里蹦出另外一个相似的题。

这个时候切记生拉硬套把那道题的算法搬过来。因为那样的话会把你引导入一个误区,很多人进入误区就出不来了,最后导致写出的代码总是WA,那时候再改就来不及了。

编程学习中需要注意的常见错误和技巧

编程学习中需要注意的常见错误和技巧

编程学习中需要注意的常见错误和技巧

在学习编程的过程中,我们常常会遇到一些问题和困惑。本文将介绍编程学习中常见的错误和一些学习技巧,希望对初学者有所帮助。

一、常见错误

1. 不重视基础知识

编程学习的基础知识非常重要,包括算法、数据结构、编程语言基础等。很多初学者忽略了这些基础知识,直接着手去编写代码,导致后期出现很多问题。因此,在开始编程学习之前,务必要打好基础,系统地学习相关知识。

2. 缺乏实践

理论知识是需要在实践中不断巩固和应用的。很多初学者只重视理论学习,而忽视了实践的重要性。实践是检验自己所学知识的有效方式,通过动手实践,不仅能够实际掌握编程技巧,还能够更好地理解和记忆所学的知识。

3. 不善于查找资料

编程学习中,我们不可能对所有的知识都了然于胸。遇到问题时,善于查找资料是非常重要的一项技能。互联网上有大量的编程资源,包括教程、文档、论坛等,我们应该善于利用这些资源来解决问题。

4. 不注重代码规范

编写规范的代码能够提高代码的可读性和可维护性。很多初学者在

编程的过程中没有注意代码的规范,导致代码难以理解和修改。因此,在学习编程的过程中,我们应该注重代码的规范性,养成良好的编码

习惯。

二、学习技巧

1. 制定学习计划

编程学习需要有系统性和计划性,我们可以制定一个学习计划,明

确学习的目标和内容,并合理安排学习时间。制定学习计划有助于我

们更加有条理地学习,避免盲目和无效的学习。

2. 多动手实践

编程学习重在实践,我们应该多写代码、多做项目,通过实践来提

高自己的编程能力。当遇到问题时,不要怕困难,要有耐心地思考和

noip考试注意事项

noip考试注意事项

noip考试注意事项

NOIP考试注意事项有:

1.不能用万能头。

2.不能进行O2优化。

3.省选、NOI可以O2优化。

4.联赛用Ubuntu,需要gdb调试。

5.如果递归很多次,容易爆栈,要谨慎。

6.可以估计复杂度,比如10^9可能需要根号或log级别,如果10^18,那么log才行,如果就是300或100,可以

O(n^3),如果数很小,可以用阶乘或幂次的。

1322:【例6.4】拦截导弹问题(Noip1999)

1322:【例6.4】拦截导弹问题(Noip1999)

1322:【例6.4】拦截导弹问题(Noip1999)易错点在于:

不考虑“之前”的导弹拦截系统。

每次“⽆奈”增加导弹拦截系统后,之前的导弹拦截系统也是有效的,也是能够发挥作⽤的。

1 #include<iostream>

2using namespace std;

3const int N=1005;

4int main(){

5int t,r=0,k[N];

6while(cin>>t){

7//遍历已有的拦截系统,选择代价最⼩的进⾏拦截,实在拦截不了就再添加⼀个拦截系统

8int mi=30*N,s;

9for(int i=0;i<r;i++){

10if(t<=k[i]){

11if(mi>k[i]-t){

12 mi=k[i]-t;

13 s=i;

14 }

15 }

16 }

17if(mi<30*N)k[s]=t;

18else k[r++]=t;

19 }

20 cout<<r;

21return0;

22 }

noip背包问题教程(背包九讲)

noip背包问题教程(背包九讲)

f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]}

第一讲 01背包问题

题目

有N 件物品和一个容量为V 的背包。第i 件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价

值总和最大。

基本思路

这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。

用子问题定义状态:即f[i][v]表示前i 件物品恰放入一个容量为v 的背包可以获得的最大价值。则其状态转移方程便是:

这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:“将前i 件物品放入容量为v 的背包中”这个子问题,若只考虑第i 件物品的策略(放或不放),那么就可以转化为一个只牵扯前i-1件物品的问题。如果不放第i 件物品,那么问题就转化为“前i-1件物品放入容量为v 的背包中”,价值为f[i-1][v];如果放第i 件物品,那么问题就转化为“前i-1件物品放入剩下的容量为v-c[i]的背包中”,此时能获得的最大价值就是f[i-1][v-c[i]]再加上通过放入第i 件物品获得的价值

w[i]。

优化空间复杂度

以上方法的时间和空间复杂度均为O(VN),其中时间复杂度应该已经不能再优化了,但空间复杂度却可以

优化到O 。

先考虑上面讲的基本思路如何实现,肯定是有一个主循环i=1..N ,每次算出来二维数组f[i][0..V]的所有

值。那么,如果只用一个数组f[0..V],能不能保证第i 次循环结束后f[v]中表示的就是我们定义的状态f[i][v] 呢?f[i][v]是由f[i-1][v]和f[i-1][v-c[i]]两个子问题递推而来,能否保证在推f[i][v]时(也即在第i 次主循环中推f[v]时)能够得到f[i-1][v]和f[i-1][v-c[i]]的值呢?事实上,这要求在每次主循环中我们以v=V..0的顺序推

【NOIP真题精讲】NOIP-2009-普及组初赛-28+k国王放置问题

【NOIP真题精讲】NOIP-2009-普及组初赛-28+k国王放置问题

从棋盘的左上角开始,按从上至下,从左到右,选1个格子,放置1个国王,并锁定其周围包括其自己一起的9个格子,后面的国王是禁止放置在9个格子里的。

每放1个国王,可放的格子数都会减少。第1个国王有n*m个可选的位置,后面的国王的可选位置逐个减少。

然后同样从上至下,从左至右,选一个可放格子放第2个国王

直到所有格子遍历完,此时计算累积已经放置的国王的数量,若达到k,则表示找到一种放置方案,

方案数加一,否则表示未找到方案,方案数不变,这代表某一条深度优先搜索的路径。

在前面的深度优先搜索路径过程中,会发生回溯:

假设当前要放置第i个国王,但是根据前面i-1个国王放置的位置,已经找不到可以放置的位置了,那这时候就需要往第i-1个国王的放置位置进行回溯,假设在放置第i-1个国王的时候有多于1个的位置可选,当时是按从上至下,从左到右的顺序选择了其中的一个,这种放置方法,导致了第i个国王没位置可以放了,此时回溯,将第i-1个国王放置调整在可选位置的另一个位置,(注意此刻调整后,则需要释放第i-1个国王原先放置的位置对应的被锁住的9个格子,然后重新锁上其新放入位置对应的9个格子),再给第i个国王寻找可放的位置。

若在放置第i-1个国王的时候也只有1个可选的位置,那就继续往第i-2个国王进行回溯,直到找到一个有多于1个可放位置的国王。

(0,0)(n-1,m-1)

0000

0000

0000

0000

(0,0)(n-1,m-1)hash[n][m]<0,0,0><0,0,1>......根节点,初始状态节点状态,表示位置当前放置了第tot 个国王。其子节点数目由当前父结点状态决定,表示当前第tot+1个国王可以放置的位置数目。按深度优先搜索遍历,某一条路径遍历到第k 层则表示找到一种放置k 个国王的方案。深度优先遍历完整个解空间树,找到所有路径长度为k 的

NOIP普及组初赛历年试题及答案求解题篇

NOIP普及组初赛历年试题及答案求解题篇

NOIP普及组初赛历年试题及答案求解题篇

问题求解:每次共2题,每空5分,共计10分。每题全部答对得 5 分,没有部分分。注:答案在文末

在NOIP初赛问题求解中,经常会遇到排列组合问题。这一类问题不仅内容抽象,解法灵活,而且解题过程极易出现“重复”和“遗漏”的错误,这些错误甚至不容易检查出来,所以解题时要注意不断积累经验,总结解题规律。

解答排列组合问题,首先必须认真审题,明确是属于排列问题还是组合问题,或者属于排列与组合的混合问题,其次要抓住问题的本质特征,灵活运用基本原理和公式进行分析解答。同时还要注意讲究一些策略和技巧,比如采用分类、分步、捆绑等方法,也可以借助表格、方程等工具,使一些看似复杂的问题迎刃而解。

NOIP2011-1. 每份考卷都有一个8位二进制序列号。当且仅当一个序列号含有偶数个1时,它才是有效的。例如,0000000、01010011都是有效的序列号,而11111110不是。那么,有效的序列号共有______个。

NOIP2011-2. 定义字符串的基本操作为: 删除一个字符、插入一个字符和将一个字符修改成另外一个字符这三种操作。将字符串A变成字符串B的最少操作步数,称为字符串A到字符串B的编辑距离。字符串“ ABCDEFG ”到字符串“BADECG ”的编辑距离为_______。

NOIP2012-1. 如果平面上任取n 个整点(横纵坐标都是整数) ,其中一定存在两个点,它们连线的中点也是整点,那么n至少是_____。

NOIP2012-2. 在NOI期间,主办单位为了欢迎来自全国各地的选手,举行了盛大的晚宴。在第十八桌,有5名大陆选手和5名港澳选手共同进膳。为了增进交流,他们决定相隔就坐,即每个大陆选手左右相邻的都是港澳选手、每个港澳选手左右相邻的都是大陆选手。那么,这一桌共有_____种不同的就坐方案。注意:如果在两个方案中,每个选手左边相邻的选手均相同,则视为同一个方案。

python编程中常见错误

python编程中常见错误

python编程中常见错误

python中常见错误

最后,我想谈谈使⽤更多python函数(数据类型、函数、模块、类等)时可能遇到的问题。由于篇幅有限,我们试图将其简化,特别是⼀些⾼级概念。有关更多详细信息,请阅读学习python、第⼆版的“技巧”和“gotchas”章节。

打开⽂件的调⽤不使⽤模块搜索路径

在python中调⽤open()访问外部⽂件时,python不使⽤模块搜索路径来定位⽬标⽂件。它将使⽤您提供的绝对路径,或者假定⽂件位于当前⼯作⽬录中。模块搜索路径仅⽤于模块加载。

不同的类型对应不同的⽅法。

列表⽅法不能⽤于字符串,反之亦然。通常,⽅法调⽤与数据类型相关,但内部函数通常在许多类型上可⽤。例如,list的reverse⽅法只对list有⽤,但是len函数对任何有长度的对象都有效。

⽆法直接更改不可变数据类型

请记住,不能直接更改不可变对象(例如元组、字符串):

t=1、2、3

t[2]=4误差

⽤切⽚、连接等构造⼀个新的对象,并根据需要为其分配原始变量的值。因为python会⾃动回收⽆⽤的内存,所以并不像看起来那么浪费:t=t[:2]+(4,)没问题:t变成(1,2,4)

使⽤简单for循环⽽不是while或range

当您从左到右遍历有序对象的所有元素时,使⽤简单的for循环(例如,seq:中的x)⽐使⽤基于while或range的计数循环更容易编写,并且通常运⾏得更快。除⾮需要,否则请尽量避免在for循环中使⽤range:让python为您解决标记问题。在下⾯的⽰例中,这三个循环都很好,但第⼀个循环通常更好;在python中,简单性是最重要的。

2019[CSPNOIP]初赛普及组解析(下)

2019[CSPNOIP]初赛普及组解析(下)

2019[CSPNOIP]初赛普及组解析(下)

⼆、阅读程序

1.

程序分析: 对于输⼊字符串中的第i位,如果i是n(字符串长度)的约数,并且第i个字符⽐'a'(97)要⼤,就-'a'+'A',即⼩写转⼤写操作1) 输⼊的字符串只能由⼩写字母或⼤写字母组成。( )

解析:错。可以输⼊数字或符号。

2) 若将第8⾏的“i=1”改为“i=0”,程序运⾏时会发⽣错误。( )

解析:对。i为0时取模会报错

3) 若将第8⾏的“i<=n”改为“i*i<=n”,程序运⾏结果不变。( )

解析: 错。约数是可能超过sqrt(n)的,范围缩⼩了

4) 若输⼊的字符串全部由⼤写字母组成,那么输出的字符串就跟输⼊的字符串⼀样。( )

解析:对。⼤写的ASCII值⼩于⼩写,字符不进⾏变换。

5) 若输⼊的字符串长度为18,那么输⼊的字符串跟输出的字符串相⽐⾄多有( )个字符不同。

A.18

B.6

C.10

D.1解析:B。18的约数有6个(1、2、3、6、9、18)。

6) 若输⼊的字符串长度为( ),那么输⼊的字符串跟输出的字符申相⽐,⾄多有36个字符不同。

A.36

B.100000

C.1

D.128

解析:B。10000 = 2^5 * 5^5,⼀共有(5 + 1) * (5 + 1) = 36个约数,⽤枚举法也能轻易排除其他三个选项。

2.

程序分析: 有a、b两组元素,两组元素之间可以两两对应。初始时所有元素都和另⼀组的0对应。每次考察a组的第x个元素和b组的第y个元素,如果这两个元素之前的配对交叉了,则把它们之前的配对元素重置为0,并将这两个元素配对。

17个新手常见Python运行时错误

17个新手常见Python运行时错误

当初学Python时,想要弄懂Python的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序crash的运行时错误。

1)忘记在if,elif,else,for,while,class,def声明末尾添加:(导致“SyntaxError:invalid syntax”)

该错误将发生在类似如下代码中:

2)使用=而不是==(导致“SyntaxError:invalid syntax”)

=是赋值操作符而==是等于比较操作。该错误发生在如下代码中:

3)错误的使用缩进量。(导致“IndentationError:unexpected indent”、“IndentationError:unindent does not match any outer indetation level”以及“IndentationError:expected an indented block”)

记住缩进增加只用在以:结束的语句之后,而之后必须恢复到之前的缩进格式。该错误发生在如下代码中:

4)在for循环语句中忘记调用len()(导致“TypeError:'list'object cannot be interpreted as an integer”)

通常你想要通过索引来迭代一个list或者string的元素,这需要调用range()函数。要记得返回len值而不是返回这个列表。

该错误发生在如下代码中:

5)尝试修改string 的值(导致“TypeError:'str'object does not support item assignment

NOIP经典模拟习题

NOIP经典模拟习题

最小花费

【题目描述】

在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。

【输入格式】

第一行输入两个用空格隔开的正整数n,m,分别表示总人数和可以互相转账的人的对数。

以下m行每行输入三个用空格隔开的正整数x,y,z,表示标号为x的人和标号为y的人之间互相转账需要扣除z%的手续费(0

最后一行输入两个用空格隔开的正整数A,B。

数据保证A与B之间可以直接或间接地转账。

【输出格式】

输出A使得B到账100元最少需要的总费用。精确到小数点后3位。

【输入样例】

3 3

1 2 1

2 3 2

1 3 3

1 3

【输出样例】

103.072

【数据范围】

对于30%的数据,满足1<=n<=100

对于所有数据,满足1<=n<=2000。

生日派对

【题目描述】

有N-1位同学要去参加小徐的生日派对。小徐的生日派对在编号为x(1<=x<=n)的地方举行,而这N-1位同学分别住在编号为1~N(除X)的地方。现在有M(1<=m<=100000)条有向道路,每条路长为ti(1<=ti<=100)。

每位同学都必须参加完派对后回家,每位同学都会选择最短路径,求这n-1位同学的最短路径(一个来回)中最长的一条的长度。

特别提醒:可能有权值不同的重边。

数据保证每位同学均能到达X处,并从X处返回。

【输入格式】

第1行:N,M,X;

第2~m+1行: Ai,Bi,Ti,表示有一条从Ai到Bi的路,长度为Ti.

【输出格式】

NOIP初赛试题分类汇总_完善程序部分

NOIP初赛试题分类汇总_完善程序部分

NOIP初赛试题汇总

完善程序

'2004

1.Joseph

题目描述:

原始的Joseph问题的描述如下:有n个人围坐在一个圆桌周围,把这n个人依次编号为1,…,n。从编号是1的人开始报数,数到第m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,…,如此反复直到所有的人全部出列为止。比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。

现在的问题是:假设有k个好人和k个坏人。好人的编号的1到k,坏人的编号是k+1到2k。我们希望求出m的最小值,使得最先出列的k个人都是坏人。

输入:

仅有的一个数字是k(0 < k <14)。

输出:

使得最先出列的k个人都是坏人的m的最小值。

输入样例:

4

输出样例:

30

程序:

#include <stdio.h>

long k, m, begin;

int check(long remain){

begin = result; return 1;

}

else return 0;

}

int main(){

long i, find = 0;

scanf("%ld", &k);

find = 1; begin = 0;

for (i = 0; i < k; i++)

find = 0; break;

}

}

printf("%ld\n", ⑤ );

return 0;

}

2.逻辑游戏

题目描述:

一个同学给了我一个逻辑游戏。他给了我图1,在这个图上,每一段边界都已经进行了编号。我的任务是在图中画一条连续的曲线,使得这条曲线穿过每一个边界一次且仅穿过一次,而且曲线的起点和终点都在这整个区域的外面。这条曲线是容许自交的。

「历年NOIP(普及组提高组)试题难度列表」

「历年NOIP(普及组提高组)试题难度列表」

历年NOIP(普及组)难度分析by Climber.pIﻫ

数学:5 图论:4

搜索:4构造:3

贪心:2

【动态规划】平均难度系数:

0.55

此项为历届NOIP考察次数

最多的知识点。

主要有1.区间模型2.

子序列模型3.资源分配模型

以及一些简单的多维状态设计技

巧。

动态规划可以与图,树,高精

度等知识点配合出题。

【模拟】平均难度系数:0.76

平均每届NOIP都会出现1

个模拟题。

这种题一般算法很简单,需

要选手细心理解题目意思,注意

细节。考察选手的代码实现能力。

【数学】平均难度系数:0.4

需要掌握质数及其性质,基

础的实属操作,加法原理和乘法原理。此类题需要选手对数学规律的灵感。

【图论】平均难度系数:0.50

历届考察点基本上都是1.最短路问题和 2.特殊图的性质。特殊图包括树,拓扑图,二分图等。历届NOIP在图论上的考察并不是很多。

【搜索】平均难度系数:0.38

历届搜索题一般都比较难,搜索算法本身简单,于是题目会提高选手对其他方面的要求。

主要有搜索优化和模拟。写搜索题时应该以尽量多得分为目标。

【构造】平均难度系数:0.27

构造类题目一般没有明确的算法,需要选手仔细分析题目的实质,并得出解法。

这个解法通常不是唯一的。有时一个好的贪心可以得相当多的分。有时搜索剪枝可以很大的提高效率。同样以多得分为目标。

【贪心】平均难度系数:0.75

此类题需要选手对算法的直觉,贪

心正确性一旦被证明,通常题目就

简单了。

二进制搜索算法的实现过程中常见错误汇总

二进制搜索算法的实现过程中常见错误汇总

二进制搜索算法的实现过程中常见错误汇总

二进制搜索算法是一种高效的搜索算法,可以在有序数组中快速定位目标元素

的位置。然而,在实现过程中常常会出现一些错误,本文将对这些常见错误进行汇总和分析。

错误一:数组未排序

二进制搜索算法要求在有序数组中进行搜索,如果数组未排序,则算法无法正

确执行。因此,在实现二进制搜索算法之前,必须确保数组已经按照升序或降序排列。

错误二:边界条件错误

二进制搜索算法的核心是通过不断缩小搜索范围来逼近目标元素。因此,在实

现过程中,必须正确处理边界条件。常见的错误包括:

1. 搜索范围的起始位置大于结束位置,导致搜索失败;

2. 搜索范围的起始位置或结束位置超出数组的有效索引范围,导致数组越界。

错误三:中间位置计算错误

二进制搜索算法通过计算中间位置来确定下一次搜索的范围。常见的错误包括:

1. 中间位置计算错误,例如使用了错误的公式或计算出的浮点数无法正确转换

为整数索引;

2. 中间位置计算时忽略了起始位置,导致搜索范围错误。

错误四:目标元素比较错误

二进制搜索算法需要通过比较目标元素与中间元素的大小关系来确定下一次搜

索的范围。常见的错误包括:

1. 目标元素与中间元素的比较符号错误,导致搜索范围错误;

2. 目标元素与中间元素的比较条件错误,导致搜索范围无法正确缩小。

错误五:循环条件错误

二进制搜索算法使用循环来不断缩小搜索范围,直到找到目标元素或搜索范围为空。常见的错误包括:

1. 循环条件错误,导致循环无法正确终止;

2. 循环条件中使用了错误的逻辑运算符,导致循环无法正确执行。

错误六:返回结果错误

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7、字符串和字符不分
• 判断字符串中的某个字符是否与'A'相等
• 判断字符串是否与字符串”A”相等
出错范例
8、赋值与等于不分
• 赋值号 = • 等于判断 ==
9、格式化输入输出与类型不匹配
• char ---- %c
• int、short ---- %d
• long long ----- %lld • float • double ----- %f ----- %lf
考生出错范例
3、int变量运算未用long long强制转换,数据溢出
在C/C++程序中,整数的类型默认为int,sizeof(20) 结果为4 int变量和int变量运算的结果,仍然会使用int来存储
考生出错范例
4、浮点运算精度丢失
• 比赛时,考虑到数据精度问题,应尽量采用数学变换避免浮点运算
2、数组定义过大
1. 在主函数外的全局变量,数组最大可以约为: 400000000(8个0)
为减少比赛的失误, 建议比赛时,若数 2. 在主函数内的局部变量,数组最大可以约为:500000(5个0) 组的长度超过1000, 统一将其定义在主 函数外面
数组定义过大
考虑到循环和其他辅助变量,如果定义的数组 元素的个数 >= 100000000(8个0)。建议考虑更改求解方法
Leabharlann Baidu
10、主函数没有return 0
无法满足判题要求,得0分
常识错误
1、穷举法超时
• 穷举法最大的风险就是会出现运算超时,我们可以对输入的数据进行预判,以确定是否 会超时。按考试评测机的配置,循环的次数的最大值可以大约在300000000(8个0)。
循环次数与耗时统计代码 linux版
循环次数与耗时统计代码 windows版
9.
赋值号等于不分
格式化输入输出与类型不匹配
10. 主函数没有return 0
常识错误
1. 穷举法超时(若实在找不到好的方法,可以用穷举法保证基本分)
2. 数组定义过大
低级错误
1、未按题目要求添加文件读写
若没有文件读写或文件读写错误,得0分
考生出错范例
2、未按题目要求输出结果
注意输出字母的大小写;大小写错误得0分
NOIP容易犯错误汇总
低级错误
1. 2. 3. 4. 5. 6. 7. 未按题目要求添加文件读写 未按题目要求输出结果 int变量运算未用long long强制转换,数据溢出 浮点运算精度丢失 忘写头文件 C++万能头文件包含错误 字符串和字符不分
红色标注的,
只要犯了任意一条得分都为0分!!!
8.
• 如果实在无法避免,优先采用精度更高的double保存浮点数
考生出错范例
5、忘写头文件
• 在dev c++中,如果不写头文件cstdio或者stdio.h,只会出现警告,不会报错。因 此在提交代码后,要仔细检查头文件是否写全,文件读写是否正确
会出现编译错误,得0分
6、C++万能头文件包含错误
谢谢观赏!
• C++中有一个万能头文件stdc++.h • 如果在windows下,可以写成 #include<bits/stdc++.h> #include<bits\stdc++.h>
会出现编译错误,得0分
• 但是在linux下就必须写成
#include<bits/stdc++.h> • 因为比赛判分的机器是linux的,所以如果误写成了#include<bits\stdc++.h>编译 会出错得分为0
相关文档
最新文档