NOIP2005提高组复赛第二题 过河分析

NOIP2005提高组复赛第二题 过河分析
NOIP2005提高组复赛第二题 过河分析

过河

【问题描述】在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。

题目给出独木桥的长度L,青蛙跳跃的距离范围S,T,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。

【输入文件】输入文件river.in的第一行有一个正整数L(1 ≤L ≤109),表示独木桥的长度。第二行有三个正整数S,T,M,分别表示青蛙一次跳跃的最小距离,最大距离,及桥上石子的个数,其中1≤S≤T≤10,1≤M≤ 100。第三行有M个不同的正整数分别表示这M个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。所有相邻的整数之间用一个空格隔开。

【输出文件】输出文件river.out只包括一个整数,表示青蛙过河最少需要踩到的石子数。方法1:搜索

?直叙式搜索不行:搜索桥有困难(桥的长度1..109);搜索石子更困难,(石头的分布是没有任何规律)

?优化:以桥的长度为对象搜索+巧妙的剪枝

?分析:从桥的一侧到另一侧,中间最多只有100个石子。假设桥长为最大值(109),石头数也为最大值(100),则中间一定会有很多“空长条” (两个石子中的空地),关键是如何在处理时把这些“空长条”跳过,使得运算次数降到M次。

先求出青蛙可能跳到的所有位置,然后就可以在忽略“空长条”的前提下,计算青蛙过河最少需要踩到的石子数了。算法的时间复杂度为O(m 2)

方法2、动态规划

设opt[n]为青蛙到达n 位置最少需要踩到的石子数。

rock[n]=

这个方程的时间复杂度是O (n )级的 ,显然在竞赛时限内, n≤109的极限数据是无法出解的

优化方法:压缩法

?结论:

?若 (采用跳跃距离p 和p+1时可以跳至任何位置Q ),则在Q ≥P*(P-1)时是一定有解的。

为什么呢?

Because 证明

?由于p 与p+1间隔1,故方程px+(p+1)y=Q 有整数解,设其解为

? x=x 0+(p+1)t,y=y 0-pt(t 是整数)

