NOIP信息学奥赛复赛做题指导

NOIP信息学奥赛复赛做题指导
NOIP信息学奥赛复赛做题指导

认真审题思路清晰看清要求考虑全面自顶向下逐步求精

信息学复赛是对每一位同学综合能力的检测。这其中包括分析问题、发现规律、确定算法、程序编写、数据测试完善等各个方面。当然也对各位同学提出很高的要求,需要各位同学在现场比赛中格外小心。

一、认真审题思路清晰

问题描述是题目的关键,这其中含有这个题目的条件,解题的关键是将这些条件认真分析,加以整理,发现隐藏在其中的规律,然后( 1 )将可能出现的各种情况一一列举,( 2 )构思解答这个问题所必须的几个大的模块。这两步是解题的基础,也是解题的核心。只有把它确定下来,你才可以去做下面的工作。

对于规律,需要强调的是归纳法,从N 过渡到N+1 的逐步演变,一方面生成整数的无限序列,另一方面也形成了一种数学推理——数学归纳法原理的最基础的模型。归纳法就是指从问题的某一现象一系列特定的角度出发,通过细致的观察、总结,从而归纳出该问题所有情况的一般规律,并由此建立一个递推公式。

归纳法是通过列举问题本身的特殊情况,经过深入分析,最后概括出问题的一般规律,并得到一种高度抽象的解题模型。归纳法要比搜索、穷举、回溯等方法更能反映问题的本质。归纳的过程通常要经过以下四个步骤:

1 、细心的观察

2 、丰富的联想

3 、继续尝试

4 、总结归纳出结论

归纳是一种想象,即从特殊现象中找出一般关系。但在归纳过程中不可能列举所有情况,因而最后的出的结论还只是一种猜测。因此,运用归纳法应尽可能多的加以严格的验证。如经过多次验证(1 —20 ),使得归纳出的递推公式能经得住各种测试数据的考验。

总的来说,无论题目如何繁、难,始终要保持一个清晰的思路,只有这样你才可能找出正确的解题方法,否则你将走进错误的怪圈,无法自拔。

二、看清要求考虑全面

题目中或许会有许多条件,但是要求却不多。可这些要求确是非常重要的。这里面着重强调的是关于数据输入、输出的要求。由于今年增加了文件的输入操作,因此在做题是一定要看清楚题目对输入、输出的要求(输入、输出的方式,输入、输出的内容,输入输出的格式)每一年都会有好多同学在输入输出上丢分,其主要原因只有一点:粗心。最后再提醒一次:一定要看清楚题目的要求,不要无谓地丢分。

小学组的试题难度都不大,但是试题中所包含的情况、方面却比较多,稍一遗漏,就会出现大量的测试数据无法通过,这就需要在程序编写前将可能出现的各种情况考虑全面。也就是全面地思考问题

需要补充一点的是,对于输入、输出的数据,题目中经常会设置一些范围,术语称之为“临界点”,这些“临界点”常常是数据测试的重点,需要格外小心、要考虑周到,不能出错。

三、自顶向下逐步求精

竞赛中,每一个正确的程序不是两三步就能写出来的,它都要包含好几个标准的程序模块,所以一定要按照“自顶向下,逐步求精”的方式进行程序的编写。

首先是大模块,其次是标准程序段,第三是针对一些特殊情况的选择语句的添加,最后是完善各个模块之间的连接。这四步缺一不可,同时程序中的模块要清晰,变量使用要合理,可读性、通用性要好,否则将会为以后的检查、纠错带来很大的麻烦。

信息学奥赛复赛竞赛策略

竞赛一共有4 题,每题100 分,共400 分,比赛时间共计3 小时。

一、安排时间的策略

合理安排时间,是取得好成绩的前提。所以在做题前,需要对做题时间做一个大概的估算。正常,每题的做题时间不超过40 分钟。最后还要保留30 分钟的检查时间。

二、关于心态的策略

竞赛中,由于处于一个陌生的环境,再加上一时间面对那么多难题,可能会感觉紧张,急燥,畏难等心态。这都是正常现象,但要学会自我调节,因为竞赛不光是编程能力的竞赛,更是心理状态的竞赛,谁先摆脱紧张,急燥,畏难,谁就掌握主动,就发挥好。所以一定不可紧张,急燥,畏难,要始终保持一份平常心。无论何时,人贵在拥有一份平常心。

三、应对难题的策略

竞赛试题根据其难易程度大致有以下几类:

