noip2019第十年全国青少年信息学奥林匹克联赛普及组复赛试题

合集下载

2019年全国青少年信息学(计算机)奥林匹克分区联赛普及组复赛试题

2019年全国青少年信息学(计算机)奥林匹克分区联赛普及组复赛试题

NOIP2002普及组解题报告题一:级数求和[问题描述]::Sn=1+1/2+1/3+…+1/n。

显然对于任意一个整数K,当n足够大的时候,Sn大于K。

现给出一个整数K〔1<=K<=15〕,要求计算出一个最小的n,使得Sn>K[问题分析]:这道题目非常简单,题目的意思已经把该题的算法描述得再清楚不过了,初始时Sn=0,n=0,然后每次循环n←n+1,Sn←Sn+1/n,,直到Sn大于K,最后输出K。

另外实型(Real 是最慢的,建议用Extended)的运算速度不是很快,而K为1~15之间的整数,所以最后可以交一张表〔常量数组〕,以达到最好的效果[参考程序]:programc1;varK:Byte;n:Longint;Sn:Extended;beginReadln(K);Sn:=0;n:=0;RepeatInc(n);Sn:=Sn+1/n;UntilSn>k;Writeln(n);end.题二:选数[问题描述]:n〔1<=n<=20〕个整数x1,x2,…,xn〔1<=xi<=5000000〕,以及一个整数k〔k<n〕。

从n 个整数中任选k个整数相加,可分别得到一系列的和。

现在,要求你计算出和为素数共有多少种。

[问题分析]:此题动态规划无从下手,也无数学公式可寻,看来只能搜索〔组合的生成算法〕,其实1<=n<=20这个约束条件也暗示我们此题搜索是有希望的,组合的生成可用简单的DFS来实现,既搜索这k个整数在原数列中的位置,由于组合不同于排列,与这k个数的排列顺序无关,所以我们可以令a[I]<a[I+1]〔a[I]表示第I个数在原数列中的位置〕,这个组合生成算法的复杂度大约为C(n,k),下面给出递归搜索算法的框架:接下来的问题就是判断素数,判断一个整数P(P>1)是否为素数最简单的方法就是看是否存在一个素数a(a<=sqrt(P))是P的约数,如果不存在,该数就为素数,由于在此题中1<=xi<=5000000,n<=20,所以要判断的数P不会超过100000000,sqrt(p)<=10000,因此,为了加快速度,我们可以用筛选法将2…10000之间的素数保存到一个数组里〔共1229个〕,这样速度估计将提高5~6倍。

少儿编程NOIP2019年普及组复赛试题

少儿编程NOIP2019年普及组复赛试题

2019 年CCF 非专业级软件能力认证第二轮入门级2019 CCF CSP-J2时间:2019 年11 月16 日14:30 - 18:00二.提交源程序文件名注意事项:1.文件名(程序名和输入输出文件名)必须使用英文小写。

2.C/C++ 中函数main() 的返回值类型必须是int,程序正常结束时的返回值必须是0。

3.提交的程序代码文件的放置位置请参照各省的具体要求。

4.因违反以上三点而出现的错误或问题,申诉时一律不予受理。

5.程序可使用的栈内存空间限制与题目的内存限制一致。

6.全国统一评测时采用的机器配置为:Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz,内存32GB。

上述时限以此配置为准。

7.只提供Linux 格式附加样例文件。

8.评测在当前最新公布的NOI Linux 下进行,各语言的编译器版本以其为准。

9.最终评测时所用的编译命令中不含任何优化开关。

数字游戏(number.cpp/c/pas)【问题描述】小K 同学向小P 同学发送了一个长度为8 的01 字符串来玩数字游戏,小P 同学想要知道字符串中究竟有多少个1。

注意:01 字符串为每一个字符是0 或者1 的字符串,如“101”(不含双引号)为一个长度为3 的01 字符串。

【输入格式】输入文件名为number.in。

输入文件只有一行,一个长度为8 的01 字符串s。

【输出格式】输出文件名为number.out。

输出文件只有一行,包含一个整数,即01 字符串中字符 1 的个数。

见选手目录下的number/number1.in 和number/number1.ans。