?取适当的t ,使得0≤x ≤p(只需在x 0上加上或减去若干个p+1),则当Q>p(p-1)-1]}[][{min ][n rock i n opt n opt T

i S +-=≤≤?????位置无石子

位置有石子n n 01Q

y p px =++)1(

时,有

?(p+1)y=Q-px>p(p-1)-1-px ≥p(p-1)-1-p*p=-(p+1)

?于是y>-1,故y ≥0也是非负整数。证毕.

由于题目给出的一个区间是1≤S≤T≤10,于是当相邻的两个石子之间的距离不小于8*9=72时,则后面的距离都可以到达,我们就可以认为它们之间的距离就是72。如此一来,我们就将原题L 的范围缩小为了100*72=7200,动态规划算法完全可以承受了。但是当S=T 时,上述等式是无法使用的,在这种情况下,只需要在所有石子中,统计出坐标是S 倍数的石子个数就可以了。

n 为桥上的石子数(1≤n≤m);

b[i]为能否用s 到t 的一次跳跃距离跳至i 远的标志

b[i]=true i=0

b[i]= 1≤i≤90

c[v]为青蛙能否跳到相对距离为v 远的标志(v≤90)

?

? c[v]=

a[i,j]为青蛙跳至x[i]左方相对距离为j 的位置时所经过的最少石子总数。若j=0,说明青蛙踩到了桥上的第i 个石子。初始时,a[i,j]=n+1(0≤i ≤n ,0≤j ≤t-1)。

第1种情况:x[i]-j 位置位于x[i-1]的左方,即x[i]-j ≤x[i-1]

显然,跳至x[i]-j 位置经过的最少石子总数为a[i-1,j-x[i]+x[i-1]]

第2种情况:x[i]-j 位置位于x[i-1]的右方,即x[i]-j>x[i-1]

??

???-<≤-≥<)1(0][)

1(0

s s v v b s s v true v

false

显然,如果青蛙能够由x[i-1]-v 位置跳至x[i]-j 位置(can(x[i]-j-x[i-1]+v)=true ),则跳至x[i]-j 位置经过的石子总数为a[i-1,v]或者为a[i-1,v]+1(j=0时,即踩到了桥上的第i 个石子)。但究竟v 多大时,才能使得最少石子数最少呢,我们无法预知,只能在0‥t-1的范围内一一枚举v ,从中找出经过的最少石子数。

a[i,j]=

最后,我们枚举青蛙跳出独木桥前的最后一个起跳位置x[n]-i(0≤i ≤t-1),从中计算出青蛙过河最少需要踩到的石子数

?var L,s,t,m,n,i,j,v,best:longint;

? x:array [0..100] of longint;{由左而右记录每个石子的位置}

? a:array [0..100,0..9] of longint;{a[i,j]为青蛙跳到x[i]-j 位置经过的最少石子数}

? b:array [-10..90] of boolean;{b[i]记录能否用s 到t 这t-s+1种距离从原点到达横坐标为i 的位置}

? function can(v:longint):boolean;{判别青蛙能否跳到位置v}

? begin

? if v<0

? then can:=false

? else if v>=s*s-s{可以证明,当v ≥s(s-1)时,一定可以用s 和s+1两种跳跃距离到达位置v,所以要对s=t 作特殊处理}

? then can:=true

? else can:=b[v]

? end;{can}

?begin

? assign(input,'river.in');reset(input);{输入文件读准备}

? readln(L);readln(s,t,m);{读独木桥长度、青蛙一次跳跃的最小距离,最大距离和桥上的石子数} ? for i:=1 to m do read(x[i]);{输入每个石子在数轴上的位置}

? readln; close(input);{关闭输入文件}

? for i:=1 to m-1 do{按照由左而右的顺序排列石子}

? for j:=1 to m-1 do

? if x[j]>x[j+1] then begin v:=x[j];x[j]:=x[j+1];x[j+1]:=v end;{ then }

?n:=m;while x[n]>L do dec(n);{去除独木桥外的石子}

? if s=t{若青蛙每次跳跃的距离唯一,则青蛙过河最少需要踩到的石子数best 即为坐标位置为s 整倍数的石子数}

? then begin

???????=->-++----≠->-+-----≤--+---≤≤-≤≤0

],1[][1}]]1[][[],1[{min 0],1[][]}]1[][[],1[{min ]1[][]]1[][,1[1010j i x j i x v i x j i x can v i a j i x j i x v i x j i x can v i a i x j i x i x i x j i a t v t v ]}

,[{min 10i n a t i -≤≤

?best:=0;

?for i:=1 to n do if x[i] mod s=0 then inc(best);

?assign(output,'river.out');rewrite(output);{输出文件写准备}

?writeln(best); {输出best后关闭输出文件并成功退出}

?close(output); halt

?end;{ then }

?fillchar(b,sizeof(b),false);

?b[0]:=true;{计算小范围的情况}

?for i:=1 to 90 do{递推每一个坐标位置}

?for j:=s to t do {枚举青蛙一次跳跃的可能距离,计算青蛙能否跳到坐标位置i}

?b[i]:=b[i] or b[i-j];

?for i:=0 to n do{状态转移方程初始化}

?for j:=0 to t-1 do a[i,j]:=n+1;

?x[0]:=0;{在0位置处增加一个虚拟的石子}

?a[0,0]:=0;{ 青蛙在0位置起跳}

?for i:=1 to n do{递推桥上的每一个石子}

?for j:=0 to t-1 do{枚举每一个可能的跳前位置}

?if x[i]-j<=x[i-1]{如果x[i]-j位置位于石子i-1的左端}

?then a[i,j]:=a[i-1,j-x[i]+x[i-1]]

?else begin{若x[i]-j位置位于石子i-1的右端,则枚举每一个可能的跳前}

?for v:=0 to t-1 do

?if can(x[i]-j-x[i-1]+v) and (a[i-1,v]

?if j=0 then inc(a[i,j]){若踩到第I个石子,则经过的石子数+1}

?end;{ else }

?best:=n+1;

?for i:=0 to t-1 do{枚举青蛙跳出独木桥前的最后一个起跳位置,计算经过的石子数,从中找出最优解}

?if a[n,i]

?assign(output,'river.out');rewrite(output);{输出文件写准备}

?writeln(best);{输出最优解}

?close(output){关闭输出文件}

?end.

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表示“斯波克”。数与数之间以一个空格分隔。

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);

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. 在一个无向图中,如果任意两点之间都存在路径相连,则称其为连通 图,至少要删去其中的()条边。

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。

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只有一行,为展开后的字符串。

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

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 ,第二行输出需要修改订单的申请人编号。 〖输入输出样例〗

NOIP2017_提高组复赛试题day2

CCF全国信息学奥林匹克联赛(NOIP2017)复赛 提高组 day2 (请选手务必仔细阅读本页内容) 注意事项: 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.奶酪 (cheese.cpp/c/pas) 【问题描述】 现有一块大奶酪,它的高度为h,它的长度和宽度我们可以认为是无限大的,奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系,在坐标系中,奶酪的下表面为z=0,奶酪的上表面为z=h。 现在,奶酪的下表面有一只小老鼠Jerry,它知道奶酪中所有空洞的球心所在的坐标。如果两个空洞相切或是相交,则Jerry可以从其中一个空洞跑到另一个空洞,特别地,如果一个空洞与下表面相切或是相交,Jerry则可以从奶酪下表面跑进空洞;如果一个空洞与上表面相切或是相交,Jerry则可以从空洞跑到奶酪上表面。 位于奶酪下表面的Jerry想知道,在不破坏奶酪的情况下,能否利用已有的空洞跑到奶酪的上表面去? 空间内两点P1(x1,y1,z1)、P2(x2,y2,z2)的距离公式如下: dist(P1,P2)=√(x1?x2)+(y1?y2)+(z1?z2) 【输入格式】 输入文件名为cheese.in。 每个输入文件包含多组数据。 输入文件的第一行,包含一个正整数T,代表该输入文件中所含的数据组数。 接下来是T组数据,每组数据的格式如下: 第一行包含三个正整数n,h和r,两个数之间以一个空格分开,分别代表奶酪中空洞的数量,奶酪的高度和空洞的半径。 接下来的n行,每行包含三个整数x、y、z,两个数之间以一个空格分开,表示空洞球心坐标为(x,y,z)。 【输出格式】 输出文件名为cheese.out。 输出文件包含T行,分别对应T组数据的答案,如果在第i组数据中,Jerry能从下表面跑到上表面,则输出“Yes”,如果不能,则输出“No”(均不包含引号)。

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历年复赛提高组试题(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

noip提高组c初赛试题与答案

2009 第十五届全国青少年信息学奥林匹克联赛初赛试题 提高组 C++ 语言 二小时完成 ) 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 . 单项选择题 (共 10 题,每题分,共计 15 分。每题有且仅有一个正确答 案。) 1、关于图灵机下面的说法哪个是正确的: 图灵机是英国人图灵发明的,在二战中为破译德军的密码发挥了重要作 用。 2、关于BIOS 下面的说法哪个是正确的: BIOS 里包含了键盘、鼠标、声卡、图形界面显器等常用输入输出设备的 驱动程序。 BIOS 能提供各种文件拷贝、复制、删除以及目录维护等文件管理功能。 3、已知大写字母A 的ASCII 编码为65(十进制),则大写字母J 的 十六进制ASCII 编码为: 4、在字长为 16位的系统环境下,一个 16位带符号整数的二进制补码为 101。 其对应的十进制整数应该是: n 个分支结点(非叶结点)的非空满 k 叉树,k>=1,它的叶结点数 B) nk-1 C) (k+1)n-1 D. (k-1)n+1 6. 表达式 a*(b+c )-d 的后缀表达式是: A) abcd*+- B) abc+*d- C) abc*+d- D) -+*abcd 7、最优前缀编码,也称 Huffman 编码。这种编码组合的特点是对于较频繁使用 的元素给与 较短的唯一编码,以提高通讯的效率。下面编码组合哪一组不是 合法的前缀编码。 A )(00, 01, 10, 11) A) 图灵机是世界上最早的电子计算机。 B) 由于大量使用磁带操作,图灵机运行速度很慢。 C) 图灵机只是一个理论上的计算模型。 D) A) BIOS 是计算机基本输入输出系统软件的简称。 B) C) BIOS 一般由操作系统厂商来开发完成。 D) A) 48 B) 49 C) 50 D) 以上都不是 A) 19 B) -19 C) 18 D) -18 5、一个包含 目为: A) nk + 1