(0 )极其容易的题目,理解题目的意思,可能会立即做出来。

仔细检查输入、输出的要求,万不可大意。

(1 )比较简单的问题。要求你去思考这一阶段学过的内容,对一些标准的程序段稍一变化即可做出。

认真审题,将问题和已有知识一一比较,然后决定解题的算法。

(2 )从没见过,却又是一个普通的问题(侧重于算法)。它主要检查你对题目内容的理解,你可能需要反复阅读题目,认真分析,才能把它做出来。

分析问题要全面,自顶向下,逐步求精,注意模块之间的组合,及数据的输入输出。

(3 )从没见过,而且感觉无从下手的问题。它主要考查你的发现规律、解决问题的能力。不能有急燥、畏难的情绪,只要你做个有心人,将开始的几种( 1 —10 )现象一一列举,加以归纳,很快就会得到递推公式。

竞赛中出现难题、没做过的题是正常情况,不要紧张,更不要畏难。因为竞赛对大家是公平的,你觉得是难题的,别人也会感到困难。应该正视难题,保证一份平常心,认真分析,找到解题的正确算法。

四、查错、验证的策略

第一次编写完成的程序出错在所难免,这就需要查错。

查错大致分以下几个步骤:

1 、数组下标最大值是否过小

2 、自变量有没有正常加1

3 、是否有死循环

4 、表达式是否正确无误

5 、循环变量的范围是否正确无误

6 、运算符号是否正确无误

7 、每一阶段结果是否正确无误

查错可以采取从上向下,逐步验证、依次排除的方法。

五、存盘的策略

竞赛对文件保存的位置有明确的规定,一定要严格地按要求存盘,以及对数据的输入、输出也要严格地按规定进行。同时还要每隔5-10 分钟存盘一次,特别提醒的是:每次验证前,一定要先存盘。

六、检查的策略

竞赛的最后程序主要以检查为主。

主要检查以下几个方面:

1 、文件名是否正确

2 、保存路径是否正确

3 、文件内的程序是否正确无误

4 、文件对数据的输入、输出是否完全符合题目要求

NOIP2014提高组复赛精彩试题(卷)

CCF全国信息学奥林匹克联赛(NOIP2014)复赛 提高组 day1 1.生活大爆炸版石头剪刀布 (rps.cpp/c/pas) 【问题描述】 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势: 斯波克:《星际迷航》主角之一。 蜥蜴人:《星际迷航》中的反面角色。 这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。 表一石头剪刀布升级版胜负关系 现在,小A和小B尝试玩这种升级版的猜拳游戏。已知他们的出拳都是有周期性规律的,但周期长度不一定相等。例如:如果小A以“石头-布-石头-剪刀-蜥蜴人-斯波克”长度为6的周期出拳,那么他的出拳序列就是“石头-布-石头-剪刀-蜥蜴人-斯波克-石头-布-石头-剪刀-蜥蜴人-斯波克-……”,而如果小B 以“剪刀-石头-布-斯波克-蜥蜴人”长度为5的周期出拳,那么他出拳的序列就是“剪刀-石头-布-斯波克-蜥蜴人-剪刀-石头-布-斯波克-蜥蜴人-……” 已知小A和小B一共进行N次猜拳。每一次赢的人得1分,输的得0分;平局两人都得0分。现请你统计N次猜拳结束之后两人的得分。 【输入】 输入文件名为rps.in。 第一行包含三个整数:N,NA,NB,分别表示共进行N次猜拳、小A出拳的周期长度,小B出拳的周期长度。数与数之间以一个空格分隔。 第二行包含NA个整数,表示小A出拳的规律,第三行包含NB个整数,表示小B出拳的规律。其中,0表示“剪刀”,1表示“石头”,2表示“布”,3表示“蜥蜴人”, 4表示“斯波克”。数与数之间以一个空格分隔。

noip普及组复赛模拟试题18