【输入输出样例1 说明】该01 字符串中有 2 个字符1。

见选手目录下的number/number2.in 和number/number2.ans。

【输入输出样例2 说明】该01 字符串中有8 个字符1。

【输入输出样例3】见选手目录下的number/number3.in 和number/number3.ans。

第十届noip初赛试题及答案(普及组c)

第十届noip初赛试题及答案(普及组c)

第十届全国青少年信息学奥林匹克联赛初赛试题(普及组 C 语言二小时完成)●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●一.选择一个正确答案代码(A/B/C/D/E),填入每题的括号内 (每题1.5分, 共30分)1.美籍匈牙利数学家冯·诺依曼对计算机科学发展所做出的贡献是()。

A.提出理想计算机的数学模型,成为计算机科学的理论基础。

B.是世界上第一个编写计算机程序的人。

C.提出存储程序工作原理,并设计出第一台具有存储程序功能的计算机EDV AC。

D.采用集成电路作为计算机的主要功能部件。

E.指出计算机性能将以每两年翻一番的速度向前发展。

2.下列哪个不是CPU(中央处理单元)()。

A. Intel ItaniumB. DDR SDRAMC. AMD Athlon64D. AMD OpteronE. IBM Power 53.下列网络上常用的名字缩写对应的中文解释错误的是()。

A.WWW(World Wide Web):万维网。

B.URL(Uniform Resource Locator):统一资源定位器。

C.HTTP(Hypertext Transfer Protocol):超文本传输协议。

D.FTP(File Transfer Protocol):快速传输协议。

E.TCP(Transfer Control Protocol):传输控制协议。

4.下面哪个部件对于个人桌面电脑的正常运行不是必需的()。

A.CPUB. 图形卡(显卡)C. 光驱D. 主板E. 内存5.下列哪个软件属于操作系统软件()。

A. Microsoft WordB. 金山词霸C. FoxmailD. WinRARE. Red Hat Linux6.下列哪个不是计算机的存储设备()。

A. 文件管理器B. 内存C. 高速缓存D. 硬盘E. U盘7.下列说法中错误的是()。

A.CPU的基本功能就是执行指令。

B.CPU访问内存的速度快于访问高速缓存的速度。

noip普及组复赛模拟试题19

noip普及组复赛模拟试题19

1. 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。

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

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

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

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

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

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

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

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

【输出格式】输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。

【输入样例】500 3150 300100 200470 471【输出样例】2982.足球【问题描述】:我们当中有很多热爱中国足球的同学,我们都知道中超(中国足球超级联赛)的规则:一场比赛中,若获胜(即你的得分严格大于对手得分)则获得3的积分,若打平(即你的得分等于对手得分)则获得1分,若失败(即你的得分严格小于对手得分)获得0积分。

这个问题很简单,假设N轮比赛中你一共攻入S个球,丢掉T个球,那么你可能获得的最大得分和最小得分是多少?【输入文件】多组数据,每组数据一行:一行三个整数S、T、N(S、T >= 0,N >= 1)。

【输出文件】对于每组数据输出一行,两个整数表示最大得分和最小得分。

【样例输入】1 1 11 1 2【样例输出】1 13 23. 这也叫破译?【题目描述】 NOIP吧是个很和谐的吧,一直为了OI事业而奋斗。

但是,由于吧的日益壮大,各种矛盾还是避免不了。

这两天,传说中的NOIP吧官方群群主接到一封神秘而好笑的信。

noip2019第十年全国青少年信息学奥林匹克联赛普及组复赛试题

noip2019第十年全国青少年信息学奥林匹克联赛普及组复赛试题

noip2019第十年全国青少年信息学奥林匹克联赛普及组复赛试题〔普及组三小时完成〕【一】不高兴的津津【问题描述】津津上初中了。

妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。

另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。

但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。

假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。

请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

【输入文件】输入文件unhappy.in包括七行数据,分别表示周一到周日的日程安排。

每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

【输出文件】输出文件unhappy.out包括一行,这一行只包含一个数字。

如果不会不高兴那么输出0,如果会那么输出最不高兴的是周几〔用1,2,3,4,5,6,7分别表示周一,周二,周三,周四,周五,周六,周日〕。