noip2017提高组试题day1day2Word版

全国信息学奥林匹克联赛(2017)复赛 提高组 1 (请选手务必仔细阅读本页内容) 一.题目概况 二.提交源程序文件名 三.编译命令(不包含任何优化开关) 注意事项: 1、文件名(程序名和输入输出文件名)必须使用英文小写。

2、中函数 ()的返回值类型必须是,程序正常结束时的返回值必须是 0。 3、全国统一评测时采用的机器配置为: () x2 240 ,2.8,内存 4G,上述时限以此配置为准。 4、只提供格式附加样例文件。 5、提交的程序代码文件的放置位置请参照各省的具体要求。 6、特别提醒:评测在当前最新公布的下进行,各语言的编译器版本以其为准。

【问题描述】1.小凯的疑惑 () 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的。现在小凯想知道在无法准确支付的物品中,最贵的价值是多少金币?注意:输入数据保证存在小凯无法准确支付的商品。 【输入格式】 输入文件名为。 输入数据仅一行,包含两个正整数 a 和 b,它们之间用一个空格隔开,表示小凯手中金币的面值。 【输出格式】 输出文件名为。 输出文件仅一行,一个正整数 N,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。 【输入输出样例 1】 【输入输出样例 1 说明】 小凯手中有面值为3 和7 的金币无数个,在不找零的前提下无法准确支付价值为1、 2、4、5、8、11 的物品,其中最贵的物品价值为 11,比 11 贵的物品都能买到,比如:

noip2017提高组试题day1day2Word版 12 = 3 * 4 + 7 * 0 13 = 3 * 2 + 7 * 1 14 = 3 * 0 + 7 * 2 15 = 3 * 5 + 7 * 0 …… 【输入输出样例 2】 见选手目录下的 2 和 2。 【数据规模与约定】 对于 30%的数据:1 ≤ a,b ≤ 50。 对于 60%的数据:1 ≤ a,b ≤ 10,000。 对于 100%的数据:1 ≤ a,b ≤ 1,000,000,000。

NOIP2005提高组复赛第二题_过河分析

过河 【问题描述】在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上 有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L (其中L 是 桥的长度)。坐标为0的点表示桥的起点,坐标为L 的点表示桥的终点。青蛙从桥的起点开 始,不停的向终点方向跳跃。一次跳跃的距离是S 到T 之间的任意正整数(包括S,T )。当 青蛙跳到或跳过坐标为L 的点时,就算青蛙已经跳出了独木桥。 题目给出独木桥的长度L ,青蛙跳跃的距离范围S,T ,桥上石子的位置。你的任务是确定青 蛙要想过河,最少需要踩到的石子数。 【输入文件】输入文件river.in 的第一行有一个正整数L (1 ≤ L ≤ 109),表示独木桥 的长度。第二行有三个正整数S ,T ,M ,分别表示青蛙一次跳跃的最小距离,最大距离, 及桥上石子的个数,其中1≤S≤T≤10,1≤M≤ 100。第三行有M 个不同的正整数分别表示这 M 个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。所有相邻的整数之间用 一个空格隔开。 【输出文件】输出文件river.out 只包括一个整数,表示青蛙过河最少需要踩到的石子数。 方法1:搜索 ?直叙式搜索不行:搜索桥有困难(桥的长度1..109);搜索石子更困难,(石头的分布是没有 任何规律) ?优化:以桥的长度为对象搜索+巧妙的剪枝 ?分析:从桥的一侧到另一侧,中间最多只有100个石子。假设桥长为最大值(109),石头数 也为最大值(100),则中间一定会有很多“空长条” (两个石子中的空地),关键是如何在处理时 把这些“空长条”跳过,使得运算次数降到M 次。 先求出青蛙可能跳到的所有位置,然后就可以在忽略“空长条”的前提下,计算青蛙过河最少 需要踩到的石子数了。算法的时间复杂度为O(m2) 方法2、动态规划 设opt[n]为青蛙到达n 位置最少需要踩到的石子数。 rock[n]= 这个方程的时间复杂度是O (n )级的 ,显然在竞赛时限内, n≤109的极限数据是无法出 解的 优化方法:压缩法 ?结论: ?若(采用跳跃距离p 和p+1时可以跳至任何位置Q ),则在Q ≥P*(P-1)时是一定有解的。 为什么呢? Because 证明 ]}[][{m in ][n rock i n opt n opt T i S +-=≤≤?????位置无石子 位置有石子n n 01Q y p px =++)1(

2009-2013年NOIP初赛提高组C++语言试题及参考标准答案

2009-2013年NOIP初赛提高组C++语言试题 2013第十九届全国青少年信息学奥林匹克联赛初赛 提高组C++语言试题竞赛时间: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.在一个无向图中,如果任意两点之间都存在路径相连,则称其为连通 图。右图是一个有5个顶点、8条边的连通图。若要使它不再是连通 图,至少要删去其中的()条边。 A.2 B.3 C.4 D.5 7.斐波那契数列的定义如下:F1=1,F2=1,Fn=Fn–1+Fn–2(n≥3)。如果用下面的函数 计算斐波那契数列的第n项,则其时间复杂度为()。 int F(int n) { if(n<=2) return 1; else return F(n-1)+F(n-2); } ) A.O(1) B.O(n) C.O(n2) D.O(F n

NOIP提高组复赛试题汇编(1998-2010)

NOIP 1998 1.火车从始发站(称为第1站)开出,在始发站上车的人数为a ,然后到达第2站,在第2站有人上、 下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a 人。从第3站起(包括第3站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的条件是:共有N 个车站,始发站上车的人数为a ,最后一站下车的人数是m (全部下车)。试问x 站开出时车上的人数是多少?2.设有n 个正整数(n ≤20),将它们联接成一排,组成一个最大的多位整数。例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213又如:n=4时,4个整数7,13,4,246联接成的最大整数为:74246133.著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字。例如: 其含义为: L+L=L ,L+K=K ,L+V=V ,L+E=E K+L=K ,K+K=V ,K+V=E ,K+E=KL E+E=KV 根据这些规则可推导出:L=0,K=1,V=2,E=3 同时可以确定该表表示的是4进制加法 NOIP 1999 第一题拦截导弹 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 样例:INPUT OUTPUT 38920715530029917015865 6(最多能拦截的导弹数) 2(要拦截所有导弹最少要配备的系统数) 输入:a ,n ,m 和x 输出:从x 站开出时车上的人数。 程序输入:n n 个数 程序输出:联接成的多位数 程序输入: n (n ≤9)表示行数。 以下n 行,每行包括n 个字符串,每个字串间用空格隔开。(字串仅有一个为‘+’号,其它都由大写字母组成) 程序输出: ①各个字母表示什么数,格式如:L=0,K=1,…… ②加法运算是几进制的。 ③若不可能组成加法表,则应输出“ERROR !”

NOIP2012提高组复赛试题

CCF全国信息学奥林匹克联赛(NmP2012)复赛提高组day2 2. 1 ·同余方程 〖问题描述〗 求关于的同余方程三1 (mod句的最小正整数解。 输入〗 输入文件为mod.ino 输入只有一行,包含两个正整数用一个空格隔开 输出〗 输出文件为mod.outo 输出只有一行,包含一个正整数№即最小正整数解。输入数据保证一定有解。 〖输入输出样例〗 对于40%的数据,2 L000:对于60%的数 据,2 50,000,000: 对于100%的数据,2,2,000,000,000。 2 ·借教室 (classroom. cpp/c/pas) 问题描述〗 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来n天的借教室信息,其中第i天学校有个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为d],斗t},表示某租借者需要从第丬天到第t]天租借教室(包括第丬天和第t)天),每天需要租借dj个教室。 我们假定,租借者对教室的大小、地点没有要求。即对于每份订单,我们只需要每天提供d]个教室,而它们具体是哪些教室,每天是否是相同的教室则不用考虑。 借教室的原则是先到先得,也就是说我们要按照订单的先后顺序依次为每份订单分配教室。如果在分配的过程中遇到一份订单无法完全满足,则需要停止教室的分配,通知当前申请人修改订单。这里的无法满足指从第丬天到第t)天中有至少一天剩余的教室数量不足d)个。现在我们需要知道,是否会有订单无法完全满足。如果有,需要通知哪一个申请人修改 输入〗 输入文件为classroom.in 第一行包含两个正整数n,m,表示天数和订单的数量。