1. 话说去年苹果们被陶陶摘下来后都很生气,于是就用最先进的克隆技术把陶陶克隆了好多份>.<然后把他们挂在树上,准备摘取。摘取的规则是,一个苹果只能摘一个陶陶,且只能在它所能摘到的高度以下(即是小于关系)的最高的陶陶,如果摘不到的话只能灰溜溜的走开了>.<给出苹果数目及每个苹果可以够到的高度和各个陶陶的高度,求苹果们都摘完后剩下多少个陶陶…… 【输入格式】第一行为两个数,分别为苹果的数量n和陶陶的数量m(n,m<=2000)以下的n行,分别为各个苹果能够到的最大高度。再接下来的m行,分别为各个陶陶的高度。高度均不高于300。 当然了,摘取的顺序按照输入的“苹果够到的最大高度”的顺序来摘。 【输出格式】输出仅有一个数,是剩下的陶陶的数量 【样例输入】5 5↙9↙10↙2↙3↙1↙6↙7↙8↙9↙10 【样例输出】3 2. 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。 任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前5名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分)是:7 279 5 279 这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是279(总分等于输入的语文、数学、英语三科成绩之和),但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:5 279 7 279则按输出错误处理,不能得分。【输入】输入文件scholar.in包含n+1行: 第1行为一个正整数n,表示该校参加评选的学生人数。 第2到n+1行,每行有3个用空格隔开的数字,每个数字都在0到100之间。第j行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n(恰好是输入数据的行号减1)。 所给的数据都是正确的,不必检验。 【输出】输出文件scholar.out共有5行,每行是两个用空格隔开的正整数, 依次表示前5名学生的学号和总分。 【输入输出样例1】 scholar.in scholar.out 6 90 67 80 87 66 91 78 89 91 88 99 77 67 89 64 78 89 98 6 265 4 264 3 258 2 244 1 237 【输入输出样例2】 scholar.in scholar.out 8 80 89 89 8 265 2 264

NOIP2008提高组复赛试题及题解

全国信息学奥林匹克联赛(NOIP2008)复赛 提高组 一、题目概览 二、提交源程序文件名 三、编译命令(不包含任何优化开关) 四、运行内存限制 注意事项: 1. 文件名(程序名和输入输出文件名)必须使用大写。 2. C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。 3. 全国统一评测时采用的机器配置为:CPU 1.9GHz,内存512M,上述时限以此配置为准。各省在自测时可根据具体配置调整时限。

1. 笨小猴 (word.pas/c/cpp) 【问题描述】 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn 是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。 【输入】 输入文件word.in只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。【输出】 输出文件word.out共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”; 第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。 【输入输出样例1】 【输入输出样例1解释】 单词error中出现最多的字母r出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。 【输入输出样例2】 【输入输出样例2解释】 单词olympic中出现最多的字母i出现了2次,出现次数最少的字母出现了1次,2-1=1,1不是质数。 基本的字符串处理,细心一点应该没问题的,不过判断素数时似乎需要考虑下0和1的情况。var a:array['a'..'z']of integer; s:string; l,i,max,min,n:integer; ch:char;flag:boolean; begin assign(input,'word.in'); reset(input); assign(output,'word.out'); rewrite(output); readln(s);

NOIP1999普及组(复赛)

