历届noip提高组复赛试题
- 格式:docx
- 大小:436.09 KB
- 文档页数:56
第一题:神经网络【试题分析】一、题意分析1、任务描述:从输入层开始,各节点按照传递公式,一层一层向下传递。
输出输出层中信号大于零的节点编号和信号大小。
(节点编号由小到大)如果没有满足条件的编号则输出NULL。
信号传递公式:∑∈-=Ei jijjiiUCWC),(公式中的Wji(可能为负值)表示连接j号神经元和i号神经元的边的权值。
当Ci大于0时,该神经元处于兴奋状态,否则就处于平静状态。
当神经元处于兴奋状态时,下一秒它会向其它神经元传递信号,信号的强度为Ci。
2、输入:两个整数n(1≤n≤20)和p。
n表示节点的个数;p表示有向边的条数。
下面n行表示1-n号节点的状态和阈值。
下面p行表示有向边及其权值。
3、输出:输出输出层状态大于零的神经元编号和状态,并且按照编号有小到大顺序输出!若输出层的神经元最后状态小于等于0,则输出NULL。
二、问题分析1、题目中给出每层神经元只向下一层的神经元输出信息,只从上一层神经元接受信息。
所以不必进行拓扑排序,一层一层的向下传递信号即可。
输出最后一层中信号大于零的节点编号。
2、可以建立一个队列,将输入层节点入队。
3、取队首节点出队,寻找此节点有向边,如果有有向边:1)则记录此节点不是输出层;2)再判断此节点信号大于零则向下传递信号,将指向的节点入队(防止重复入队)。
再出队再传递,直至全部出队。
注意:1)输入层可以是输出层。
2)信号传递公式中只减一次U[i]。
【程序清单】Program network;ConstInName='network.in';OutName='network.out';MM=100;VarInFile,OutFile:Text;C,U:Array[1..MM] Of LongInt;Map:Array[1..MM,1..MM] Of LongInt;Flag:Array[1..MM,1..MM] Of Boolean;IsOut:Array[1..MM] Of Boolean;Queue:Array[1..MM] Of LongInt;N,P,i,Int1,Int2,Head,Rear:LongInt;IsInQueue:Array[1..MM] Of Boolean;IsNull:Boolean;BeginAssign(InFile,InName);Reset(InFile);ReadLn(InFile,N,P);For i:=1 To N Do ReadLn(InFile,C[i],U[i]); FillChar(Flag,SizeOf(Flag),False);For i:=1 To P Do BeginRead(InFile,Int1,Int2);ReadLn(InFile,Map[Int1,Int2]);Flag[Int1,Int2]:=True;End;Close(InFile);FillChar(IsOut,SizeOf(IsOut),True);FillChar(IsInQueue,SizeOf(IsInQueue),False); Head:=1; Rear:=1;For i:=1 To N Do BeginIf C[i]>0 Then BeginQueue[Rear]:=i;Inc(Rear);IsInQueue[i]:=True;EndElse C[i]:=-U[i];End;While Head<Rear Do BeginFor i:=1 To N DoIf Flag[Queue[Head],i] Then BeginIf C[Queue[Head]]>0 Then BeginInc(C[i],Map[Queue[Head],i]*C[Queue[Head]]);If Not IsInQueue[i] Then BeginQueue[Rear]:=i;Inc(Rear);IsInQueue[i]:=True;End;End;IsOut[Queue[Head]]:=False;End;Inc(Head);End;Assign(OutFile,OutName);Rewrite(OutFile);IsNull:=True;For i:=1 To N DoIf IsOut[i] ThenIf C[i]>0 Then BeginWriteLn(OutFile,i,' ',C[i]);IsNull:=False;End;If IsNull Then WriteLn(OutFile,'NULL');Close(OutFile);End.第二题:侦探推理【试题分析】一、题意分析1、任务描述:M个人参加游戏,每人提供一句或多句证言,共P句证言。
CCF 全国信息学奥林匹克联赛(NOIP2013)复赛提高组 day11.转圈游戏(circle.cpp/c/pas)【问题描述】n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏。
按照顺时针方向给 n 个位置编号,从 0 到 n-1。
最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推。
游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小伙伴走到第 m+1 号位置,……,依此类推,第n −m号位置上的小伙伴走到第 0 号位置,第n-m+1 号位置上的小伙伴走到第 1 号位置,……,第 n-1 号位置上的小伙伴顺时针走到第m-1 号位置。
现在,一共进行了10k 轮,请问x 号小伙伴最后走到了第几号位置。
【输入】输入文件名为circle.in。
输入共 1 行,包含 4 个整数n、m、k、x,每两个整数之间用一个空格隔开。
【输出】输出文件名为c ircle.out。
输出共1行,包含1个整数,表示10k 轮后x号小伙伴所在的位置编号。
【输入输出样例】circle.in circle.out10 3 4 5 5【数据说明】对于30%的数据,0 < k < 7;对于80%的数据,0 < k < 107;对于100%的数据,1 < n< 1,000,000,0 <m <n ,0 ≤ x ≤ n,0 < k< 109。
2.火柴排队(match.cpp/c/pas)【问题描述】涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。
现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:,其中 ai表示第一列火柴中第 i 个火柴的高度,bi 表示第二列火柴中第 i 个火柴的高度。
每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。
第一题题库NOIP20071.统计数字(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 <=100080%的数据满足:1<=n <=50000100%的数据满足:1<=n <=200000,每个数均不超过1 500 000 000(1.5*109)NOIP20081. 笨小猴(wird.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。
第十届信息学奥林匹克联赛复赛试题(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】29023028020030017034050908020060【样例输出1】-7【样例输入2】29023028020030017033050908020060【样例输出2】1580二、合并果子(fruit.pas/c/cpp)【问题描述】在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。
Day1铺地毯【问题描述】为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。
一共有n 张地毯,编号从1 到n。
现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。
地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。
注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。
【输入】输入文件名为 carpet.in。
输入共 n+2 行。
第一行,一个整数 n,表示总共有n 张地毯。
接下来的 n 行中,第i+1 行表示编号i 的地毯的信息,包含四个正整数a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标(a,b)以及地毯在x轴和y 轴方向的长度。
第 n+2 行包含两个正整数x 和y,表示所求的地面的点的坐标(x,y)。
【输出】输出文件名为 carpet.out。
输出共 1 行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1。
【输入输出样例 1】【输入输出样例说明】如下图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,覆盖点(2,2)的最上面一张地毯是3 号地毯。
【输入输出样例 2】【输入输出样例说明】如上图,1 号地毯用实线表示,2 号地毯用虚线表示,3 号用双实线表示,点(4,5)没有被地毯覆盖,所以输出-1。
【数据范围】对于 30%的数据,有n≤2;对于 50%的数据,0≤a, b, g, k≤100;对于 100%的数据,有0≤n≤10,000,0≤a, b, g, k≤100,000。
【一句话题意】给定n个按顺序覆盖的矩形,求某个点最上方的矩形编号。
【考察知识点】枚举【思路】好吧我承认看到图片的一瞬间想到过二维树状数组和二维线段树。
置答案ans=-1,按顺序枚举所有矩形,如果点在矩形内则更新ans。
注意题中给出的不是对角坐标,实际上是(a,b)与(a+g,b+k)。
过河【问题描述】在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。
在桥上有一些石子,青蛙很讨厌踩在这些石子上。
由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点: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 位置最少需要踩到的石子数。
NOIP 19981.火车从始发站(称为第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=KLE+E=KV根据这些规则可推导出:L=0,K=1,V=2,E=3同时可以确定该表表示的是4进制加法NOIP 1999第一题拦截导弹某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。
但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。
某天,雷达捕捉到敌国的导弹来袭。
由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
样例:INPUTOUTPUT389207155300299170158656(最多能拦截的导弹数)2(要拦截所有导弹最少要配备的系统数)输入:a ,n ,m 和x输出:从x 站开出时车上的人数。
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种。
数据输入的方式为:NP1(颜色,为一个字母)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程序要求:给出第四层与第三层的数据后,将第一、二层的每块积木标上相应的数据,并输出整个完整的积木图及计算公式。
全国信息学奥林匹克分区联赛(NOIP)复赛提高组试题第一届全国信息学奥林匹克分区联赛(NOIP1995)复赛试题(提高组竞赛用时:3.5小时)1、编码问题设有一个数组A:ARRAY[0..N-1]OFINTEGER;数组中存放的元素为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种。
数据输入的方式为:NP1(颜色,为一个字母)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程序要求:给出第四层与第三层的数据后,将第一、二层的每块积木标上相应的数据,并输出整个完整的积木图及计算公式。
全国信息学奥林匹克联赛(2014)复赛提高组11.生活大爆炸版石头剪刀布()【问题描述】石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。
如果两个人出拳一样,则不分胜负。
在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。
升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。
蜥蜴人:《星际迷航》中的反面角色。
这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。
现在,小A和小B尝试玩这种升级版的猜拳游戏。
已知他们的出拳都是有周期性规律的,但周期长度不一定相等。
例如:如果小A以“石头-布-石头-剪刀-蜥蜴人-斯波克”长度为6的周期出拳,那么他的出拳序列就是“石头-布-石头-剪刀-蜥蜴人-斯波克-石头-布-石头-剪刀-蜥蜴人-斯波克-……”,而如果小B 以“剪刀-石头-布-斯波克-蜥蜴人”长度为5的周期出拳,那么他出拳的序列就是“剪刀-石头-布-斯波克-蜥蜴人-剪刀-石头-布-斯波克-蜥蜴人-……”已知小A和小B一共进行N次猜拳。
每一次赢的人得1分,输的得0分;平局两人都得0分。
现请你统计N次猜拳结束之后两人的得分。
【输入】输入文件名为。
第一行包含三个整数:N,,,分别表示共进行N次猜拳、小A出拳的周期长度,小B出拳的周期长度。
数与数之间以一个空格分隔。
第二行包含个整数,表示小A出拳的规律,第三行包含个整数,表示小B出拳的规律。
其中,0表示“剪刀”,1表示“石头”,2表示“布”,3表示“蜥蜴人”,4表示“斯波克”。
数与数之间以一个空格分隔。
【输出】输出文件名为。
输出一行,包含两个整数,以一个空格分隔,分别表示小A、小B的得分。
【输入输出样例1】【输入输出样例2】【数据说明】对于100%的数据,0 < N ≤200,0 < ≤200,0< ≤200。
2.联合权值()【问题描述】无向连通图G有n个点,1条边。
点从1到n依次编号,编号为i的点的权值为,每条边的长度均为1。
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<x,序列A的第i个元素A i和序列B的第i个元素B i相同。
⚫序列A的第x个元素的值小于序列B的第x个元素的值。
全国信息学奥林匹克联赛(NOIP2012)复赛提高组Day1试题day1CCF 全国信息学奥林匹克联赛(NOIP2012)复赛提高组(请选手务必仔细阅读本页内容)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int ,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU Intel Core2 Quad Q8200 2.33GHz, 内存2G ,上述时限以此配置为准。
4、特别提醒:评测在NOI Linux 下进行。
1.Vigenère密码(vigenere.cpp/c/pas)【问题描述】16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法——Vigenère密码。
Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用。
在密码学中,我们称需要加密的信息为明文,用M表示;称加密后的信息为密文,用C表示;而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为k。
在Vigenère密码中,密钥k是一个字母串,k=k1k2…k n。
当明文M=m1m2…m n 时,得到的密文C=c1c2…c n,其中c i=m i?k i,运算?的规则如下表所示:【输入】输入文件名为vigenere.in。
输入共2行。
第一行为一个字符串,表示密钥k,长度不超过100,其中仅包含大小写字母。
第二行为一个字符串,表示经加密后的密文,长度不超过1000,其中仅包含大小写字母。
【输出】输出文件名为vigenere.out。
输出共1行,一个字符串,表示输入密钥和密文所对应的明文。
对于100%的数据,输入的密钥的长度不超过100,输入的密文的长度不超过1000,且都仅包含英文字母。
2.国王游戏(game.cpp/c/pas)【问题描述】恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏。
CCF全国信息学奥林匹克联赛(NOIP2013)复赛提高组 day2(请选手务必仔细阅读本页内容)注意事项: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.积木大赛(block.cpp/c/pas)【题目描述】春春幼儿园举办了一年一度的“积木大赛”。
今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是ℎi。
在搭建开始之前,没有任何积木(可以看成n块高度为0的积木)。
接下来每次操作,小朋友们可以选择一段连续区间[L,R],然后将第L块到第R块之间(含第L块和第R块)所有积木的高度分别增加1。
小M是个聪明的小朋友,她很快想出了建造大厦的最佳策略,使得建造所需的操作次数最少。
但她不是一个勤于动手的孩子,所以想请你帮忙实现这个策略,并求出最少的操作次数。
【输入】输入文件为block.in输入包含两行,第一行包含一个整数n,表示大厦的宽度。
第二行包含n个整数,第i个整数为ℎi。
【输出】输出文件为block.out仅一行,即建造所需的最少操作数。
【样例解释】其中一种可行的最佳方案,依次选择[1,5] [1,3] [2,3] [3,3] [5,5]【数据范围】对于30%的数据,有1≤n≤10;对于70%的数据,有1≤n≤1000;对于100%的数据,有1≤n≤100000,0≤ℎi≤10000。
(flower.cpp/c/pas)【问题描述】花匠栋栋种了一排花,每株花都有自己的高度。
花儿越长越大,也越来越挤。
NOIP2018复赛提高组Day1试题CCF全国信息学奥林匹克联赛(NOIP2018)复赛提高组 day1(请选手务必仔细阅读本页内容)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:Intel(R) Core(TM) i7-****************,内存32GB。
上述时限以此配置为准。
4、只提供Linux格式附加样例文件。
5、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。
1.铺设道路(road.cpp/c/pas)【问题描述】春春是一名道路工程师,负责铺设一条长度为n的道路。
铺设道路的主要工作是填平下陷的地表。
整段道路可以看作是n 块首尾相连的区域,一开始,第i块区域下陷的深度为d i。
春春每天可以选择一段连续区间[L,R],填充这段区间中的每块区域,让其下陷深度减少1。
在选择区间时,需要保证,区间内的每块区域在填充前下陷深度均不为0。
春春希望你能帮他设计一种方案,可以在最短的时间内将整段道路的下陷深度都变为0。
【输入格式】输入文件名为road.in。
输入文件包含两行,第一行包含一个整数n,表示道路的长度。
第二行包含n个整数,相邻两数间用一个空格隔开,第i个整数为d i。
【输出格式】输出文件名为road.out。
输出文件仅包含一个整数,即最少需要多少天才能完成任务。
road/road1.in road/road1.ans【样例解释】一种可行的最佳方案是,依次选择:[1,6]、[1,6]、[1,2]、[1,1]、[4,6]、[4,4]、[4,4]、[6,6]、[6,6]。
【输入输出样例2】见选手目录下的road/road2.in和road/road2.ans。
【数据规模与约定】对于 30% 的数据,1≤n≤10 ;对于 70% 的数据,1≤n≤1000 ;对于 100% 的数据,1≤n≤100000 ,0≤d i≤10000。
NOI’ 95“同创杯”全国青少年信息学(计算机)奥林匹克竞赛分区联赛复赛试题(高中组)(上机编程,完成时间:210 分钟)<1>编码问题:设有一个数组A:ARRAY[0..N-1] OF INTEGER;数组中存放的元素为0~N-1 之间的整数,且A[i]≠ A[j](当i≠ j时)。
例如: N=6 时,有:此时,数组 A 的编码定义如下:A[0] 的编码为0;A[i] 的编码为:在A[0] ,A[1]∴上面数组 A 的编码为:A= ( 4,3, 0, 5,1, 2),, A[i-1] 中比 A[i] 的值小的个数(B= (0, 0,0,3,1, 2)i=1 ,2,, N-1 )程序要求解决以下问题:①给出数组 A 后,求出其编码。
②给出数组 A 的编码后,求出 A 中的原数据。
<2> 灯的排列问题:设在一排上有 N 个格子( N≤ 20),若在格子中放置有不同颜色的灯,每种灯的个数记为 N 1, N2, N k( k 表示不同颜色灯的个数)。
放灯时要遵守下列规则:①同一种颜色的灯不能分开;②不同颜色的灯之间至少要有一个空位置。
例如: N=8 (格子数)R=2 (红灯数)B=3 (蓝灯数)放置的方法有:R-B 顺序R R B B BR R B B BR R B B BR R B B BR R B B BR R B B BB-R顺序B B B BBBBBBBBBBBBBBR RRRBRRRRRRRR放置的总数为12 种。
数据输入的方式为:NP1(颜色,为一个字母)P2N1(灯的数量)N2Q(结束标记, Q 本身不是灯的颜色)程序要求:求出一种顺序的排列方案及排列总数。
<3> 设有一个四层的积木块,1~ 4 层积木块的数量依次为:5, 6,7, 8如下图所示放置:815851691423414326其中,给出第三层与第四层所标示的数字,并已知第三层的数据是由第四层的数据计算出来的。
计算的方法是:第三层的某个数据 A 是由第四层相邻的两个数据 B, C 经过某种计算后产生的:AB C计算所用到的计算符为:+,-,,且无优先级之分(自左向右计算),运算符最多为2个。
如: 3+4 5=35 5 4+3=23可以看出,上图中的第三层的数据是由第四层的数据用以下计算公式计算出来的:A=B C+B也就是: 8=2 3+2 , 15=3 4+3, 14=26+2程序要求:给出第四层与第三层的数据后,将第一、二层的每块积木标上相应的数据,完整的积木图及计算公式。
并输出整个① 输入数据不存在出错的情况,同时也不会超过整数的范围。
② 计算时可允许出现以下情况:A=BA=B B+B(即可理解为运算符的个数为零)(即全部由 B 产生)第二届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题(高中组竞赛用时: 3 小时)1.比赛安排( 20 分)设有有 2 n( n<=6)个球队进行单循环比赛,计划在 2 n–1 天内完成,每个队每天进行一场比赛。
设计一个比赛的安排,使在 2 n–1 天内每个队都与不同的对手比赛。
例如 n=2 时的比赛安排:队 1 2 3 4比赛1==23==4一天1==32==4二天1==42==3三天2.数制转换(20 分)设有一个字符串A$ 的结构为:A$=’ m<n>p’其中 m 为数字串(长度 <=20),而 n,p 均为 1 或 2 位的数字串(其中所表达的内容在2-10之间)。
程序要求:从键盘上读入A$ 后(不用正确性检查),将 A$ 中的数字串m(n 进制 ),以 p 进制的形式输出。
例如: A$=’ 48<10>8 ’其意义为:将10 进制数 48,转换成8 进制数输出。
输出结果为:48<10>=60<8>4.挖地雷( 30 分)在一个地图上有 N 个地窖( N<=20 ),每个地窖中埋有一定数量的地雷。
同时,给出地窖之间的连接路径。
例如:V1V2V3V4V 5[题目要求 ]当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。
设计一个挖地雷的方案,使某人能挖到最多的地雷。
输入格式:N:(表示地窖的个数)W1, W2,W3, W N(表示每个地窖中埋藏的地雷数量)A 12.A1N地窖之间连接路径(其中Aij =1表示地窖 i,jA 23..A 2N之间是否有通路:通Aij=1, 不通 Aij==0 )..A N-1N输出格式:K 1--K 2--.K V(挖地雷的顺序)MAX(挖地雷的数量)例如:⑩-------- ⑧④-----⑦ -------⑥其输入格式为:输出:51–3-4-510, 8, 4,7, 6max=2711100001114.砝码称重( 30 分)设有 1g、 2g、 3g、 5g、 10g、 20g 的砝码各若干枚(其总重<=1000),要求:输入方式: a1a2a3a4a5a6(表示 1g 砝码有 a1 个, 2g 砝码有 a2 个,, 20g 砝码有 a6 个)输出方式: Total=N(N 表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况)如输入: 1_1_0_0_0_0(注:下划线表示空格)输出: TOTAL=3表示可以称出1g, 2g, 3g 三种不同的重量。
第三届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题(高中组竞赛用时: 3 小时)1.在 N*N 的棋盘上( 1≤ N≤ 10),填入 1, 2,, N*N 共 N*N 个数,使得任意两个相邻的数之和为素数。
( 30%)例如:当N=2 时,有:其相邻数的和为素数的有:121+2 ,1+4 , 4+3, 2+343当 N=4 时,一种可以填写的方案如下:12111216158513491467103在这里我们约定:左上角的格子里必须填数字1。
程序要求:输入: N;输出:如有多种解,则输出第一行、第一列之和为最小的排列方案;若无解,则输出“ NO!”。
2.代数表达式的定义如下:a字母bc例如,下面的式子是合法的代数表达式:a;a+b*(a+c);a*a/(b+c)下面的式子是不合法的代数表达式:ab;a+a*/(b+c);程序要求:输入:输入一个字符串,以“;”结束,“;”本身不是代数表达式中字符,仅作为结束);输出:若表达式正确,则输出“OK”;若表达式不正确,则输出“ ERROR ”,及错误类型。
错误类型约定:1.式了中出现不允许的字符;2.括号不配对;3.其它错误。
例如:输入:例如:输入:a+(b);a+(b+c*a;输出:输出:OKERROR 23.骑士游历:设有一个 n*m 的棋盘( 2≤ n≤ 50, 2≤m≤ 50),如下图,在棋盘上左下角有一个中国象棋马。
( n,m)马(1,1)马走的规则为:( 1)马走日字;( 2)马只能向右走即如下图如示:任务 1:当 n,m 输入之后,找出一条从左下角到右上角的路径。
例如,输入:n=4, m=4(4,4)(1,1)输出:路径的格式:(1,1) → (2,3)→ (4,4)。
若不存在路径,则输出‘NO ’任务 2:当 n, m 给出之后,同时给出马起点的位置和终点的位置,试找出从起点到终点的所有路径的数目。
例如:(n=10,m=10 ),(1, 5)(起点),(3, 5)(终点)109876543211 2 3 45 6 78 9 10输出: 2(即由( 1,5)到( 3, 5)共有 2 条路径)输入格式: n,m,x1,y1,x2,y2 ( 分别表示n,m,起点坐标,终点坐标输出格式:路径数目(若不存在从起点到终点的路径,输出) 0)第四届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题(高中组竞赛用时: 3 小时)1.火车从始发站(称为第 1 站)开出,在始发站上车的人数为a,然后到达第 2 站,在第 2站有人上、下车,但上、下车的人数相同,因此在第 2 站开出时(即在到达第 3 站之前)车上的人数保持为 a 人。
从第 3 站起(包括第 3 站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1 站),都满足此规律。
现给出的条件是:共有N 个车站,始发站上车的人数为 a,最后一站下车的人数是m(全部下车)。
试问 x 站开出时车上的人数是多少?输入: a, n, m 和 x输出:从x 站开出时车上的人数。
{20%}2.设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如: n=3 时, 3个整数 13, 312, 343 联接成的最大整数为:34331213又如: n=4 时, 4个整数 7, 13, 4,246 联接成的最大整数为:7424613程序输入: nn个数程序输出:联接成的多位数{40%}3.著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字。
例如:{40%}其含义为:+L K V E L+L=L , L+K=K , L+V=V , L+E=EL L K V E K+L=K , K+K=V , K+V=E , K+E=KLK K V E KLE+E=KVV V E KL KKE E KL KK KV根据这些规则可推导出:L=0 , K=1 ,V=2 ,E=3同时可以确定该表表示的是 4 进制加法程序输入:n( n≤ 9)表示行数。
以下 n 行,每行包括n 个字符串,每个字串间用空格隔开。
(字串仅有一个为‘+’号,其它都由大写字母组成)程序输出:① 各个字母表示什么数,格式如:L=0 ,K=1 ,② 加法运算是几进制的。
③ 若不可能组成加法表,则应输出“ERROR !”第五届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题(提高组竞赛用时:3小时)第一题拦截导弹 (28 分 )某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。
但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。
某天,雷达捕捉到敌国的导弹来袭。
由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000 的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
样例:INPUT OUTPUT389 207 155 300 299 170 158 65 6(最多能拦截的导弹数)2(要拦截所有导弹最少要配备的系统数)第二题回文数 (25 分 )若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。