noip2005普及组解题报告

合集下载

NOIP2002-2005解题报告

NOIP2002-2005解题报告

NOIP讲义一、NOIP2002题一:均分纸牌(NOIPG1)【问题描述】有N堆纸牌,编号分别为1, 2, ..., N-1。

每堆上有若干张,但纸牌总数必为N的倍数,可以在任一堆上取若干张,s然后移动。

移牌规则为:在编号为1堆上取的纸牌,只能移到编号为2的对上;在编号为N的堆上取的纸牌,只能移到编号为N-1的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。

现在要求找出一种移动方法,用最少的移动次数使每堆上的纸牌数都是一样多。

输入:文件名: G1.In第一行,为一个整数N(1<=N<=100)第二行,为N个整数A1, A2,…AN(N堆纸牌初始数, 1<=Ai<=10000,中间用空格分开)输出: 文件名:G2.Out只有一行,所有堆均达到相等时的最少移动次数。

输入输出样例G1.In49 8 17 6G2.Out3【问题分析】本题实际上给我们N个数A1,A2,A3,……,A N(A1+A2+A3+……+A N是N的倍数),要求我们利用一个简单的移动规则,即对于一个A I和A I+1(1≤I≤N-1),可以从A I中移X至A I+1(即A I=A I-X且A I+1=A I+1+X)(-A I+1≤X≤A I),使最后A1=A2=A3=……=A N;首先,通过A1,A2,A3,……,A N我们很容易想到先求出A1~A N的平均值___A,然后从左至右,若A I≠___A,则使A I+1=A I+1+A I-___A ,A I=___A。

例如试题给我们的例点A1=9 A2=8 A3=17 A4=6,我们先计算出___A=10,然后通过以下3步即可得出A1=A2=A3=A4①因A1≠___A,使A2=A2+A1-___A=7,A1=___A=10(10 7 17 6)②因A2≠___A,使A3=A3+A2-___A=14,A2=___A=10(10 10 14 6)③因A3≠___A,使A4=A4+A3-___A=10 A3=___A=10(10 10 10 10,A1=A2=A3=A4)。

信息学奥赛NOIP普和组历届试题分析报告

信息学奥赛NOIP普和组历届试题分析报告
普及组一般考查的动态规划:01背包,最长上升子序 列,一些简单的线性动规。
采药 (noip2005普及组第三题)
辰辰是个天资聪颖的孩子,他的梦想是成为世 界上最伟大的医师。为此,他想拜附近最有威 望的医师为师。医师为了判断他的资质,给他 出了一个难题。医师把他带到一个到处都是草 药的山洞里对他说:“孩子,这个山洞里有一 些不同的草药,采每一株都需要一些时间,每 一株也有它自身的价值。我会给你一段时间, 在这段时间里,你可以采到一些草药。如果你 是一个聪明的孩子,你应该可以让采到的草药 的总价值最大。”
试计算在区间1到n的所有整数中,数字x(0≤x≤9) 共出现了多少次? 例如,在1到11中,即在1、2、3、4、5、6、7、8、 9、10、11中,数字1出现了4次。
输入:
输入共1行,包含2个整数n、x,之间用一个空格隔 开。 输出:
输出共1行,包含一个整数,表示x出现的次数。 输入示例: 11 1 输出示例: 4 其他说明:
输入 输入共1行,一个整数N。
输出 输出共1行,一个整数,表示反转后的新数。
样例输入
123 样例输出
321
统计单词个数 (noip2011普及组第二题)
一般的文本编辑器都有查找单词的功能,该功 能可以快速定位特定单词在文章中的位置,有 的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求 是:给定一个单词,请你输出它在给定的文章 中出现的次数和第一次出现的位置。注意:匹 配单词时,不区分大小写,但要求完全匹配, 即给定单词必须与文章中的某一独立单词在不 区分大小写的情况下完全相同(参见样例1), 如果给定单词仅是文章中某一单词的一部分则 不算匹配(参见样例2)。
对于100%的数据,3 ≤ n ≤ 100 测验题给出的正整数大小不超过10,000。