第五届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题 (普及组 竞赛用时:3小时) 第一题 Cantor 表(30分) 现代数学的著名证明之一是Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 我们以Z 字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,… 输入:整数N (1≤N ≤10000000) 输出:表中的第N 项 样例: INPUT OUTPUT N=7 1/4 第二题 回文数(30分) 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。 例如:给定一个10进制数56,将56加56(即把56从右向左读),得到121是一个回文数。 又如:对于10进制数87: STEP1:87+78 = 165 STEP2:165+561 = 726 STEP3:726+627 = 1353 STEP4:1353+3531 = 4884 在这里的一步是指进行了一次N 进制的加法,上例最少用了4步得到回文数4884。 写一个程序,给定一个N (2<=N<=10,N=16)进制数M ,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible !” 样例: INPUT OUTPUT N = 9 M= 87 STEP=6 第三题 旅行家的预算(40分) 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C (以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P 和沿途油站数N (N 可以为零),油站i 离出发点的距离Di 、每升汽油价格Pi (i=1,2,…,N )。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution ”。 样例: INPUT … 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … …

NOIP2013初赛提高组Pascal试题及答案

第十九届全国青少年信息学奥林匹克联赛初赛 提高组Pascal 语言试题 竞赛时间:2013 年10 月13 日14:30~16:30 选手注意: ●试题纸共有12 页,答题纸共有2 页,满分100 分。请在答题纸上作答,写在试题纸上 的一律无效。 ●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。 一、单项选择题(共15 题,每题1.5 分,共计22.5 分;每题有且仅有一个正确选项) 1. 一个32 位整型变量占用()个字节。 A. 4 B. 8 C. 32 D. 128 2. 二进制数11.01 在十进制下是()。 A. 3.25 B. 4.125 C. 6.25 D. 11.125 3. 下面的故事与()算法有着异曲同工之妙。 从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:?从前有座山,山里有座庙,庙里有个老和尚在给小和尚讲故事:‘从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事....’? A. 枚举 B. 递归 C. 贪心 D. 分治 4. 1948 年,()将热力学中的熵引入信息通信领域,标志着信息论研究的开端。 A. 冯·诺伊曼(John von Neumann) B. 图灵(Alan Turing) C. 欧拉(Leonhard Euler) D. 克劳德·香农(Claude Shannon) 5. 已知一棵二叉树有2013 个节点,则其中至多有()个节点有2 个子节点。 A. 1006 B. 1007 C. 1023 D. 1024 6. 在一个无向图中,如果任意两点之间都存在路径相连,则称其为连通 图,至少要删去其中的()条边。

NOIP2015普及组复赛试题

CCF全国信息学奥林匹克联赛(NOIP2015)复赛 普及组 (请选手务必仔细阅读本页内容) 一、题目概况 中文题目名称金币扫雷游戏求和推销员 coin mine sum salesman 英文题目与子目 录名 可执行文件名coin mine sum salesman 输入文件名coin.in mine.in sum.in salesman.in 输出文件名coin.out mine.out sum.out salesman.out 每个测试点时限1秒 测试点数目10 每个测试点分值10 附加样例文件有 结果比较方式全文比较(过滤行末空格及文末回车) 题目类型传统 运行内存上限128M 二、提交源程序文件名 对于C++语言coin.cpp mine.cpp sum.cpp salesman.cpp 对于C语言coin.c mine.c sum.c salesman.c 对于Pascal语言coin.pas mine.pas sum.pas salesman.pas 四、注意事项: 1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。 3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm)II x2240processor,2.8GHz,内存4G,上述时限以此配置为准。 4、只提供Linux格式附加样例文件。 5、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。

1.金币 (coin.cpp/c/pas) 【问题描述】 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。 请计算在前K天里,骑士一共获得了多少金币。 【输入格式】 输入文件名为coin.in。 输入文件只有1行,包含一个正整数K,表示发放金币的天数。 【输出格式】 输出文件名为coin.out。 输出文件只有1行,包含一个正整数,即骑士收到的金币数。 【输入输出样例1】 coin.in coin.out 614 见选手目录下的coin/coin1.in和coin/coin1.ans。 【输入输出样例1说明】 骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到1+2+2+3+3+3=14枚金币。 【输入输出样例2】 coin.in coin.out 100029820 见选手目录下的coin/coin2.in和coin/coin2.ans。 【数据说明】 对于100%的数据,1≤K≤10,000。

noip2017提高组试题

CCF 全国信息学奥林匹克联赛(NOIP2017)复赛 提高组 day1 (请选手务必仔细阅读本页内容) 1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。 3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor,2.8GHz, 内存4G,上述时限以此配置为准。 4、只提供Linux 格式附加样例文件。 5、提交的程序代码文件的放置位置请参照各省的具体要求。 6、特别提醒:评测在当前最新公布的NOI Linux 下进行,各语言的编译器版本以其为准。

【问题描述】1.小凯的疑惑 (math.cpp/c/pas) 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在小凯无法准确支付的商品。 【输入格式】 输入文件名为math.in。 输入数据仅一行,包含两个正整数a 和b,它们之间用一个空格隔开,表示小凯手中金币的面值。 【输出格式】 输出文件名为math.out。 输出文件仅一行,一个正整数N,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。 见选手目录下的math/math1.in 和math/math1.ans。 【输入输出样例1 说明】 小凯手中有面值为3 和7 的金币无数个,在不找零的前提下无法准确支付价值为1、2、4、5、8、11 的物品,其中最贵的物品价值为11,比11 贵的物品都能买到,比如: 12 = 3 * 4 + 7 * 0 13 = 3 * 2 + 7 * 1 14 = 3 * 0 + 7 * 2 15 = 3 * 5 + 7 * 0 …… 【输入输出样例2】 见选手目录下的math/math2.in 和math/math2.ans。 【数据规模与约定】 对于30%的数据: 1 ≤ a,b ≤ 50。 对于60%的数据: 1 ≤ a,b ≤ 10,000。 对于100%的数据:1 ≤ a,b ≤ 1,000,000,000。

历年noip初赛普及组试题(完整资料).doc

【最新整理,下载后即可编辑】 历年noip普及组初赛试题汇编 芜湖县实验学校NOIP初赛复习资料

