谈比赛发挥——浅析信息学竞赛考场策略与程序测试
- 格式:pdf
- 大小:374.59 KB
- 文档页数:19
信息学竞赛题目类型与解题思路分析信息学竞赛一直以来都是让同学们挑战自己智力和编程能力的平台。
在比赛中,不同类型的题目涉及到各种问题和解题思路。
本文将对信息学竞赛的题目类型进行分析,并探讨解题思路。
一、基础算法题在信息学竞赛中,基础算法题是最常见的一类题目。
这些题目主要考察编程能力,如数组、链表、树、图等数据结构的基本操作,以及排序、查找、递归等算法。
解决这类题目的关键在于熟练掌握基础算法和数据结构,并能够灵活运用。
二、动态规划题动态规划题目要求设计一个状态转移方程,通过状态的转移得到最优解。
这类题目常见于复杂的数学问题、字符串问题、背包问题等。
解决动态规划题目的关键在于找到合适的状态定义和状态转移方程,并采用递推的方式求解。
三、图论题图论是信息学竞赛中一个重要的分支,各种与图相关的问题都可能成为比赛题目。
这类题目要求学生熟悉图的基本概念和性质,如遍历、连通性、最短路径、最小生成树等。
解决图论题目的关键是选择合适的图算法,并能够熟练地实现。
四、搜索题搜索题是信息学竞赛中常见的一类题目,如深度优先搜索(DFS)、广度优先搜索(BFS)、回溯法等。
这类题目要求学生在给定的搜索空间中找到满足条件的解。
解决搜索题的关键在于合理地设计搜索状态和搜索顺序,并能够高效地剪枝。
五、数学题数学题在信息学竞赛中也是常见的一类题目。
这类题目常常考察学生对数学知识的理解和应用,如数论、组合数学、概率统计等。
解决数学题的关键在于运用数学思维和方法解决问题,同时结合编程的技巧进行求解。
六、综合题综合题是信息学竞赛中较为复杂的一类题目,常常要求学生综合并运用多种算法和技巧来解决问题。
这类题目通常会模拟实际生活中的复杂情境,考察学生的分析和解决问题的能力。
解决综合题的关键在于找到问题的关键点,分析问题的本质并设计相应的解决方案。
在面对不同类型的信息学竞赛题目时,同学们需要根据具体情况选择合适的解题思路。
在比赛前,建议同学们进行大量的练习和复习,熟悉各种算法和数据结构,培养良好的编程思维和解决问题的能力。
信息学竞赛中的策略与优化方法信息学竞赛是一项考验学生编程能力与算法思维的挑战。
在这个竞赛中,不仅要求选手具备扎实的计算机知识,还需要灵活运用策略与优化方法。
本文将探讨在信息学竞赛中常用的策略与优化方法,帮助读者提升竞赛表现。
一、贪心法贪心法是一种直观且容易实现的策略。
它总是做出当前看起来最优的选择,并希望最终的结果也是最优的。
在信息学竞赛中,常见的贪心法应用包括背包问题、区间选点等。
然而,贪心法并不能保证给出最优解,因此在使用时需要明确问题的性质,以确保贪心法是适用的。
二、动态规划动态规划是一种通过将问题划分为子问题,并保存子问题的解来求解复杂问题的方法。
在信息学竞赛中,动态规划经常被用来解决具有最优子结构性质的问题。
例如,最长公共子序列、最短路径等问题。
动态规划的关键在于建立递推关系式,并正确地设计状态转移方程。
三、搜索算法搜索算法是通过遍历问题的解空间来找到最优解的方法。
在信息学竞赛中,常见的搜索算法包括深度优先搜索(DFS)和广度优先搜索(BFS)。
搜索算法的关键在于定义搜索的状态和搜索的顺序,通过剪枝等技巧来提高搜索效率。
此外,启发式搜索如A*算法也是一种常用的优化搜索方法。
四、数学方法数学方法在信息学竞赛中有着重要的地位。
通过合理地运用数学定理和技巧,能够大大简化问题的求解过程。
在信息学竞赛中常用的数学方法包括数论、组合数学和几何学等。
例如,在解决排列组合问题时,可以运用排列组合公式来简化计算。
五、数据结构数据结构是解决问题的基础。
恰当地选择和应用数据结构可以提高算法的效率。
在信息学竞赛中,常用的数据结构包括数组、链表、栈、队列、堆和树等。
选择合适的数据结构取决于问题的特点,如树状数组用于求解区间和问题,优先队列用于求解最短路径问题等。
六、模拟与优化模拟是指通过构建与问题相似的模型来求解问题的方法。
在信息学竞赛中,模拟方法常用于构建实际问题的抽象模型,并进行模拟实验。
通过优化模型和算法,可以得到更好的解。
信息学竞赛NOIP考试答题策略——竞赛考试经验对参加NOIP全国青少年信息学奥赛的考生,我们整理和收集了一些答题策略给家长和学生参考。
考场策略和程序测试是信息学竞赛中非常重要的环节,很多优秀的选手在很多比赛中总是会在这两个环节上犯下这样和那样的错误,导致得到的分数和实力不成正比,最后留下了无尽的遗憾。
我们收集和整理了一些值得家长和考生注意的地方,提出一些可行的方法,分享一些经验,以此希望帮助考生在比赛中发挥水平,减少失误,告别遗憾。
一、整体规划一场信息学竞赛,比赛时间都是好几个小时,连续做几道大题。
在这样的一个长时间“烧脑”的过程里,考生如何分配时间,如何对待考试的题目,用什么方式和顺序对待题目等等一系列的决策问题,都需要一个考场策略来帮助考生获得更好的成绩。
整个答题策略可分为这几步:读题->分析题意->找出算法->编写程序->手动测试:样例、自测数据->文件测试:与样例对比。
二、5个注意点(1)浏览试题,阅读并分析。
(2)先易后难,每完成一题要调试好、保存好。
(3)容易题要保证测试数据全过,难的问题尽可能取得一些边界分数。
(4)阅读要仔细,分析要全面,可借助图示等方法理解题意。
(5)注意数组是否越界!全局变量与局部变量尽量不相同。
递归有层次限制,最多层数与程序大小、电脑配置有关。
考虑特殊情况和极限情况。
注意经常保存文件!三、10大考场策略策略1:认真审题这一点非常重要,一旦审题错误或者理解错误就可能造成你花很多时间写出来的程序 WA。
如果没有思路,可以尝试着多读几次题目。
很多考生觉得这花去的时间太多了,大大占用了之后的解题时间。
但是无数的事实告诉了我们审题的重要性,无数的遗憾正是由审题开始的。
策略2:考虑严谨如果考虑不严谨就可能被特殊数据卡分[0,100]而特殊数据往往分为极端数据和特殊数据。
极端数据会按数据最大范围来,所以要注意空间是否足够,int 是否会溢出;数组的大小是否合适。
信息学竞赛中的技巧与时间管理讲解信息学竞赛已经成为了评测学生计算机科学与技术能力的一种重要方式。
参加信息学竞赛需要掌握一定的编程技巧和算法知识,同时也需要良好的时间管理能力。
本文将介绍信息学竞赛中的一些技巧,并提供一些时间管理的建议。
一、编程技巧1. 熟悉编程语言在参加信息学竞赛之前,要先熟悉使用的编程语言。
无论是C++、Python还是Java,都需要掌握其基本语法和常用的数据结构与算法。
只有深入理解编程语言,才能更好地解决竞赛中的问题。
2. 善于利用库函数和算法模板信息学竞赛中,往往需要解决一些常见的问题,如搜索、动态规划、图论等。
这些问题已经有了较为成熟的解决方法,可以在时间有限的情况下很快地得到答案。
所以,我们需要熟悉一些常用的库函数和算法模板,可以节省大量的编码时间。
3. 注重细节在编程过程中,注重细节是非常重要的。
一些简单的错误可能会导致程序出错或者得到错误的结果。
因此,在编写代码之前,一定要仔细思考问题的求解方法,并详细分析每一步的细节,确保程序的正确性。
二、算法知识1. 掌握基本算法掌握一些基本算法对于信息学竞赛至关重要。
例如,深度优先搜索(DFS)、广度优先搜索(BFS)、动态规划(DP)以及并查集等。
这些算法可以广泛应用于各种题目类型,熟练掌握它们可以在竞赛中占得先机。
2. 学会分析问题在面对一个问题时,要学会思考问题的本质,解决问题的思路。
信息学竞赛问题常常具有一定的规律性,通过观察和分析,可以发现问题的规律,并找到相应的解题方法。
三、时间管理1. 合理安排时间在信息学竞赛中,有一定的时间限制。
为了能够尽快地完成题目,我们需要合理安排时间。
对于不同类型的题目,可以预估解题所需的时间,并根据题目的难易程度来快速决策是否继续进行下去,以避免在某个题目上花费过多的时间。
2. 制定策略比赛中遇到时间紧迫的情况时,制定一个策略非常重要。
可以先解决简单的问题,争取获得一些分数;然后再解决一些较难的问题,如果不行就先放弃并转向下一个题目。
信息学竞赛策略与技巧近年来,信息学竞赛在学生中的普及度越来越高,也成为了学生们展示自己才华和技术能力的舞台。
参与信息学竞赛既有助于培养学生的思维能力和解决问题的能力,也能让学生感受到成功的喜悦。
然而,要在信息学竞赛中脱颖而出,并不仅仅需要学生具备扎实的知识基础,还需要一些策略和技巧的辅助。
本文将分享一些有效的信息学竞赛策略与技巧,希望能对正在备战信息学竞赛的同学们有所帮助。
一、充分利用练习题和模拟赛在备战信息学竞赛时,充分利用练习题和模拟赛是非常重要的。
通过大量的练习和模拟,可以帮助学生熟悉竞赛的题型和考点,并且提高解题速度和准确性。
练习题和模拟赛中的题目往往会涵盖竞赛的各个知识点,因此,通过练习和模拟赛,学生可以全面了解自己的知识掌握情况,进而有针对性地进行强化训练。
二、学会灵活运用编程语言信息学竞赛中,编程语言的选择是一个重要的环节。
不同的编程语言有各自的特点和适用范围,在竞赛中灵活运用编程语言是取得好成绩的关键之一。
学生应该熟悉并掌握竞赛所使用的编程语言,了解其特点和优势,并且多进行实践训练,提高自己的编程水平和技巧。
三、注重算法和数据结构的学习算法和数据结构是信息学竞赛的核心内容,掌握好算法和数据结构是必不可少的。
学生需要对各种常用的算法和数据结构进行深入学习和理解,掌握它们的原理和应用场景。
在解决竞赛中的问题时,学生可以根据算法和数据结构的特点,找到最优的解题方法,提高解题效率和准确性。
四、培养良好的团队合作能力与团队合作成为一种趋势,特别是在信息学竞赛中,良好的团队合作能力能够将个人才华发挥到极致。
学生应该积极与团队成员进行沟通和协作,相互学习和借鉴,在解题思路和方法上互相帮助。
团队合作能够减少个人的失误和漏洞,提高整个团队的竞赛成绩。
五、保持良好的心态和积极的态度信息学竞赛中,保持良好的心态和积极的态度是非常重要的。
比赛时,不可因一时的难题或低分而灰心丧志,而是要保持积极乐观的心态,挑战自己,相信自己。
信息学竞赛中的常见题型与解题思路信息学竞赛是一项旨在培养学生计算机科学与信息技术能力的竞赛活动。
在信息学竞赛中,常见的题型包括编程题、算法题和推理题。
本文将介绍这些常见题型,并探讨解题的思路和技巧。
一、编程题编程题是信息学竞赛中最常见的题型之一。
通常要求参赛选手使用特定的编程语言,根据题目描述编写程序,解决给定的问题。
编程题可以分为两类:模拟题和算法题。
下面将分别介绍这两类编程题的解题思路。
1.1 模拟题模拟题是一种较为简单的编程题型,常用于考察选手对程序基本语法和逻辑的掌握。
解决模拟题的思路是根据题目要求,模拟出满足条件的过程或者结果。
例如,一个常见的模拟题是计算某个数的阶乘。
参赛选手可以使用循环结构和递推公式来计算阶乘,并输出结果。
1.2 算法题算法题是信息学竞赛中较为复杂的题型,需要参赛选手设计出高效的算法来解决问题。
解决算法题的思路是通过分析问题的性质和特点,找到解题的规律和方法。
常见的算法题包括排序算法、搜索算法和动态规划等。
对于这类题型,选手需要有较强的编程基础和算法分析能力。
二、算法题在信息学竞赛中,算法题是另一类常见的题型。
算法题要求参赛选手使用特定的算法解决给定的问题。
常见的算法题包括贪心算法、动态规划、图论和字符串匹配等。
下面将介绍几种常见的算法题以及解题的思路。
2.1 贪心算法贪心算法是一种从局部最优解出发,逐步得到全局最优解的算法。
解决贪心算法题的思路是通过分析问题的特点,找到一种贪心策略,使每一步都能得到最优解。
例如,一个常见的贪心算法题是找零钱问题。
参赛选手可以采用从大到小的贪心策略,尽量使用面额较大的零钱进行找零。
2.2 动态规划动态规划是一种通过划分子问题,将问题分解为多个子问题并保存子问题的解,最后得到整个问题的解的算法。
解决动态规划题的思路是先解决子问题,再逐步得到整个问题的解。
例如,一个常见的动态规划题是最长递增子序列问题。
参赛选手可以通过定义状态和状态转移方程,使用动态规划算法来解决这类问题。
信息学竞赛中的比赛技巧与策略分享信息学竞赛是一项旨在检验学生在计算机科学和信息技术方面能力的竞赛。
在这样的竞赛中,优秀的比赛技巧和有效的策略是取得好成绩的关键。
本文将分享一些在信息学竞赛中提高竞赛技巧和制定策略的方法。
一、理解题目首先,理解题目是成功解决问题的关键。
在比赛中,你将面临各种题目类型,包括编程问题、算法题和数学证明等。
无论题目类型如何,首先要准确理解题目要求,并确保完全理解问题的背景和给出的限制条件。
二、练习编程技巧信息学竞赛经常涉及编程问题。
因此,熟练掌握编程技巧是至关重要的。
多进行编程练习,熟悉各种数据结构和算法,并学会分析和优化代码。
此外,了解不同编程语言的特点和优势也对提高编程技巧有很大帮助。
三、掌握常见算法和数据结构在信息学竞赛中,了解和熟练掌握常见的算法和数据结构是至关重要的。
比如,深度优先搜索(DFS)和广度优先搜索(BFS)在解决许多问题时非常有用。
而对于高效地存储和处理数据,熟悉各种数据结构,如数组、链表、栈、队列、堆和树等也是必不可少的。
四、注重细节和边界条件在信息学竞赛中,注重细节和边界条件是非常重要的。
一旦你对题目要求理解不准确,或者忽视了关键细节,就可能导致错误的解答。
因此,仔细阅读题目,注意限制条件,并多次检查代码确保逻辑正确。
五、合理分配时间比赛的时间限制要求参赛者在有限的时间内解决问题。
因此,合理分配时间对于顺利完成所有题目至关重要。
在开始做题前,可以先浏览所有题目,估算每个题目需要的时间,并优先解决那些更容易或更熟悉的题目。
同时,不要为了一道难题耽误太多时间,而影响其他题目的解答。
六、与团队合作在信息学竞赛中,参加团队赛或组队解答有时是一种常见的形式。
良好的团队合作能力可以极大地提高竞赛效果。
团队成员应该相互协作,分工合作,互相借鉴和交流。
通过团队合作,可以集思广益,促进解题思路的创新和优化。
七、参加模拟比赛参加模拟比赛是提高竞赛技巧和策略的有效方法。
全国初中生信息学科竞赛难题剖析信息学科竞赛一直以来都是考察学生的计算思维、编程能力和问题解决能力的重要途径。
全国初中生信息学科竞赛作为国家级的竞赛活动,其题目难度较高,挑战性强,对学生的实际能力要求也更高。
本文将对全国初中生信息学科竞赛的难题进行剖析,帮助大家更好地理解和应对这些难题。
难题一:图论与路径规划在初中生信息学科竞赛中,图论与路径规划是一个常见的难题。
题目通常会给出一个图,要求学生找出最短路径、最小生成树或者最大流等问题。
这类题目需要学生对图的基本概念和算法有一定的了解,同时需要灵活运用相关的算法来解决问题。
解题思路:1. 首先,需要学生了解图的基本概念,包括节点、边、路径等。
熟悉图的存储方式,如邻接矩阵或邻接表。
2. 对于最短路径的问题,可以使用Dijkstra算法或Floyd-Warshall 算法来求解。
学生需要仔细分析题目给出的条件和要求,确定如何选择合适的算法。
3. 对于最小生成树的问题,可以使用Prim算法或Kruskal算法来求解。
同样需要根据题目给出的条件和要求,选择合适的算法。
4. 最大流问题可以使用Ford-Fulkerson算法或Edmonds-Karp算法来求解。
学生需要了解流网络的基本概念和算法原理,能够正确地建立流网络,并找出最大流量。
难题二:动态规划与状态转移方程动态规划是信息学科竞赛中另一个常见的难题类型。
题目通常会给出一个具有重叠子问题性质的问题,要求学生使用动态规划的思想来解决。
学生需要能够找到问题的状态转移方程,并正确地使用递推或记忆化搜索的方法求解。
解题思路:1. 对于动态规划问题,学生首先需要分析题目给出的问题,确定问题具有的性质,如最优性、最大值等。
2. 根据问题的性质,学生需要定义状态,并设计状态转移方程。
状态转移方程是动态规划问题的核心,决定了问题的解法。
3. 学生需要运用递推或记忆化搜索的方法求解状态转移方程。
递推是从最小问题开始逐步推导到整体问题的解,而记忆化搜索是通过保存中间结果来避免重复计算,提高效率。
信息学竞赛技巧信息学竞赛是一项考察计算机科学和算法思维能力的竞赛项目,对参赛者的知识储备和解题能力提出了很高的要求。
在参加信息学竞赛时,掌握一些技巧和方法可以帮助我们更好地解决问题,提高竞赛成绩。
本文将介绍一些常用的信息学竞赛技巧。
一、题目分析在参加信息学竞赛时,首先要对题目进行仔细的分析。
对于每个题目,要明确题目要求,理解题目背景和限制条件。
题目分析的关键是要抓住题目的关键信息,明确问题的求解目标,从而有针对性地制定解题思路。
二、算法选择在解决问题时,选择合适的算法是至关重要的。
对于不同类型的问题,可以根据题目的特点选择相应的算法。
例如,对于搜索类问题,可以考虑深度优先搜索(DFS)或广度优先搜索(BFS);对于动态规划问题,可以考虑状态转移方程的设计和递推关系的确定。
熟练掌握各种常用的算法,对于解题效率和正确性都有很大的帮助。
三、数据结构应用在解决信息学竞赛问题时,合适的数据结构选择和应用也是关键。
常用的数据结构包括数组、链表、栈、队列、树、图等。
根据问题的特点,选择合适的数据结构可以使问题的解决更加高效。
例如,对于需要频繁插入和删除操作的问题,可以选择链表作为数据结构;对于需要高效搜索和排序的问题,可以选择二叉搜索树或哈希表。
四、边界情况考虑在解决问题时,要考虑各种边界情况。
边界情况是指极端情况或特殊情况,通常是指输入数据的最小值、最大值或特殊取值。
对于边界情况的考虑,可以帮助我们发现问题中的特殊规律或隐含条件,从而更加准确地解决问题。
五、代码优化在信息学竞赛中,代码的运行效率也是很重要的。
要尽量避免冗余的计算和内存浪费,提高代码的执行效率。
可以通过合理地使用循环、条件语句等结构,减少不必要的计算和判断,以及合理地利用算法和数据结构的特点来优化代码。
六、模拟调试在解决问题时,可以通过模拟调试来验证算法和代码的正确性。
模拟调试是指通过手动模拟算法的执行过程,逐步跟踪和检查算法的每一步操作是否正确。
信息学竞赛中的算法竞赛技巧与经验分享信息学竞赛是一个旨在培养学生计算机科学技能和解决问题能力的竞赛。
在竞赛中,算法编程是关键的技巧之一。
本文将分享一些在信息学竞赛中取得成功的算法竞赛技巧和经验。
一、算法竞赛的重要性在信息学竞赛中,算法竞赛是评价学生能力的重要指标之一。
通过算法竞赛,可以锻炼学生的思维能力、应对问题的能力以及编程实现的能力。
同时,算法竞赛也是选拔优秀学生参加国际比赛的途径。
二、优化时间复杂度在信息学竞赛中,算法的时间复杂度是一个重要的指标。
目标是寻找最优解,而最优解通常是具有较低的时间复杂度的解。
因此,为了提高算法的效率,我们应该尽量将时间复杂度优化到较低的程度。
1. 选择合适的数据结构:在解决问题时,我们应该根据问题的特点选择合适的数据结构。
例如,对于需要频繁插入和删除操作的问题,可以选择使用链表;对于需要高效查找的问题,可以选择使用二叉搜索树或哈希表。
2. 利用已经计算过的结果:在解决问题时,我们可以通过记忆化搜索或动态规划等方法,将已经计算过的结果保存下来,以便重复使用。
这样可以减少重复计算,提高算法的效率。
3. 减少循环次数:在编写代码时,我们需要尽量减少循环次数,减少不必要的计算。
可以通过优化算法逻辑、使用合适的数据结构等方法来实现。
三、掌握常用算法在信息学竞赛中,掌握常用的算法是非常重要的。
以下是一些常见的算法:1. 搜索算法:深度优先搜索(DFS)和广度优先搜索(BFS)是两种常用的搜索算法。
在竞赛中,我们可以根据问题的特点选择适合的搜索算法。
2. 动态规划:动态规划是一种常用的优化算法。
通过将问题分解成子问题,并保存子问题的解,可以避免重复计算,提高算法的效率。
3. 贪心算法:贪心算法是一种通过每一步局部最优选择来达到全局最优解的算法。
在一些问题中,贪心算法可以得到较好的结果。
4. 图论算法:图论算法在信息学竞赛中也非常重要。
例如最短路径算法(Dijkstra算法、Floyd-Warshall算法)和最小生成树算法(Prim 算法、Kruskal算法)等经常被使用到。
谈比赛发挥浅析信息学竞赛考场策略与程序测试江苏省常州高级中学 吴翼2009年5月摘要考场策略和程序测试是信息学竞赛中非常重要的环节,很多优秀的选手在很多比赛中总是会在这两个环节上犯下这样和那样的错误,导致得到的分数和实力不成正比,最后留下了无尽的遗憾。
本文将探讨一些这两个环节上值得注意的地方,提出一些可行的方法,分享一些经验,以此希望帮助选手们在比赛中发挥水平,减少失误,告别遗憾。
关键词:策略,测试,发挥,遗憾目录【前言】 (3)一、简介 (3)1、什么是考场策略? (3)2、什么是程序测试? (3)3、二者有什么关系? (3)二、考场策略 (4)1、审题 (4)2、思考 (6)3、做题 (8)4、检验 (10)5、说明 (11)三、如何测试程序 (11)1、概述 (11)2、静态查错 (11)3、制作测试数据 (12)四、实践 (16)【总结】 (18)【参考文献】 (19)【前言】信息学竞赛本身是一个美好的东西,她包含着奋斗、努力、追求、成长、汗水和收获。
一个选手从与其接触,到了解,再到热爱,无数的时间与之为伴;同样,信息学也给予了我们太多:给予了友情,老师的关怀,太多的希冀、责任和无数难以忘怀经历。
可是,太多的时候,信息学竞赛总是透着那么多的忧伤,似乎她带来的美轮美奂的精彩总被那些无可奈何的泪水和发自内心的懊悔所掩盖。
遗憾——如此悲情的字眼的不停出现,似乎把本该光鲜的信息学竞赛抹上了灰色。
遗憾,那么伤痛,寻根溯源,笔者希望以此文,让大家发挥水平,让这个词语永远的离大家而去。
一、简介1、什么是考场策略?一场信息学竞赛,比赛时间从3个小时到5个小时不等,题目从3题到4题不等。
在这样的一个长时间的过程里,如何分配时间,如何对待手上的题目,用什么方式和顺序对待手上的题目等等一系列的决策问题,我们称之为考场策略。
2、什么是程序测试?程序测试就是在写完程序后,利用各种方式检验程序正确性的过程。
3、二者有什么关系?概要的说,考场策略包含了程序测试这一个环节,因而本文中,对于考场策略我们讨论的是一个总揽全局的安排,而程序测试讨论的则是具体的实施方法。
可以说,考场策略的制定在程序测试之前,而程序测试又能影响到考场策略的实施。
二、考场策略一个完整的测试包括审题,思考,做题,检验这几个环节,我们将分开讨论这几个步骤。
1、审题【建议1】一场测试应该花至少30分钟来审题,并做相关笔录。
1.1重要性很多同学觉得这花去的时间太多了,大大占用了之后的解题时间。
但是无数的事实告诉了我们审题的重要性,无数的遗憾正是由审题开始的。
【实例1】 NOI 2008 Day1 party具体题目略。
事实:此题是NOI2008 day1的第一道题,也是最容易拿分的题目,此题有50%的小数据,因此使用暴力枚举算法能够至少拿到50分。
而悲剧也正从这一刻开始了。
注意题目中这样一句话:“输出文件party.out 包含两个数,第一个数为最大可能的面具类数,第二个数为最小可能的面具类数。
”也就是说,假设输出的两个数为A和B,那么应该满足A>=B。
题目描述清晰。
可是,现场江苏省队11人中,仅毛杰明,卞晶、杨晶和汪一宁四人看对这一条件,其他7人均将小的那一个先输出,再将大的那一个输出。
因此7人最高分仅30分。
其中金斌损失近70分。
原因分析:客观原因有两个:(1)、样例中输出的两个数是一样的,并没有体现需要题目描述;(2)、以往所有的题目都是先输出小的再输出大的,而这一次比较特殊。
主观原因:据事后交流,所有人都没有花足够的时间在审题这一环节上,而是花了更多的时间在算法思考和程序设计上。
对题目的理解过份依靠直觉和以往经验。
【实例2】 APIO2009 convention具体题目略。
事实:注意题目中有这样对方案的描述:“首先,将租借给客户数量最多的策略最为候选,将所有的公司按照他们发出请求的顺序编号。
对于候选策略,将策略中的每家公司的编号按升序排列。
最后选出其中字典序最小的候选策略作为最终的策略”。
这段描述一共有三句话,本届江苏省队11人中有6人(包括笔者)都看清楚了第一句话和最后一句话,但都没有注意到第二句话,因而此题均为0分。
而此题有50%的小数据,即用替代算法也可得到50%的分数。
此外,事实证明利用错误的贪心算法也可以得到50分左右的分数。
以笔者为例,笔者如果此题加上50分则将得到国际金牌,其遗憾不言而喻。
原因分析:客观原因:(1)、这道题目描述比较冗长,这一句条件并不是很显眼,并且去掉这个条件仍然是一道复杂度相同的问题;(2)、样例和题目举的例子中均未体现这一个条件。
经过交流,所有看错此题选手,均是由于题目描述的冗长,为了节省时间,未能仔细斟酌文字描述,而是直接通过题目的例子来理解题目,因而主观的忽略了这一个条件。
分析一下上述两个例子,可以发现一些共性。
大家的目的都是为了快速的理解题目,都是过多的相信了经验和习惯,都是只关注题目所给样例。
可见,发生这种悲剧的原因都属无视了审题这一环节的重要性!到这里显然笔者已经不用再重申审题环节的重要性了。
不要因为某一次成功的因为经验或者小聪明节省了几分钟的写程序的时间而沾沾自喜,这样的做法如果成为了习惯,那么遗憾将是必然的。
1.2标记法:为了解决这一问题,笔者总结了一些方法,称其为标记法,基本的方式都是用笔在纸制题目上进行标记。
关键字:对于题目中的一些关键字,将其圈出。
所谓关键字就是比较级,最高级等形容词,和一些关键的名字。
序号:对于一些定义冗长的描述,每一步的限制都标上序号,从而明确对题目的理解。
建议是做到每一个标点后都要做一定的标记,这样避免漏掉一些描述。
当然也可以不用每个标点后都写数字,如果两个短句都在说同一个事情,那么可以用一个点,或者一个三角来表示后一个短句的步骤和上一个短句相同。
回顾:不断回顾重点细节对于一个一下子难以看懂的描述,建议先做一个标记,比如问号,看完后再对这些打问号的地方重新审视,可以写一些对这些地方的理解。
形象和抽象:将形象的问题抽象,对抽象的问题形象对于一个形象的问题,我们往往需要对其进行抽象,进行数学建模;而对于一个过于抽象的问题(比如CTSC2009 day1 sequence),我们则需要进行形象的思维。
建议将这些经过分析的东西写在题目描述的旁边或者后面。
比如对于上面提到的实例2中的那句被大家忽略的描述,就可以如此标记:“(1)首先,将租借给客户(2)对于候选策略,将策略中的每家公司的(3)最后选出其不难发现,如果严格按照上述方法进行标记,是不会漏掉这一个条件的,或许这会浪费一些时间,但是挽回的损失是巨大的。
1.3把握尺度:那是不是把试卷写的越满就越好呢?笔者观点是否定的。
要标记,但是也不是要让所有记号将白色的考卷染成黑色;同样的,考卷也不是草稿纸,笔者认为,过分的标记只会让纸面变得混乱不堪,反而影响阅读,同样也过于形式。
标记法的目的是为了加深对题目的印象,做到一次审题效率最大化,是审题的辅助,并不是一个形式化的东西。
使得自己恰好完全理解,使得自己不会遗漏条件,不会主观臆断。
这是使用标记法的原因,也是自己把握的尺度。
适当即可,一切是为了向遗憾说再见。
2、思考:【建议2】审题之后,对每一道题目都应该进行较为深入的思考。
建议进行20~30分钟左右的思考,同时不可浅尝辄止,读过便罢。
2.1重要性这里的“思考”并不是指如何分析一道题目或建立数学模型之类,这不是本文讨论范围。
而除此之外,“思考”还能有什么门道呢?答案是肯定的。
【实例3】 CTSC2009 day2CTSC2009 day2 有传统题world和garden,以及提交答案题puzzle。
puzzle是经典的N2数码问题。
world和garden笔者第一眼都没有想到很直接的做法,而puzzle则应该是手动做一些模拟之后利用A*搜索解答。
于是笔者花了几乎所有的时间做了提交答案题,而几乎没有怎么做另外两道题,最后此题拿到45分——而这确实是一个比较不错的分数。
但是事实上除puzzle之外的两道题,现场都有很多的满分和高分,而puzzle的现场最高分不过是一个70分,绝大多数的人都是20~30左右。
笔者除puzzle外,仅得10分。
笔者用自己惨痛的经历说明了思考的重要性。
很多时候很多简单的题目往往套着复杂的外衣,而复杂的题目则往往有着简单的表象,还有的时候,有一些题需要一些分析才能得到问题的本质,如果贸然跳过,则永远会觉得此题让人一头雾水,进而影响到了考场上策略的安排。
可以说对每道题目都进行一定程度的思考,是考场策略正确实施的重要环节,也是重要保证。
摸清楚题目的脉路,是一切的基础。
对于实例3中的情况,笔者犯的最大的错误就是根据以往的经验,主观的认为CTSC的传统题都是基本不可做的,加之world一题有着非常抽象冗长的描述,再由于N2数码问题过于经典,所以笔者武断的认为这次传统题都不可做,最后犯了严重的策略错误。
显然,如果能够每道题都仔细思考一番,就能发现world一题搜索的本质,也就不会发生如此的遗憾。
2.2冷静的判断上文说道,思考需要仔细。
而何为仔细?是否想到算法就可以了呢?也不是,想到了一个算法并不能直接予以肯定,而是要先否定他,想想有什么漏洞,或者想想是否有更好的方法,莽撞的立刻动手写题往往会浪费更多的时间。
【实例4】NOI2007 day2NOI2007 day2有一道令人记忆深刻的数据结构题necklace,此题标准做法是线段树。
而更容易想到的是,对于这种连续区间问题有着超强适应能力的splay。
考场上吴卓杰在思考的过程中很快想到了利用splay解决这个问题,并迅速开始了编码。
最终利用3个小时,终于写出了一个350行的正确代码。
但是由于时间的过多使用,导致另外两道题的时间不够用,而这道数据结构题,由于专注于splay,并没有再深入的思考而没有意识到可以使用更加简单和快速的线段树,导致最终此题也因超时的缘故仅仅比朴素算法多了10分。
day2的成绩最终导致吴卓杰和金牌差之毫厘。
试想,如果能在考场上对另外两题多思考一下,进行正确的评估和定位,并对已有的算法多进行审视,怀疑和分析,结果也许就会好的多了。
冷静和深入是思考的要求。
3、做题:这里的做题也并不是说如何写程序,如何实现模型,这些不是本文讨论内容。
这里的做题主要讨论的是用什么顺序做题,用什么的心理期望来做题,如何分配时间来做题。
3.1先易后难现在的题目普遍有比较多的部分分可以拿,而很多的时候即使想出完美算法,实现这些完美算法未必在考试时间内能够完成,那是应该节约时间拿到一些部分分,还是花时间思考和实现完美算法呢?对于难度相当的两道题,是应该先做哪一道呢?这是一个值得琢磨的问题。
【实例5】CTSC2009 day1CTSC2009 day1一共三道题目,分别是传统题trique,sequence,和提交答案题locate。