NOIP2005普及组初赛试题及答案

NOIP2005普及组初赛试题及答案

第十一届全国青少年信息学奥林匹克联赛初赛试题(普及组pascal&C 语言二小时完成)●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●由OIFans()整理一.选择一个正确答案代码(A/B/C/D/E),填入每题的括号内(每题1.5分, 共30分)1. 在字符串“ababacbabcbdecced”中出现次数最多的字母出现了()次。

A. 6B. 5C. 4D. 3E. 22. 设全集I = {a, b, c, d, e, f, g, h},集合A = {a, b, c, d, e, f},B = {c, d, e},C = {a, d},那么集合C B A ~ Ç Ç 为()。

A. {c, e}B. {d, e}C. {e}D. {c, d, e}E. {d, f}3. 和十进制数23的值相等的二进制数是()。

A. 10110B. 11011C. 11011D. 10111E. 100114. 完全二叉树的结点个数为11,则它的叶结点个数为()。

A. 4B.3C.5D. 2E. 65. 平面上有五个点A(5, 3), B(3, 5), C(2, 1), D(3, 3), E(5, 1)。

以这五点作为完全图G 的顶点,每两点之间的直线距离是图G 中对应边的权值。

以下哪条边不是图G 的最小生成树中的边()。

A. ADB. BDC. CDD. DEE. EA6. Intel的首颗16 位处理器是()。

A. 8088B. 80386C. 80486D. 8086E. Pentium7. 处理器A 每秒处理的指令数是处理器B 的2 倍。

某一特定程序P 分别编译为处理器A和处理器B 的指令,编译结果处理器A 的指令数是处理器B 的4 倍。

已知程序P 在处理器A 上执行需要1 个小时,那么在输入相同的情况下,程序P 在处理器B 上执行需要()小时。

A. 4B. 2C. 1D. 1 / 2E. 1 / 48. 以下哪个不是计算机的输出设备()。

2005年信息学奥赛NOIP普及组初赛试题及参考答案

2005年信息学奥赛NOIP普及组初赛试题及参考答案
│3
一、选择题
3. 和十进制数 23 的值相等的二进制数是( )。 A. 10110 B. 11011 C. 11011 D. 10111 E. 10011
│4
一、选择题
4. 完全二叉树的结点个数为 11,则它的叶结点个数 为( )。 A. 4 B.3 C.5 D. 2 E. 6
│5一、选择题│源自20一、选择题20. 设栈 S 的初始状态为空,元素 a, b, c, d, e, f, g 依次入栈,以下出栈序列不可能出 现的是( )。 A. a,b,c,e,d,f,g B. b,c,a,f,e,g,d C. a,e,d,c,b,f,g D. d,c,f,e,b,a,g E. g,e,f,d,c,b,a
│ 21
二、问题解答 1、将数组{32,74,25,53,28,43,86,47}中的元素 按从小到大的顺序排列,每次可以交换任意两个 元素,最少需要交换_______ 次。
│ 22
二、问题解答
2. 有 3 个课外小组:物理组,化学组和生物组。今有张、 王、李、赵、陈 5 名同学,已知张、王为物理组成员, 张、李、赵为化学组成员,李、赵、陈为生物组成员。如果 要在 3 个小组中分别选出 3 位组长,一位同学最多只能 担任一个小组的组长,共有_______种选择方案。
5. 平面上有五个点 A(5,3),B(3,5),C(2,1),D(3,3),E(5,1)。以这五点 作为完全图 G 的顶点,每两点之间的直线距离是图 G 中对应边的权 值。以下哪条边不是图 G 的最小生成树中的边( )。 A. AD B. BD C. CD D. DE E. EA
│6
一、选择题
6. Intel 的首颗 16 位处理器是( )。 A. 8088 B. 80386 C. 80486 D. 8086 E. Pentium

NOIP2005普及组初赛试题及答案

NOIP2005普及组初赛试题及答案

第十一届全国青少年信息学奥林匹克联赛初赛试题(普及组pascal&C 语言二小时完成)●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●由OIFans()整理一.选择一个正确答案代码(A/B/C/D/E),填入每题的括号内(每题1.5分, 共30分)1. 在字符串“ababacbabcbdecced”中出现次数最多的字母出现了()次。