第十五届全国青少年信息学奥林匹克联赛初赛试题(2009) (普及组C++语言二小时完成) ●●全部试题答案均要求写在答卷纸上,写在试卷纸 上一律无效●● 一.单项选择题(共20题,每题1.5分,共计30分。每题有且仅有一个正确答案。) 1、关于图灵机下面的说法哪个是正确的: A)图灵机是世界上最早的电子计算机。 B)由于大量使用磁带操作,图灵机运行速度很慢。 C)图灵机是英国人图灵发明的,在二战中为破译德军的密码 发挥了重要作用。 D)图灵机只是一个理论上的计算模型。 2、关于计算机内存下面的说法哪个是正确的: A)随机存储器(RAM)的意思是当程序运行时,每次具体分 配给程序的内存位置是随机而不确定的。 B)1MB内存通常是指1024*1024字节大小的内存。 C)计算机内存严格说来包括主存(memory)、高速缓存(cache) 和寄存器(register)三个部分。 D)一般内存中的数据即使在断电的情况下也能保留2个小时 以上。 3、关于BIOS下面说法哪个是正确的: A)BIOS是计算机基本输入输出系统软件的简称。 B)BIOS里包含了键盘、鼠标、声卡、显卡、打印机等常用输 入输出设备的驱动程序。 C)BIOS一般由操作系统厂商来开发完成。

D)BIOS能提供各种文件拷贝、复制、删除以及目录维护等文 件管理功能。 4、关于CPU下面哪个说法是正确的: A)CPU全称为中央处理器(或中央处理单元)。 B)CPU可以直接运行汇编语言。 C)同样主频下,32位的CPU比16位的CPU运行速度快一倍。 D)CPU最早是由Intel公司发明的。 5、关于ASCII,下面哪个说法是正确的: A)ASCII码就是键盘上所有键的唯一编码。 B)一个ASCII码使用一个字节的内存空间就能够存放。 C)最新扩展的ASCII编码方案包含了汉字和其他欧洲语言的 编码。 D)ASCII码是英国人主持制定并推广使用的。 6、下列软件中不是计算机操作系统的是: A) Windows B) Linux C) OS/2 D) WPS 7、关于互联网,下面的说法哪一个是正确的: A)新一代互联网使用的IPv6标准是IPv5标准的升级与补充。 B)互联网的入网主机如果有了域名就不再需要IP地址。 C)互联网的基础协议为TCP/IP协议。 D)互联网上所有可下载的软件及数据资源都是可以合法免 费使用的。 8、关于HTML下面哪种说法是正确的: A)HTML实现了文本、图形、声音乃至视频信息的统一编码。 B)HTML全称为超文本标记语言。 C)网上广泛使用的Flash动画都是由HTML编写的。 D)HTML也是一种高级程序设计语言。

NOIP2007_提高组_复赛试题

全国信息学奥林匹克联赛(NOIP2007)复赛提高组 1.统计数字 (count.pas/c/cpp) 【问题描述】 某次科研调查时得到了n 个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数 不超过10000 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。【输入】 输入文件count.in包含n+1 行:第1 行是整数 n,表示自然数的个数。 第2~n+1 行每行一个自然数。 【输出】输出文件count.out包含m 行(m 为n 个自然数中不相同数的个数),按照自然数从小到大 的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。 【输入输出样例】 【限制】 40%的数据满足:1<=n<=1000 80%的数据满足:1<=n<=50000 100%的数据满足:1<=n<=200000,每个数均不超过1 500 000 000(1.5*109)

2.字符串的展开 (expand.pas/c/cpp) 【问题描述】 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为“defgh”和“45678”。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:(1)遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号两侧 同为小写字母或同为数字,且按照ASCII 码的顺序,减号右边的字符严格大于左边的字符。 (2)参数p1:展开方式。p1=1 时,对于字母子串,填充小写字母;p1=2 时,对于字母子串, 填充大写字母。这两种情况下数字子串的填充方式相同。p1=3 时,不论是字母子串还是数字子串, 都用与要填充的字母个数相同的星号“*”来填充。 (3)参数p2:填充字符的重复个数。p2=k 表示同一个字符要连续填充k 个。例如,当p2=3 时,子串“d-h”应扩展为“deeefffgggh”。减号两侧的字符不变。 (4)参数p3:是否改为逆序:p3=1 表示维持原有顺序,p3=2 表示采用逆序输出,注意这时仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2 时,子串“d-h”应扩展为“dggffeeh”。 (5)如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应输出为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII 码的顺序小于或等于左边字符, 输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。 【输入】 输入文件expand.in包括两行: 第1 行为用空格隔开的3 个正整数,依次表示参数p1,p2,p3。 第2 行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。 【输出】 输出文件expand.out只有一行,为展开后的字符串。