如果有两天或两天以上不高兴的程度相当,那么输出时间最靠前的一天。

【样例输入】53627253540406【样例输出】3【二】花生采摘(peanuts.pas/dpr/c/cpp)【问题描述】鲁宾逊先生有一只宠物猴,名叫多多。

这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。

鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。

在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格〔如图1〕。

有经验的多多一眼就能看出,每棵花生植株下的花生有多少。

为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。

”我们假定多多在每个单位时间内,可以做以下四件事情中的一件:1)从路边跳到最靠近路边〔即第一行〕的某棵花生植株;2)从一棵植株跳到前后左右与之相邻的另一棵植株;3)采摘一棵植株下的花生;4)从最靠近路边〔即第一行〕的某棵花生植株跳回路边。

NOI2019笔试题库及答案

NOI2019笔试题库及答案

NOI2019笔试题库及答案1.NOI 机试使用的操作系统是:Linux2.Linux 中为文件改名使用的命令是:mv <旧文件名> <新文件名>3.在Linux 中返回上一级目录使用的命令是:cd ..4.在Linux 中删除当前目录下的test 目录的命令是:rm -r test5.当前目录下有一个编译好的可执行文件 a.out,执行它使用的命令是:./a.out6.使用高级语言编写的程序称之为:源程序7.在NOI Linux 系统中可以用来调试程序的程序是:gdb8.在Linux 系统中,文件夹中的文件可以与该文件夹同名吗:可以9.Linux 系统中杀死名为test 的后台进程的命令是:killall test10.Linux 系统中可以查看隐藏文件的命令是:ls -a11.Linux 系统中编译C 程序的编译器是:gcc12.Linux 系统中编译Pascal 程序的编译器是:fpc13.Linux 系统中编译C++程序的编译器是:g++14. Linux 系统中,将当前目录下的文件名打印到tmp 文件中的命令是:ls >tmp 15.Linux 系统中,测量当前目录下程序test 运行时间的命令是:time ./test16. vim 编辑器中,强制退出不保存修改应当输入::q!17. vim 编辑器中,强制退出并保存修改可输入以下三种命令之一::wq、ZZ、:x18.vim 编辑器中,定位到文件中第12 行应当输入::1219. vim 编辑器中,在文件中查找字符串“12”应当输入:/1220.使用gcc 编译C 程序时,生成调试信息的命令行选项是:-g21. 使用gcc 编译C 程序时,生成所有警告信息的命令行选项是:-Wall22.使用gcc 编译C 程序时,只编译生成目标文件的命令行选项是:-c23.使用gcc 编译C 程序时,指定输出文件名的命令行选项是:-o24.如果C 程序中使用了math.h 中的函数,在编译时需要加入选项:-lm25. Linux 系统中具有最高权限的用户是:root26. 在Linux 的各个虚拟控制台间切换的快捷键是:Ctrl+Alt+F[1-6]27. 在NOI Linux 中,从字符控制台切换回桌面环境使用的快捷键是:Ctrl+Alt+F728.在NOI Linux 中默认使用的Shell 是:bash29.在Linux 中查看当前系统中的进程使用的命令是:ps30.在Linux 中查看进程的CPU 利用率使用的命令是:ps31. 如果自己的程序进入死循环,应当如何终止:Ctrl-C32. 可执行文件a.out从标准输入读取数据。

noip普及组复赛模拟试题14(附答案)

noip普及组复赛模拟试题14(附答案)

解的个数(count)给定一个正整数K,问有多少和正整数X,Y满足X>=Y且1/K=1/X+1/Y,将所有解按X降序输出。

输入第一行一个数T,表示数据组数以下T行,每行一个数K输出T部分,每部分第一行一个数K,以下一次按X降序输出所有解,个数见样例,注意=+两边都有空格。