A. 6B. 5C. 4D. 3E. 22. 设全集I = {a, b, c, d, e, f, g, h},集合A = {a, b, c, d, e, f},B = {c, d, e},C = {a, d},那么集合C B A ~ Ç Ç 为()。

A. {c, e}B. {d, e}C. {e}D. {c, d, e}E. {d, f}3. 和十进制数23的值相等的二进制数是()。

A. 10110B. 11011C. 11011D. 10111E. 100114. 完全二叉树的结点个数为11,则它的叶结点个数为()。

A. 4B.3C.5D. 2E. 65. 平面上有五个点A(5, 3), B(3, 5), C(2, 1), D(3, 3), E(5, 1)。

以这五点作为完全图G 的顶点,每两点之间的直线距离是图G 中对应边的权值。

以下哪条边不是图G 的最小生成树中的边()。

A. ADB. BDC. CDD. DEE. EA6. Intel的首颗16 位处理器是()。

A. 8088B. 80386C. 80486D. 8086E. Pentium7. 处理器A 每秒处理的指令数是处理器B 的2 倍。

某一特定程序P 分别编译为处理器A和处理器B 的指令,编译结果处理器A 的指令数是处理器B 的4 倍。

已知程序P 在处理器A 上执行需要1 个小时,那么在输入相同的情况下,程序P 在处理器B 上执行需要()小时。

A. 4B. 2C. 1D. 1 / 2E. 1 / 48. 以下哪个不是计算机的输出设备()。

高中信息技术 NOIP2005信息学奥林匹克提高组解题报告

高中信息技术 NOIP2005信息学奥林匹克提高组解题报告

NOIP2005信息学奥林匹克分区联赛解题报告第一题:谁拿了最多的奖学-S cholar[问题评估]这个题目据问题本身而言是相当简单的,没有牵涉到过多的算法,属于普及型试题。

同时也是对实际问题一种分析和判断。

总的来看,本题在方向上,向现实问题迈出了一步,是信息学和生活有了更多的联系。

问题的算法是模拟。

当中唯一的难点就是数据处理,考察点为数据库的建立和统计。

[程序实现]由于程序数据范围只有100,当中不牵涉到数据移动,所以用一个纪录型数组,或者多个数组均可,在这里我们使用纪录型来描述。

对于输入数据有两种方式来实现。

法一〉逐个字符累加。

首先定义C:char;然后利用Until c=‘ ’;作为终止符,将读入的字符连接存储到a[i].name中。

代码为:Repeat read(c); a[i].name:=a[i].name+c; until c=’ ‘;a[i].name:=copy(a[i].name,1,length(a[i].s)-1);这样做的好处是,后面的值可以直接用read语句读入。

但是最后一个值后,要记得readln;法二〉一次读入,然后分离。

这样做需要逐个分离,对本题来说稍显复杂,但对NOIP来说此方法必须掌握,有的时候一定要用。

具体实现,读入一个字符串S。

利用pos(‘ ‘,s);找出空格位置。

再利用Copy函数,和Val 函数进行截取,和转换。

部分代码:(s:string;j,ok:integer)readln(s);j:=pos(‘ ‘,s);a[i].name:=copy(s,1,j-1);s:= copy(s,j+1,50); //当长度〉字符串长度是,为后面全部截取。

j:=pos(‘ ‘,s);Val(copy(s,1,j-1),a[i].qp,ok);s:= copy(s,j+1,50);…..对于符号用if语句作一下判断就是了,太easy不写了,后面还有几个值,用同样方法处理就可以了。

noip2005普及组第二题编程

noip2005普及组第二题编程

noip2005普及组第二题编程NOIP(全国青少年信息学奥林匹克竞赛)是中国最具影响力的计算机竞赛之一,每年都吸引着大量的中小学生参与。

其中,普及组是面向初学者的比赛,题目相对简单,但也需要一定的编程基础和思维能力。

在2005年的NOIP普及组比赛中,第二题是一道编程题目。