NOIP普及组复赛试题源程序

N O I P2011普及组复赛 1.数字反转(c/pas) 【问题描述】 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。(参见样例2) 【输入】 输入文件名为。 输入共一行,一个整数N。 【输出】 输出文件名为。 输出共1行,一个整数,表示反转后的新数。 -1,000,000,000≤N≤1,000,000,000。 【解题】这道题非常简单,可以读字符串处理,也可以读数字来处理,只不过要注意符号问题(以及-0,但测试数据没出)。 【法一】字符串处理 Var i,l,k:integer; s:string; p:boolean; begin assign(input, ''); reset(input); assign(output, ''); rewrite(output); readln(s); l:=length(s); k:=1; if s[1]='-' then begin write('-'); k:=2; end; p:=true;; for i:=l downto k do begin if(p)and((s[i]='0')) then continue else begin write(s[i]); p:=false;; end; end; close(input); close(output); end. 【法二】数字处理 Var f:integer; n,ans:longint; begin assign(input, ''); reset(input);

noip2004 提高组复赛试题及参考程序(pascal)

第十届信息学奥林匹克联赛复赛试题(NOIP2004) 一、津津的储蓄计划(save.pas/c/cpp) 【问题描述】 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。 例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。 津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。 现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。 【输入文件】 输入文件save.in包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。 【输出文件】 输出文件save.out包括一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。 【样例输入1】 290 230 280 200 300 170 340 50 90 80 200 60 【样例输出1】 -7 【样例输入2】 290 230

NOIP复赛普及组测试试题

NOIP复赛普及组试题

————————————————————————————————作者:————————————————————————————————日期:

CCF全国信息学奥林匹克联赛(NOIP2013)复赛 普及组 (请选手务必仔细阅读本页内容) 一.题目概况 中文题目名称计数问题表达 式求 值 小朋友的 数字 车站分 级 英文 题目 与子 目录 名 count expr number level 可执行 文件名 count expr number level 输入文 件名 count.in expr.in number.in level.in 输出文count.out expr.out n umber.out level.out

件名 每个 测试 点时 限 1 秒 1 秒 1 秒 1 秒 测试点 数目 10 10 10 10 每个 测试 点分 值 10 10 10 10 附加样 例文件 有有有有 结果比较方式全文比较(过滤行末空格及文末回车) 题目类 型 传统传统传统传统

运行内 存上限 128M 128M 128M 128M 二.提交源程序文件名 对于 C++语 言 count.cpp expr.cpp number.cpp level.cpp 对于 C 语 言 count.c expr.c number.c level.c 对于 pascal 语言 count.pas expr.pas number.pas level.pas 三.编译命令(不包含任何优化开关) 对于C++语言 g++ -o count count.cpp -lm g++ -o expr expr.cpp –lm g++ -o number number.cpp -lm g++ -o level level.cpp -lm 对于C 语言gcc -o count gcc -o expr gcc-o number gcc -o level

NOIP2012提高组复赛试题

全国信息学奥林匹克联赛(2012)复赛提高组2 2. 1 ·同余方程 〖问题描述〗 求关于的同余方程三1 (句的最小正整数解。 输入〗 输入文件为 输入只有一行,包含两个正整数用一个空格隔开 输出〗 输出文件为 输出只有一行,包含一个正整数№即最小正整数解。输入数据保证一定有解。 〖输入输出样例〗 对于40%的数据,2 L000:对于60%的数据, 2 50,000,000: 对于100%的数据,2,2,000,000,000。 2 ·借教室 (. ) 问题描述〗 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问 题。

我们需要处理接下来n天的借教室信息,其中第i天学校有个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为d],斗t},表示某租借者需要从第丬天到第t]天租借教室(包括第丬天和第t)天),每天需要租借个教室。 我们假定,租借者对教室的大小、地点没有要求。即对于每份订单,我们只需要每天提供d]个教室,而它们具体是哪些教室,每天是否是相同的教室则不用考虑。 借教室的原则是先到先得,也就是说我们要按照订单的先后顺序依次为每份订单分配教室。如果在分配的过程中遇到一份订单无法完全满足,则需要停止教室的分配,通知当前申请人修改订单。这里的无法满足指从第丬天到第t)天中有至少一天剩余的教室数量不足d)个。现在我们需要知道,是否会有订单无法完全满足。如果有,需要通知哪一个申请人修改 输入〗 输入文件为 第一行包含两个正整数n,m,表示天数和订单的数量。 第二行包含n个正整数,其中第i个数为,表示第i天可用于租借的教室数量。 接下来有m行,每行包含三个正整数],t],表示租借的数量,租借开始、结束分别在第几天。 每行相邻的两个数之间均用一个空格隔开。天数与订单均用从1开始的整数编号。 〖输出〗 输出文件为 如果所有订单均可满足,则输出只有一行,包含一个整数0。否则(订单无法完全满足)输出两行,第一行输出一个负整数一1 ,第二行输出需要修改订单的申请人编号。 〖输入输出样例〗