样例输入2212样例输出21/2 = 1/6 + 1/31/2 = 1/4 + 1/481/12 = 1/156 + 1/131/12 = 1/84 + 1/141/12 = 1/60 + 1/151/12 = 1/48 + 1/161/12 = 1/36 + 1/181/12 = 1/30 + 1/201/12 = 1/28 + 1/211/12 = 1/24 + 1/24数据规模30% K<=20100% K<=10000,T<=10标程:var t,i,j,l,n,k:integer;a:array[1..20] of integer;b,c:array[1..10000] of longint;procedure shou(n:integer);var k,s:longint;begink:=n+1;s:=n*2;l:=0;for i:=k to s dobeginif n*i mod (i-n)=0 thenbegininc(l);b[l]:=(n*i) div (i-n);c[l]:=i;end;end;end;beginassign(input,'count.in');reset(input);assign(output,'count.out'); rewrite(output);readln(t);for i:=1 to t doreadln(a[i]);for k:=1 to t dobeginshou(a[k]);writeln(l);for j:=1 to l dowriteln(1,'/',a[k],' ','=',' ',1,'/',b[j],' ','+',' ',1,'/',c[j]);end;close(input);close(output);end.输入341532输出31/4 = 1/20 + 1/51/4 = 1/12 + 1/61/4 = 1/8 + 1/851/15 = 1/240 + 1/161/15 = 1/90 + 1/181/15 = 1/60 + 1/201/15 = 1/40 + 1/241/15 = 1/30 + 1/3061/32 = 1/1056 + 1/331/32 = 1/544 + 1/341/32 = 1/288 + 1/361/32 = 1/160 + 1/401/32 = 1/96 + 1/481/32 = 1/64 + 1/64不等数列(num.cpp/c/pas)【题目描述】将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”。

noip普及组复赛模拟试题15(附答案)

noip普及组复赛模拟试题15(附答案)

【基础】班委确定【试题描述】经过紧张而激烈的选拔考试,编程班终于浮出水面,一共有k位同学幸运的入选,这k位同学个个可都是精英,才华横溢,思维敏捷。

让谁做班长?让谁做学习委员?让谁做团委书记呢……?这可让班主任老师伤透了脑筋。

个个都优秀,个个都能干,实在是没有办法了。

抓阄吧!这个抓阄可不是普通的抓阄,老师让这k位同学围成一圈从一号位置开始顺时针报数报到m这个人就出圈(啊?猴子选大王啊!把我们当猴子啦?Of course not),出圈后就反向逆时针从下一个开始报数,报到n再出圈,然后再反向顺时针报到m出圈,反向逆时针报到n出圈……圈里的人越来越少,当还剩下5个人的时候那么这5个人就是编程班的班委。

Star很想当班委,为了能够当上班委,他想请你帮忙确定哪些位置是班委的位置。

【输入描述】一行:三个整数k,m和n【输出描述】一行:5个数,分别为5个班委位置的号码(号码从大到小排列)。

两个号码之间用一个空格隔开,最后一个号码没有空格【输入样例】 10 3 2【输出样例】 10 9 8 6 4【解题提示】样例说明:出圈顺序为:3 1 5 2 7 剩下4 6 8 9 10数据规模:10%的数据 k,n,m <= 1540%的数据 k,n,m <= 20060%的数据 k,n,m <= 50090%的数据 k,n,m <= 1000100%的数据 k<=1000 n,m <= 100000【试题来源】常州长训班测试var k,i,h,s,w:integer;t,z,m,n:int64;f:boolean; a:array[1..1000] of 0..1;b:array[1..5] of integer;begin readln(k,m,n); fillchar(a,sizeof(a),1);f:=true; s:=k; w:=0;while s>5 dobegint:=0;if f=true then begin h:=1;z:=m endelse begin h:=-1;z:=n end;while t<z dobeginw:=w+h; if w<=0 then w:=k+w;w:=w mod k;if w=0 then w:=k;t:=t+a[w];end;a[w]:=0;f:=not f;dec(s);end;t:=1;for i:=1 to k doif a[i]<>0 then begin b[t]:=i; inc(t);end;for i:=5 downto 2 do write(b[i],' ');write(b[1]);end.输入20 5 3 输出18 12 9 3 1输入40 9 5 输出31 25 16 2 1宝石手镯[Kolstad/Cox, 2006]贝茜在珠宝店闲逛时,买到了一个中意的手镯。

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