题目要求参赛者编写一个程序,计算给定的两个整数的和、差、积和商。

并且,如果除数为0,则输出"error"。

这道题目看似简单,但是需要考虑到各种边界情况和错误处理。

首先,我们需要读入两个整数a和b。

然后,我们可以使用四个变量sum、difference、product和quotient来分别存储和、差、积和商的结果。

接下来,我们需要判断除数是否为0。

如果除数为0,则输出"error";否则,我们可以计算和、差、积和商的结果。

最后,我们将结果输出。

下面是一种可能的实现方式:```pythona, b = map(int, input().split())if b == 0:print("error")else:sum = a + bdifference = a - bproduct = a * bquotient = a / bprint(sum, difference, product, quotient)```这段代码首先使用`map`函数将输入的两个整数转换为整型,并赋值给变量a和b。

然后,使用`if`语句判断除数是否为0。

如果除数为0,则输出"error";否则,计算和、差、积和商的结果,并输出。

需要注意的是,这段代码只是一种可能的实现方式,参赛者可以根据自己的编程风格和习惯进行修改和优化。

通过这道题目,参赛者可以巩固对基本的输入输出、条件判断和四则运算的理解和应用。

同时,也能够培养他们的编程思维和解决问题的能力。

NOIP2005普及组第二题编程虽然看似简单,但是在实际编程中需要考虑到各种边界情况和错误处理。

noip2005复赛试题

noip2005复赛试题

第十一届全国青少年奥林匹克信息学联赛复赛普及组试题(普及组三小时完成)陶陶摘苹果(apple.pas/c/cpp)【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。

苹果成熟的时候,陶陶就会跑去摘苹果。

陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。

假设她碰到苹果,苹果就会掉下来。

【输入文件】输入文件apple.in包括两行数据。

第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

【输出文件】输出文件apple.out包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

【样例输入】100 200 150 140 129 134 167 198 200 111110【样例输出】5校门外的树(tree.pas/c/cpp)【问题描述】某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。

我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。

由于马路上有一些区域要用来建地铁。

这些区域用它们在数轴上的起始点和终止点表示。

已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。

现在要把这些区域中的树(包括区域端点处的两棵树)移走。

你的任务是计算将这些树都移走后,马路上还有多少棵树。

【输入文件】输入文件tree.in的第一行有两个整数L(1 <= L <= 10000)和M(1 <= M <= 100),L 代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。

1124 陶陶摘苹果【NOIP2005普及组】 1125 校门外的树【NOIP2005普及组】

1124 陶陶摘苹果【NOIP2005普及组】  1125 校门外的树【NOIP2005普及组】

陶陶摘苹果【NOIP2005普及组】Time Limit:10000MS Memory Limit:65536KTotal Submit:32 Accepted:30Description陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。

苹果成熟的时候,陶陶就会跑去摘苹果。

陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。

假设她碰到苹果,苹果就会掉下来。

Input输入文件apple.in包括两行数据。

第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

Output输出文件apple.out包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

Sample Input100 200 150 140 129 134 167 198 200 111110Sample Output5Source∙var∙ i,j,n:longint;∙ a:array[1..10] of longint;∙begin∙ n:=0;∙ for i:=1 to 10 do read(a[i]);∙ readln(j);∙ for i:=1 to 10 do if j+30>=a[i] then inc(n); ∙ writeln(n);∙end.校门外的树【NOIP2005普及组】Time Limit:10000MS Memory Limit:65536KTotal Submit:13 Accepted:10Description某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。

NOIP普及组解题报告

NOIP普及组解题报告

NOIP2006复赛普及组解题报告【第一题解题思想】:这道题属于容易题,但是题目难度大于NOIP2005和2004普及组第一题,和去年第二题难度相当后者略低一些。

解法1:我们可以用先去掉重复(读入第i个数,和他前面的i-1个数比较),然后用简单排序和冒泡排序排序,最后输出结果。

解法2:运用插入排序(略加修改),边排序边除掉重复。

解法3:直接排序,不去掉重复,计算出不重复的元素个数,输出不重复的元素即可。