NOIP普及组复赛试题

CCF全国信息学奥林匹克联赛(NOIP2017)复赛 普及组 (请选手务必仔细阅读本页内容) 注意事项: 1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。 3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor,2.8GHz, 内存4G,上述时限以此配置为准。 4、只提供Linux格式附加样例文件。 5、提交的程序代码文件的放置位置请参照各省的具体要求。 6、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。

1. 成绩 (score.cpp/c/pas) 【问题描述】 牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是: 总成绩=作业成绩×20%+小测成绩×30%+期末考试成绩×50% 牛牛想知道,这门课程自己最终能得到多少分。 【输入格式】 输入文件名为score.in。 输入文件只有1行,包含三个非负整数A、B、C,分别表示牛牛的作业成绩、小测成绩和期末考试成绩。相邻两个数之间用一个空格隔开,三项成绩满分都是100分。 【输出格式】 输出文件名为score.out。 输出文件只有1行,包含一个整数,即牛牛这门课程的总成绩,满分也是100分。 见选手目录下的score/score1.in和score/score1.ans。 【输入输出样例1说明】 牛牛的作业成绩是100分,小测成绩是100分,期末考试成绩是80分,总成绩是100×20%+100×30%+80×50%=20+30+40=90。 【输入输出样例2说明】 牛牛的作业成绩是60分,小测成绩是90分,期末考试成绩是80分,总成绩是60×20%+90×30%+80×50%=12+27+40=79。 【数据说明】 对于30%的数据,A=B=0。 对于另外30%的数据,A=B=100。 对于100%的数据,0≤A、B、C≤100且A、B、C都是10的整数倍。

NOIP2007初赛提高组试题和答案

第十三届全国青少年信息学奥林匹克联赛初赛试题 (提高组Pascal语言二小时完成) ●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●● 一、单项选择题(共10题,每题 1.5分,共计15分。每题有且仅有一个正确答案.)。 1.在以下各项中。()不是CPU的组成部分。 A.控制器 B.运算器 C.寄存器 D.主板 E.算术逻辑单元(ALU) 2.在关系数据库中,存放在数据库中的数据的逻辑结构以()为主。 A.二叉树 B.多叉树 C.哈希表 D.B+树 E.二维表 3.在下列各项中,只有()不是计算机存储容量的常用单位。 A.Byte B.KB C.MB D.UB E.TB 4.ASCII码的含义是()。 A.二—十进制转换码 B.美国信息交换标准代码 C.数字的二进制数码 D.计算机可处理字符的唯一编码 E.常用字符的二进制编码 5.在Pascal语言中,表达式(23or2xor5)的值是() A.18 B.1 C.23 D.32 E.24 6.在Pascal语言中,判断整数a等于0或b等于0或c等于0的正确的条件表达式是() A.not((a<>0)or(b<>0)or(c<>0)) B.not((a<>0)and(b<>0)and(c<>0)) C.not((a=0)and(b=0))or(c=0) D.(a=0)and(b=0)and(c=0) E.not((a=0)or(b=0)or(c=0)) 7.地面上有标号为A、B、C的3根细柱,在A柱上放有10个直径相同中间有孔的圆盘,从上到下次依次编号为1,2,3,……,将A柱上的部分盘子经过B柱移入C柱,也可以在B柱上暂存。如果B柱上的操作记录为:“进,进,出,进,进,出,出,进,进,出,进,出,出”。那么,在C柱上,从下到上的盘子的编号为()。 A.243657 B.241257 C.243176 D.243675 E.214375 8.与十进制数17.5625相对应的8进制数是()。 A.21.5625 B.21.44 C.21.73 D.21.731 E.前4个答案都不对 9.欧拉图G是指可以构成一个闭回路的图,且图G的每一条边恰好在这个闭回路上出现一次(即一笔画成)。在以下各个描述中,不一定是欧拉图的是:()。 A.图G中没有度为奇数的顶点 B.包括欧拉环游的图(欧拉环游是指通过图中每边恰好一次的闭路径)