NOIP-2017全国青少年信息学奥林匹克联赛提高组初赛试题标准答案

NOIP 2017全国青少年信息学奥林匹克联赛提高组初赛试卷答案 一、单项选择题(共 15 题,每题 1.5 分,共计 22.5 分;每题有且仅有一个正确选项) 1. 从( )年开始,NOIP 竞赛将不再支持 Pascal 语言。 A. 2020 B. 2021 C. 2022 D. 2023 2.在 8 位二进制补码中,10101011 表示的数是十进制下的( )。 A. 43 B. -85 C. -43 D.-84 3.分辨率为 1600x900、16 位色的位图,存储图像信息所需的空间为( )。 A. 2812.5KB B. 4218.75KB C. 4320KB D. 2880KB 4. 2017年10月1日是星期日,1949年10月1日是( )。 A. 星期三 B. 星期日 C. 星期六 D. 星期二 5. 设 G 是有 n 个结点、m 条边(n ≤m)的连通图,必须删去 G 的( )条边,才能使得 G 变成一棵树。 A.m–n+1 B. m-n C. m+n+1 D.n–m+1 6. 若某算法的计算时间表示为递推关系式: T(N)=2T(N/2)+NlogN T(1)=1 则该算法的时间复杂度为( )。 A.O(N) B.O(NlogN) C.O(N log2N) D.O(N2)

