CCF青少年计算机程序设计评级标准(四)
四级标准
1.1 定义
了解几种常用的算法,并运用这些算法编写程序,解决问题。
1.2 知识要求
1. 结构类型,文件操作。
2. 数据类型的内在含义。
3. 贪心法,递归,回溯法,模拟算法。
4. 简单的字符串处理。
5. 集合及集合的运算,加法原理与乘法原理,简单的排列和组合。
1.3 能力要求
1. 能根据实际问题选择合适的数据类型。
2. 能运用贪心、递归、回溯、模拟等算法解决实际问题。
3. 能独立设计简单的测试数据,测试自己程序的正确性。
1.4 评价方法
1. 与信息学奥林匹克全国联赛(NOIP)普及组复赛相衔接。采用上机编程考核方式,共4个试题,考试时间:3个小时。
2. 在NOIP普及组复赛中成绩列全国前70%。
1.5 题例
试题名:校门外的树
文件名:tree
试题描述:
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,…,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点出的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入数据:
输入文件名:tree.in
第一行有两个整数L和M,L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
输出数据:
输出文件名为tree.out。
一个整数,表示马路上剩余的树的数目。
输入输出样例:
Tree.in tree.out
500 3 298
150 300
100 200
470 471
数据规模:
1<=L<=10000,1<=M<=100
对于20%的数据,区域之间没有重合的部分;
对于其它的数据,区域之间有重合的情况。
参考题解:
本题可采用模拟法。
用一个一维数组来存放马路各位置点当前的状态;设1表示当前位置的状态为树,0来表示当前位置的状态为地铁,根据题目所给的地铁区域,可以将对应的状态区域设置0,当处理完所有的地铁区间后,再重新对整条公路的状态遍历一遍,用一个计数变量记录状态为1的个数,即为问题所求。