NOIP复赛普及组试题精编版

CCF全国信息学奥林匹克联赛(NOIP2013)复赛 普及组 (请选手务必仔细阅读本页内容) 一.题目概况 二.提交源程序文件名

三.编译命令(不包含任何优化开关) 注意事项: 1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。 3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) 64x2 Dual Core CPU 5200+, 2.71GHz,内存2G,上述时限以此配置为准。 4、只提供Linux 格式附加样例文件。 5、特别提醒:评测在NOI Linux 下进行。 1.记数问题 (count.cpp/c/pas) 【问题描述】 试计算在区间1 到n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?例如,在1 到11 中,即在1、2、3、4、5、6、7、8、9、10、11 中,数字1 出现了4 次。 【输入】 输入文件名为count.in。 输入共1 行,包含2 个整数n、x,之间用一个空格隔开。 【输出】 输出文件名为count.out。 输出共1 行,包含一个整数,表示x 出现的次数。 【输入输出样例】

【数据说明】 对于100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。 2.表达式求值 (expr.cpp/c/pas) 【问题描述】 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。 【输入】 输入文件为expr.in。 输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号,所有参与运算的数字均为0 到231-1 之间的整数。输入数据保证这一行只有0~ 9、+、*这12 种字符。 【输出】 输出文件名为expr.out。 输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于4 位时,请只输出最后4 位,前导0 不输出。 【输入输出样例1】 【输入输出样例2】

NOIP2008普及组复赛试题与解题报告

NOIP 2008普及组解题报告 一、ISBN号码(isbn.pas/c/cpp) 【问题描述】 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。 识别码的计算方法如下: 首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。 你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。 【输入】 输入文件isbn.in只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。 【输出】 输出文件isbn.out共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。 【输入输出样例1】 isbn.in 0-670-82162-4 isbn.out Right 【输入输出样例2】 isbn.in

NOIP历年复赛提高组试题(2004-2013)

第十届全国信息学奥林匹克分区联赛(NOIP2004)复赛试题 (提高组竞赛用时:3小时) 1、津津的储蓄计划(Save.pas/dpr/c/cpp) 【问题描述】 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。 例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。 津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。 现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。 【输入文件】 输入文件save.in包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。 【输出文件】 输出文件save.out包括一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。 【样例输入1】 290 230 280 200 300 170 340 50 90 80 200 60

NOIP2018提高组复赛试题day2

CCF全国信息学奥林匹克联赛(NOIP2018)复赛 提高组 day2 (请选手务必仔细阅读本页内容) 注意事项: 1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。 3、全国统一评测时采用的机器配置为:Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz,内存 32GB。上述时限以此配置为准。 4、只提供Linux格式附加样例文件。 5、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。

1.旅行 (travel.cpp/c/pas) 【问题描述】 小Y是一个爱好旅行的OIer。她来到X国,打算将各个城市都玩一遍。 小Y了解到,X国的 n 个城市之间有 m 条双向道路。每条双向道路连接两个城市。不存在两条连接同一对城市的道路,也不存在一条连接一个城市和它本身的道路。并且,从任意一个城市出发,通过这些道路都可以到达任意一个其他城市。小Y只能通过这些道路从一个城市前往另一个城市。 小Y的旅行方案是这样的:任意选定一个城市作为起点,然后从起点开始,每次可以选择一条与当前城市相连的道路,走向一个没有去过的城市,或者沿着第一次访问该城市时经过的道路后退到上一个城市。当小Y回到起点时,她可以选择结束这次旅行或继续旅行。需要注意的是,小Y要求在旅行方案中,每个城市都被访问到。 为了让自己的旅行更有意义,小Y决定在每到达一个新的城市(包括起点)时,将它的编号记录下来。她知道这样会形成一个长度为 n 的序列。她希望这个序列的字典序最小,你能帮帮她吗? 对于两个长度均为 n 的序列A和B,当且仅当存在一个正整数x,满足以下条件时,我们说序列A的字典序小于B。 ?对于任意正整数1≤i

相关文档
最新文档