如果用数组A存储这些随机数,对于2到N个元素需要比较A是否等于A[i-1]。

解法4:开一个1到1000初值均为假的布尔数组A。

用整型变量X读入N个随机数,赋A[X]的值为真。

统计数组中值为真的元素个数即M,从i从1到1000输出A值为真的i。

这种方法可以算作哈希表的简单应用。

解法5:很多人想到排序,效率大概是O(n^2)吧,其实还有个更简单的方法。

用一个1到1000的数组储存每个数的出现情况,t每出现一次,a[t]=a[t]+1,而且,同时操作 if(a[t]>1) 则总数=总数-1。

然后从1到1000的循环,如果a≠0,输出,这样就根本不用排序了。

大概这个应该是最优算法吧。

O(n)的效率。

program random(input,output);var a:array[1..1000] of integer; / ’a是记录数组,相当于数轴,与数一一对应,temp 是临时存储数据,n和题目一样,记录不相同的数的个数’/i,m,temp,n:integer;beginassign(input,'d:\data\random.in');reset(input);assign(output,'d:\data\random.out');rewrite(output);read(n);readln;fillchar(a,sizeof(a),0); /*初始化数组为0,pascal有fillchar*/m:=n;for i:=1 to n dobeginread(temp);a[temp]:=a[temp]+1; /*记录是哪个数*/if a[temp]>1 then dec(m);end;write(m);writeln;for i:=1 to 1000 doif a>0 then / *如果a不为0。

noip2005提高组解题报告(转)

noip2005提高组解题报告(转)


break;{找到一个可以相邻的点即可,即找到一个目标状态即可}

end;
until j=n;
{得到一个目标状态以后,便可以像转化初始状态那样处理目标状态}
认真分析佳佳的命令:
(b 1 , b 2 ,... b m -1 , b m ) 这里并没有指这m个点必须是在一块的,只是说从原序列里找出了 m个点进行交换,交换代价为m。
起始状态: 所谓的起始状态便是1,2,3,…n这n个节点组成的一
个环,而这个环有n种正序读法,和n种倒序读法。 目标状态: 目标状态也是一个环,但我们最好把它转换成2*n条链,
只要满足这些链的关系,便称为达到了目标状态。
构造起始状态:
For t:=1 to n do
begin
第一题 第二题
第三题 第四题
ቤተ መጻሕፍቲ ባይዱ谁拿了最多奖学金 过河
篝火晚会 等价表达式
第一题:谁拿了最多奖学金
【问题描述】
某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有 五种,获取的条件各自不同:
1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且 在本学期内发表1篇或1篇以上论文的学生均可获得; 2) 五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且 班级评议成绩高于80分(>80)的学生均可获得; 3) 成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生 均可获得; 4) 西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部 省份学生均可获得; 5) 班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干 部均可获得;

noip2005提高组解题报告(转)

noip2005提高组解题报告(转)

【输入文件】 输入文件scholar.in的第一行是一个整数N(1 <= N <= 100),表 示学生的总数。接下来的N行每行是一位学生的数据,从左向右依 次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是 否是西部省份学生,以及发表的论文数。姓名是由大小写英文字 母组成的长度不超过20的字符串(不含空格);期末平均成绩和 班级评议成绩都是0到100之间的整数(包括0和100);是否是学 生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N 表示不是;发表的论文数是0到10的整数(包括0和10)。每两个 相邻数据项之间用一个空格分隔。 【输出文件】 输出文件scholar.out包括三行,第一行是获得最多奖金的学生的 姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以 上的学生获得的奖金最多,输出他们之中在输入文件中出现最早 的学生的姓名。第三行是这N个学生获得的奖学金的总数。
输入格式 输入文件的第一行有一个正整数 L ( 1 <= L <= 10^9 ),表示独
木桥的长度。第二行有三个正整数 S , T , M ,分别表示青蛙一 次跳跃的最小距离,最大距离,及桥上石子的个数,其中 1 <= S <= T <= 10 , 1 <= M <= 100 。第三行有 M 个不同的正整数分别 表示这 M 个石子在数轴上的位置(数据保证桥的起点和终点处没 有石子)。所有相邻的整数之间用一个空格隔开。 输出格式 输出文件只包括一个整数,表示青蛙过河最少需要踩到的石子数。
begin writeln(-1); halt; end;
{如果某两个点之间不能满足相邻关系,就无法构成目标状态}
for t:=1 to 2 do