7. 表达式a * (b + c) * d的后缀形式是()。 A. abcd*+* B. abc+*d* C. a*bc+*d D. b+c*a*d 8. 由四个不同的点构成的简单无向连通图的个数是( )。 A. 32 B. 35 C. 38 D. 41 9. 将7个名额分给4个不同的班级,允许有的班级没有名额,有( )种不同的分配方案。 A. 60 B. 84 C. 96 D.120 10. 若f[0]=0, f[1]=1, f[n+1]=(f[n]+f[n-1])/2,则随着i的增大,f[i]将接近与( )。 A. 1/2 B. 2/3 D. 1 11. 设A和B是两个长为n的有序数组,现在需要将A和B合并成一个排好序的数组,请问任何以元素比较作为基本运算的归并算法最坏情况下至少要做( )次比较。 A. n2 B. nlogn C. 2n D.2n-1 12. 在n(n>=3)枚硬币中有一枚质量不合格的硬币(质量过轻或质量过重),如果只有一架天平可以用来称重且称重的硬币数没有限制,下面是找出这枚不合格的硬币的算法。请把 a-c三行代码补全到算法中。 a. A XUY b. A Z c. n |A| 算法Coin(A,n) 1. k n/3 2. 将A中硬币分成X,Y,Z三个集合,使得|X|=|Y|=k, |Z|=n-2k 3. if W(X)≠W(Y) //W(X), W(Y)分别为X或Y的重量

历届noip提高组复赛试题

NOI’95 “同创杯”全国青少年信息学(计算机)奥林匹克竞赛 分区联赛复赛试题(高中组) (上机编程,完成时间:210分钟) <1>编码问题: 设有一个数组A:ARRAY[0..N-1] OF INTEGER; 数组中存放的元素为0~N-1之间的整数,且A[i]≠A[j](当i≠j时)。 例如:N=6时,有:A=(4,3,0,5,1,2) 此时,数组A的编码定义如下: A[0]的编码为0; A[i]的编码为:在A[0],A[1],…,A[i-1]中比A[i]的值小的个数(i=1,2,…,N-1)∴上面数组A的编码为:B=(0,0,0,3,1,2) 程序要求解决以下问题: ①给出数组A后,求出其编码。 ②给出数组A的编码后,求出A中的原数据。 <2>灯的排列问题: 设在一排上有N个格子(N≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N1,N2,……N k(k表示不同颜色灯的个数)。 放灯时要遵守下列规则: ①同一种颜色的灯不能分开; ②不同颜色的灯之间至少要有一个空位置。 例如:N=8(格子数) R=2(红灯数) B=3(蓝灯数) 放置的方法有: R-B顺序

B-R顺序 放置的总数为12种。 数据输入的方式为: N P1(颜色,为一个字母)N1(灯的数量) P2 N2 …… Q(结束标记,Q本身不是灯的颜色) 程序要求:求出一种顺序的排列方案及排列总数。 <3> 设有一个四层的积木块,1~4层积木块的数量依次为:5,6,7,8 如下图所示放置: 其中,给出第三层与第四层所标示的数字,并已知第三层的数据是由第四层的数据计算出来的。 计算的方法是:第三层的某个数据A是由第四层相邻的两个数据B,C经过某种计算后产生的: 计算所用到的计算符为:+,-,?,且无优先级之分(自左向右计算),运算符最多为2个。 如:3+4?5=35 5?4+3=23 可以看出,上图中的第三层的数据是由第四层的数据用以下计算公式计算出来的: A=B?C+B 也就是:8=2?3+2,15=3?4+3,……14=2?6+2 程序要求: 给出第四层与第三层的数据后,将第一、二层的每块积木标上相应的数据,并输出整个完整的积木图及计算公式。 ①输入数据不存在出错的情况,同时也不会超过整数的范围。

相关文档
最新文档