noip2019第十年全国青少年信息学奥林匹克联赛普及组复赛试题〔普及组三小时完成〕【一】不高兴的津津【问题描述】津津上初中了。

妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。

另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。

但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。

假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。

请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

【输入文件】输入文件unhappy.in包括七行数据,分别表示周一到周日的日程安排。

每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

【输出文件】输出文件unhappy.out包括一行,这一行只包含一个数字。

如果不会不高兴那么输出0,如果会那么输出最不高兴的是周几〔用1,2,3,4,5,6,7分别表示周一,周二,周三,周四,周五,周六,周日〕。

如果有两天或两天以上不高兴的程度相当,那么输出时间最靠前的一天。

【样例输入】53627253540406【样例输出】3【二】花生采摘(peanuts.pas/dpr/c/cpp)【问题描述】鲁宾逊先生有一只宠物猴,名叫多多。

这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。

鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。

在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格〔如图1〕。

有经验的多多一眼就能看出,每棵花生植株下的花生有多少。

为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。

”我们假定多多在每个单位时间内,可以做以下四件事情中的一件:1)从路边跳到最靠近路边〔即第一行〕的某棵花生植株;2)从一棵植株跳到前后左右与之相邻的另一棵植株;3)采摘一棵植株下的花生;4)从最靠近路边〔即第一行〕的某棵花生植株跳回路边。

现在给定一块花生田的大小和花生的分布,请问在限定时间内,多多最多可以采到多少个花生?注意可能只有部分植株下面长有花生,假设这些植株下的花生个数各不相同。

例如在图2所示的花生田里,只有位于(2,5),(3,7),(4,2),(5,4)的植株下长有花生,个数分别为13,7,15,9。

沿着图示的路线,多多在21个单位时间内,最多可以采到37个花生。

【输入文件】输入文件peanuts.in的第一行包括三个整数,M,N和K,用空格隔开;表示花生田的大小为M*N〔1<=M,N<=20〕,多多采花生的限定时间为K〔0<=K<=1000〕个单位时间。

接下来的M行,每行包括N个非负整数,也用空格隔开;第i+1行的第j个整数Pij〔0<=Pij<=500〕表示花生田里植株(i,j)下花生的数目,0表示该植株下没有花生。

【输出文件】输出文件peanuts.out包括一行,这一行只包含一个整数,即在限定时间内,多多最多可以采到花生的个数。

【样例输入1】672100000000000130000000070150000000090000000000【样例输出1】37【样例输入2】672000000000000130000000070150000000090000000000【样例输出2】28【三】FBI树(fbi.pas/dpr/c/cpp)【问题描述】我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I 串,既含“0”又含“1”的串那么称为F串。

FBI树是一种二叉树[1],它的结点类型也包括F结点,B结点和I结点三种。

由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:1)T的根结点为R,其类型与串S的类型相同;2)假设串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。

现在给定一个长度为2N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历[2]序列。

【输入文件】输入文件fbi.in的第一行是一个整数N〔0<=N<=10〕,第二行是一个长度为2N的“01”串。

【输出文件】输出文件fbi.out包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。

【样例输入】310001011【样例输出】IBFBBBFIBFIIIFF【数据规模】对于40%的数据,N<=2;对于全部的数据,N<=10。

【四】火星人(martian.pas/dpr/c/cpp)【问题描述】人类终于登上了火星的土地并且见到了神秘的火星人。

人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。

这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回答。

火星人用一种非常简单的方式来表示数字——掰手指。

火星人只有一只手,但这只手上有成千上万的手指,这些手指排成一列,分别编号为1,2,3……。

火星人的任意两根手指都能随意交换位置,他们就是通过这方法计数的。

一个火星人用一个人类的手演示了如何用手指计数。

如果把五根手指——拇指、食指、中指、无名指和小指分别编号为1,2,3,4和5,当它们按正常顺序排列时,形成了5位数12345,当你交换无名指和小指的位置时,会形成5位数12354,当你把五个手指的顺序完全颠倒时,会形成54321,在所有能够形成的120个5位数中,12345最小,它表示1;12354第二小,它表示2;54321最大,它表示120。

下表展示了只有3根手指时能够形成的6个3位数和它们代表的数字:三进制数123132213231312321代表的数字123456现在你有幸成为了第一个和火星人交流的地球人。