noip2005

noip2005

NOIP2005普及组解题报告朱若愚王祺磊第一题,桃桃摘苹果。

个人认为不应该花时间讲这道题,而主要强调题中的细节部分,不如碰到即为摘到苹果这样的情况,这里的细心决定了这到题的成败。

再强调一下文件读取的基本操作。

特别是对文件读写后的关闭操作。

以及在这种文件读写题中,最后要将文件调试过程中的对屏幕输出和用readln;进行等待等语句去掉,否则因为这些问题影响成绩太不值得。

准备,让学生做一下提高组第一题,难度不大,但是细心程度要有所增加。

如下:【问题描述】某校的惯例是在每学期的期末考试之后发放奖学金。

发放的奖学金共有五种,获取的条件各自不同:1)院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;2)五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;3)成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;4)西部奖学金,每人1000元,期末平均成绩高于85分(>85)的西部省份学生均可获得;5)班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;只要符合条件就可以得奖,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。

例如姚林的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。

现在给出若干学生的相关数据,请计算哪些同学获得的奖金总数最高(假设总有同学能满足获得奖学金的条件)。

【输入文件】输入文件scholar.in的第一行是一个整数N(1 <= N <= 100),表示学生的总数。

接下来的N行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。

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

noip2005普及组解题报告陶陶摘苹果【文件名】: apple.pas/c/cpp【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。

苹果成熟的时候,陶陶就会跑去摘苹果。

陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。

假设她碰到苹果,苹果就会掉下来。

【输入文件】输入文件apple.in包括两行数据。

第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

【输出文件】输出文件apple.out包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。

【样例输入】100 200 150 140 129 134 167 198 200 111110【样例输出】5分析:拿到这道题,我觉得还是比较简单的。

由于数据范围都不超过200,用integer完全就足够了,具体步骤如下:1.读入2.循环 1 to 103.判断,找出最优解4.输出【程序清单】program apple;vari,n,s:integer;a:array[1..10] of integer;beginassign(input,'apple.in');reset(input);for i:=1 to 10 do read(a[i]);read(n);s:=0;for i:=1 to 10 doif n+30>=a[i] then s:=s+1;close(input);assign(output,'apple.out');rewrite(output);write(s);close(output);end.校门外的树【文件名】tree.pas/c/cpp【问题描述】某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。

我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。

由于马路上有一些区域要用来建地铁。

这些区域用它们在数轴上的起始点和终止点表示。

已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。

现在要把这些区域中的树(包括区域端点处的两棵树)移走。

你的任务是计算将这些树都移走后,马路上还有多少棵树。

【输入文件】输入文件tree.in的第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。

接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

【输出文件】输出文件tree.out包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。

【样例输入】500 3150 300100 200470 471【样例输出】298【数据规模】对于20%的数据,区域之间没有重合的部分;对于其它的数据,区域之间有重合的情况。

分析:由于这道题存在着区域之间重合的情况,所以最好用一个数组表示状态,现将其全部置为1,若在区域之间就将其置为0。

再在最后进行判断,计算值为1的个数。

【程序清单】program tree;varb:array[0..10000] of integer;a:array[1..500,1..2] of integer;j,s,l,i,m:integer;beginassign(input,'tree.in');reset(input);assign(output,'tree.out');rewrite(output);read(l,m);for i:=1 to m dobeginread(a[i,1]);read(a[i,2]);end;for i:=0 to l do b[i]:=1;for i:=1 to m dofor j:=a[i,1] to a[i,2] do b[j]:=0;s:=0;for i:=0 to l doif b[i]=1 then s:=s+1;writeln(s);close(input);close(output);end.采药【文件名】:medic.pas/c/cpp【问题描述】辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。