一个火星人会让你看他的手指,科学家会告诉你要加上去的很小的数。

你的任务是,把火星人用手指表示的数与科学家告诉你的数相加,并根据相加的结果改变火星人手指的排列顺序。

输入数据保证这个结果不会超出火星人手指能表示的范围。

【输入文件】输入文件martian.in包括三行,第一行有一个正整数N,表示火星人手指的数目〔1<=N<=10000〕。

第二行是一个正整数M,表示要加上去的小整数〔1<=M<=100〕。

下一行是1到N这N个整数的一个排列,用空格隔开,表示火星人手指的排列顺序。

【输出文件】输出文件martian.out只有一行,这一行含有N个整数,表示改变后的火星人手指的排列顺序。

每两个相邻的数中间用一个空格分开,不能有多余的空格。

【样例输入】5312345【样例输出】12453【数据规模】对于30%的数据,N<=15;对于60%的数据,N<=50;对于全部的数据,N<=10000;--------------------------------------------------------------------------------[1]二叉树:二叉树是结点的有限集合,这个集合或为空集,或由一个根结点和两棵不相交的二叉树组成。

这两棵不相交的二叉树分别称为这个根结点的左子树和右子树。

[2]后序遍历:后序遍历是深度优先遍历二叉树的一种方法,它的递归定义是:先后序遍历左子树,再后序遍历右子树,最后访问根。

NOIP普及组复赛参考程序-NOIP2004普及组解题参考第一题:不高兴的津津方法:枚举程序:programunhappy;{writenbylxq2004.11.20}vara,i,x,y,d,max:byte;beginassign(input,'unhappy.in');reset(input);assign(output,'unhappy.out');rewrite(output);d:=0;max:=8;fori:=1to7dobeginreadln(x,y);a:=x+y;ifa>maxthenbeginmax:=a;d:=i;end;end;writeln(d);close(input);close(output);end.第二题:花生采摘方法:排个序,然后迭代递推程序:programpeanuts;{writenbylxq2004.11.20} typemytype=recordx,y,d:integer;end;vartime,all,num,i,j,m,n,k,u,v,z:integer;q:array[1..400]ofmytype;t:mytype;beginall:=0;assign(input,'peanuts.in');reset(input);readln(m,n,k);fori:=1tomdobeginforj:=1tondobeginread(u);ifu>0thenbegininc(all);q[all].x:=i;q[all].y:=j;q[all].d:=u;ifall>1thenbeginv:=1;whileq[v].d>udoinc(v);t:=q[all];forz:=alldowntov+1doq[z]:=q[z-1];q[v]:=t;end;end;end;readln;end;close(input);num:=0;time:=0;u:=0;v:=q[1].y;fori:=1toalldobeginiftime+abs(q[i].x-u)+abs(q[i].y-v)+1+q[i].x<=k thenbegininc(num,q[i].d);time:=time+abs(q[i].x-u)+abs(q[i].y-v)+1;u:=q[i].x;v:=q[i].y;elsebreak;end;assign(output,'peanuts.out');rewrite(output);writeln(num);close(output);end.第三题FBI树方法:递归即可,按后序遍历直接边生成边打印。

程序:programfbi;{writenbylxq2004.11.20}varf:array[1..1024]ofchar;i,k,n:integer;c:char;functionlastorder(i,j,n:integer):char; varlc,rc:char;beginifn=0thenlastorder:=f[i]elsebeginlc:=lastorder(i,(i+j)div2,n-1);write(lc);rc:=lastorder((i+j)div2+1,j,n-1);write(rc);iflc=rcthenlastorder:=lcelselastorder:='F'; end;end;beginassign(input,'fbi.in');reset(input);readln(n);k:=1;fori:=1tondok:=k*2;fori:=1tokdobeginread(c);ifc='0'thenf[i]:='B'elsef[i]:='I'end;readln;close(input);assign(output,'fbi.out');rewrite(output);writeln(lastorder(1,k,n));close(output);第四题火星人方法:排列生成法,直接从指定序列用排列产生方法顺序生成到后面M个。

相关文档
最新文档