为此,他想拜附近最有威望的医师为师。

医师为了判断他的资质,给他出了一个难题。

医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。

我会给你一段时间,在这段时间里,你可以采到一些草药。

如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。

”如果你是辰辰,你能完成这个任务吗?【输入文件】输入文件medic.in的第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。

接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。

【输出文件】输出文件medic.out包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。

【样例输入】70 371 10069 11 2【样例输出】3【数据规模】对于30%的数据,M <= 10;对于全部的数据,M <= 100。

分析:由于其中的数据比较大,用普通简单的搜索肯定无法在限定时间内完成,所以本题采用了动态规划来完成。

这样就容易多了。

【程序清单】方法一:typedata=recordtime,price:longint;end;vart,m,ans:longint;med:array[1..100] of data;countline:array[0..1000] of longint;procedure indata;vari:integer;beginassign(input,'medic.in');reset(input);readln(t,m);for i:=1 to m doreadln(med[i].time,med[i].price);close(input);end;procedure outdata;beginassign(output,'medic.out');rewrite(output);writeln(ans);close(output);end;procedure count;vari,j,k:longint;beginfillchar(countline,sizeof(countline),0);for i:=1 to m dofor j:=t downto 1 dobeginif (j>=med[i].time) and(med[i].price+countline[j-med[i].time]>countline[j]) thencountline[j]:=med[i].price+countline[j-med[i].time]; end;ans:=countline[t];end;beginindata;count;outdata;end.解法二:program medic;varmax,t,m,i,j:Integer;a,b:array[0..1000,0..1000] of integer;beginassign(input,'medic.in');reset(input);assign(output,'medic.out');rewrite(output);read(t,m);for i:=1 to m dobeginread(b[i,1]);read(b[i,2]);end;for i:=1 to m dobeginfor j:=1 to b[i,1]-1 do a[i,j]:=a[i-1,j];for j:=b[i,1] to t dobeginif (b[i,1]=j) and (b[i,2]>a[i-1,j]) then a[i,j]:=b[i,2];if b[i,2]+a[i-1,j-b[i,1]]>a[i-1,j] thena[i,j]:=b[i,2]+a[i-1,j-b[i,1]]else a[i,j]:=a[i-1,j];end;end;writeln(a[m,t]);close(input);close(output);end.circle.pas/c/cpp【问题描述】乐乐是一个聪明而又勤奋好学的孩子。

他总喜欢探求事物的规律。

一天,他突然对数的正整数次幂产生了兴趣。

众所周知,2的正整数次幂最后一位数总是不断的在重复2,4,8,6,2,4,8,6……我们说2的正整数次幂最后一位的循环长度是4(实际上4的倍数都可以说是循环长度,但我们只考虑最小的循环长度)。

类似的,其余的数字的正整数次幂最后一位数也有类似的循环现象:这时乐乐的问题就出来了:是不是只有最后一位才有这样的循环呢?对于一个整数n的正整数次幂来说,它的后k位是否会发生循环?如果循环的话,循环长度是多少呢?注意:1.如果n的某个正整数次幂的位数不足k,那么不足的高位看做是0。

2.如果循环长度是L,那么说明对于任意的正整数a,n的a次幂和a + L次幂的最后k位都相同。

【输入文件】输入文件circle.in只有一行,包含两个整数n(1 <= n < 10100)和k(1 <= k <= 100),n和k之间用一个空格隔开,表示要求n的正整数次幂的最后k位的循环长度。

【输出文件】输出文件circle.out包括一行,这一行只包含一个整数,表示循环长度。

如果循环不存在,输出-1。

【样例输入】32 2【样例输出】4【数据规模】对于30%的数据,k <= 4;对于全部的数据,k <= 100。

刚刚看到这个题目,就知道要进行高精度的运算,这个地球人都知道。

如果用直接模拟的算法,我们来计算一下时间复杂度。

1、每计算一次高精度乘法需要O(k2) //这个算法在网上有相关的优化,本人水平太差,没能掌握2、总共需要进行至少L次高精度乘法,而L的最大值为10^100。

相关文档
最新文档