【精选资料】NOIP提高组复赛试题与简解转载

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

还有一种办法可以从n到1枚举矩形,一旦在矩形内就直接输出,可能会快一点。不过对于这题的范围什么都是浮云。。

恩,写完这题一看还没过8:30

【时间复杂度】

O(n)

选择客栈

【问题描述】

丽江河边有 n 家很有特色的客栈,客栈按照其位置顺序从1 到n 编号。每家客栈都按照某一种色调进行装饰(总共k 种,用整数0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均有各自的最低消费。

两位游客一起去丽江旅游,他们喜欢相同的色调,又想尝试两个不同的客栈,因此决定分别住在色调相同的两家客栈中。晚上,他们打算选择一家咖啡店喝咖啡,要求咖啡店位于两人住的两家客栈之间(包括他们住的客栈),且咖啡店的最低消费不超过p。

他们想知道总共有多少种选择住宿的方案,保证晚上可以找到一家最低消费不超过p元的咖啡店小聚。

【输入】

输入文件 hotel.in,共n+1 行。

第一行三个整数 n,k,p,每两个整数之间用一个空格隔开,分别表示客栈的个数,色调的数目和能接受的最低消费的最高值;接下来的 n 行,第i+1 行两个整数,之间用一个空格隔开,分别表示i 号客栈的装饰色调和i 号客栈的咖啡店的最低消费。

【输出】

输出文件名为 hotel.out。

输出只有一行,一个整数,表示可选的住宿方案的总数。

【输入输出样例 1】

【输入输出样例说明】

2 人要住同样色调的客栈,所有可选的住宿方案包括:住客栈①③,②④,②⑤,

④⑤,但是若选择住4、5 号客栈的话,4、5 号客栈之间的咖啡店的最低消费是4,而两人能承受的最低消费是3 元,所以不满足要求。因此只有前3 种方案可选。

【数据范围】

对于 30%的数据,有n≤100;

对于 50%的数据,有n≤1,000;

对于 100%的数据,有2≤n≤200,000,0

【一句话题意】

合法区间[l,r]定义:l,r的色调相同,且[l,r]之间存在一个最低消费不超过p。求合法区间总数。

【考察知识点】

二分查找/枚举

【思路】

贴吧神吐槽:CCF收了丽江多少钱?

看完题目后不知所云,再多看几遍,一个O(n^3)的算法有了一点雏形。

用两层循环枚举区间的左右端点l、r,再用一层循环判断区间内是否有可行的咖啡店,累计即可。这个算法思维难度和编程难度都非常低,但是只能过30%的数据,可以作为对拍程序备份。

再仔细思考,发现题中合法区间的限制条件其实很强。首先区间端点的色调必须相同,其次区间内必须要存在一个咖啡店最低消费不超过P。

因此,如果我们用一层循环枚举左端点,并很快找到右端点的可行数,那么题目就能解决了。这里置答案为变量ans,千万注意类型要为int64,昨天我就手抽打模板时直接打了ans:longint,超级大杯具!!!

这里首先要用到区间部分和优化。设sum [i,j]为前i个客栈中,色调为j的客栈总数,那么:

sum[i,j]=sum[i-1,j] (color[i]<>j)

sum[i,j]=sum[i-1,j]+1 (color[i]=j)

这里要用O(NK)的复杂度,是算法的瓶颈所在,不过对于题中的数据范围已经足够了。并且具体实现可以先用数组赋值sum[i]=sum[i-1],然后再为

sum[i,color[i]]+1,应该会快很多。

我们还需要解决的问题就是,已知了L,如何快速找到R的可行范围?

再次注意区间内必须要存在一个咖啡店最低消费不超过P。

因此,如果L就是一个最低消费不超过P的咖啡店,那么R可以取到[L+1,n]中所

有色调为color[L]的客栈,即ans=ans+sum[n,color[L]]-sum[L,color[L]];

如果L是一个最低消费超过P的咖啡店,那么我们要找到一个T∈[L+1,n],且咖啡店T的最低消费不超过P,那么R就可以取到[T,n]中所有色调为color[L]的客栈,即ans=ans+sum[n,color[L]]-sum[T-1,color[L]]。

问题是我们如何找到这个T,其实很简单,二分查找即可。再次预设一个数组,保存所有最低消费不超过P的咖啡店序号,二分查找L即可。注意这里L一定不存在这个数组中,因此找到的应该是最靠近L且大于L的序号,细节处理很重要。找不到返回-1,不用累加ans就是了。

目测写完这题已经只剩1:30时间,且未对拍,第三题鸭梨巨大。

【时间复杂度】

O(nk+nlogn)

mayan 游戏

【问题描述】

Mayan puzzle 是最近流行起来的一个游戏。游戏界面是一个7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上。游戏通关是指在规定的步数内消除所有的方块,消除方块的规则如下:

1、每步移动可以且仅可以沿横向(即向左或向右)拖动某一方块一格:当拖动这一方块时,如果拖动后到达的位置(以下称目标位置)也有方块,那么这两个方块将交换位置(参见输入输出样例说明中的图6 到图7);如果目标位置上没有方块,那么被拖动的方块将从原来的竖列中抽出,并从目标位置上掉落(直到不悬空,参见下面图1 和图2);

2、任一时刻,如果在一横行或者竖列上有连续三个或者三个以上相同颜色的方块,则它们将立即被消除(参见图1 到图3)。

注意:

a) 如果同时有多组方块满足消除条件,几组方块会同时被消除(例如下面图4,

三个颜色为1 的方块和三个颜色为2 的方块会同时被消除,最后剩下一个颜色为

2 的方块)。

b) 当出现行和列都满足消除条件且行列共享某个方块时,行和列上满足消除条件的所有方块会被同时消除(例如下面图5 所示的情形,5 个方块会同时被消

除)。

3、方块消除之后,消除位置之上的方块将掉落,掉落后可能会引起新的方块消除。注意:掉落的过程中将不会有方块的消除。上面图 1 到图3 给出了在棋盘上移动一块方块之后棋盘的变化。棋盘的左下角方块的坐标为(0, 0),将位于(3, 3)的方块向左移动之后,游戏界面从图1 变成图2 所示的状态,此时在一竖列上有连续三块颜色为4 的方块,满足消除条件,消除连续3 块颜色为4 的方块后,上方的颜色为3 的方块掉落,形成图3 所示的局面。

【输入】

输入文件 mayan.in,共6 行。

第一行为一个正整数 n,表示要求游戏通关的步数。

接下来的 5 行,描述7*5 的游戏界面。每行若干个整数,每两个整数之间用一个空格隔开,每行以一个0 结束,自下向上表示每竖列方块的颜色编号(颜色不多

于10 种,从1 开始顺序编号,相同数字表示相同颜色)。输入数据保证初始棋盘中没有可以消除的方块。

【输出】

输出文件名为 mayan.out。

如果有解决方案,输出n 行,每行包含3 个整数x,y,g,表示一次移动,每两

个整数之间用一个空格隔开,其中(x,y)表示要移动的方块的坐标,g 表示移动的方向,1 表示向右移动,-1 表示向左移动。注意:多组解时,按照x 为第一关健字,y 为第二关健字,1优先于-1,给出一组字典序最小的解。游戏界面左下角的坐标为(0,0)。如果没有解决方案,输出一行,包含一个整数-1。

【输入输出样例 1】

mayan.in mayan.out

3

1 0

2 1 0

2 3 4 0

3 1 0

2 4

3

4 0

2 1 1

3 1 1

3 0 1

【输入输出样例说明】

按箭头方向的顺序分别为图 6 到图11

样例输入的游戏局面如上面第一个图片所示,依次移动的三步是:(2,1)处的方格向右移动,(3,1)处的方格向右移动,(3,0)处的方格向右移动,最后可以将棋盘上所有方块消除。

【数据范围】

对于 30%的数据,初始棋盘上的方块都在棋盘的最下面一行;

对于 100%的数据,0 < n≤5。

【一句话题意】

给定一个存在重力的矩阵,每次只能向左或右交换方块,连续3个或以上的方块群会被消除。求操作次数为N时的操作步骤。

【考察知识点】

DFS

【思路】

我实在是忍不住吐槽了,第三题竟然是iPhone上Mayan Puzzle游戏的完全复制。见贴吧此帖子。

威锋上果然有完全题解啊,第14关果然是样例啊有木有!!!人类智力威武,Orz…………..

对于这种完全裸搜索,固定搜索顺序,掐死搜索深度,基本无任何剪枝的题目彻底无语。。。。。

恩,吐槽完毕。

注意注意,第一页描述这题每个测试点时间限制是3S,我当时就震惊了!

首先马上确定这是搜索题目,抛弃所有动规贪心等等。然后锁定DFS,因为题中已经限定搜索深度,BFS是自找MLE。

再确定状态存储方式,我是将输入逆时针转90°后用数组保存,因此坐标之类的要特别注意。

然后,然后就没什么特别的了,搜素顺序题目已经给了。

设过程down(i),表示将第i列的所有方块下沉。设函数clear,分行列清空后返回是否可以清空,这里用到连续区间指针l、r优化,类似前向星分组时的操作。于是:

while clear do

for i:=1 to 5 do

down(i);

注意在此之前如果有方块一交换就往下掉,那么就down交换的那两列。

表示码了200多行代码用了半小时,调试几乎用了1小时,那叫一个蛋疼。。。。【时间复杂度】

无视之,裸搜过几个是几个

Day2

计算系数

【问题描述】

给定一个多项式(ax + by)^k,请求出多项式展开后(x^n)*(y^m)项的系数。

【输入】

输入文件名为 factor.in。

共一行,包含 5 个整数,分别为a,b,k,n,m,每两个整数之间用一个空格隔开。

【输出】

输出文件名为 factor.out。

输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。

【输入输出样例】

【数据范围】

对于 30%的数据,有0≤k≤10;

对于 50%的数据,有a = 1,b = 1;

对于 100%的数据,有0≤k≤1,000,0≤n, m≤k,且n + m = k,0≤a,b≤

1,000,000。

【一句话题意】

我还是喜欢只有一句话的题目。

【考察知识点】

数论/二项式系数/组合

【思路】

这题对高三党很有利,学过组合啊。

其实就算不是高三,学OI的也应该知道二项式系数/组合数/杨辉三角,再不行手推几个也就能知道ans=C(k,n)*(a^n)*(b^m)

这里由于是取模,同余只能用于加和乘。但又要算组合数,而组合数公式里有除法,我因此纠结了很久很久,甚至最后都有写高精加减乘除模的想法。

瞬间灵光一闪,C(k,n)=C(k-1,n)+C(k-1,n-1),行了!

【时间复杂度】

O(k^2)

聪明的质监员

【问题描述】

小 T 是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有n 个矿

石,从1到n 逐一编号,每个矿石都有自己的重量wi 以及价值vi。检验矿产的流程是:

1、给定m 个区间[Li,Ri];

2、选出一个参数W;

3、对于一个区间[Li,Ri],计算矿石在这个区间上的检验值Yi :Yi=sum*sumv。sum为[Li,Ri]之间Wi>=W的矿石数量,sumv为其价值和。

这批矿产的检验结果Y 为各个区间的检验值之和。

若这批矿产的检验结果与所给标准值S 相差太多,就需要再去检验另一批矿产。小T不想费时间去检验另一批矿产,所以他想通过调整参数W 的值,让检验结果尽可能的靠近标准值S,即使得S-Y 的绝对值最小。请你帮忙求出这个最小值。【输入】

输入文件 qc.in。

第一行包含三个整数 n,m,S,分别表示矿石的个数、区间的个数和标准值。

接下来的 n 行,每行2 个整数,中间用空格隔开,第i+1 行表示i 号矿石的重量wi 和价值vi 。

接下来的 m 行,表示区间,每行2 个整数,中间用空格隔开,第i+n+1 行表示区间[Li,Ri]的两个端点Li 和Ri。注意:不同区间可能重合或相互重叠。

【输出】

输出文件名为 qc.out。

输出只有一行,包含一个整数,表示所求的最小值。

【输入输出样例】

【输入输出样例说明】

当 W 选4 的时候,三个区间上检验值分别为20、5、0,这批矿产的检验结果为25,此时与标准值S 相差最小为10。

【数据范围】

对于 10%的数据,有1≤n,m≤10;

对于 30%的数据,有1≤n,m≤500;

对于 50%的数据,有1≤n,m≤5,000;

对于 70%的数据,有1≤n,m≤10,000;

对于 100%的数据,有1≤n,m≤200,000,0 < wi, vi≤106,0 < S≤1012,1≤Li≤Ri≤n。

【一句话题意】

找到一个参数W,使得所有区间检验值之和与S最接近。

【考察知识点】

二分答案/部分和优化

【思路】

我就说一定会考二分答案的嘛。。。

根据检验值之和的定义,很容易发现其值随W递增而递减。那么我们就只要在[0,maxw]中二分出一个参数W,不断逼近S即可。

二分不复杂,但是算检验值之和的时候,注意题中N数据范围,必须要用O(n)的算法得出检验值之和。

和昨天一样,预设两个数组sum[i]和sumv[i]。sum[i]表示前i个矿石中,

w[i]>=W的矿石数量之和;sumv[i]表示前i个矿石中,w[i]>=W的矿石价值之和。那么对于每个区间[l,r],检验值就是(sum[r]-sum[l-1])*(sumv[r]-sum[l1]),累加即可。

目测检验值之和不会爆int64,否则又悲剧了。。。。。

到此时还剩2个小时左右,然后我观察第三题的难度,果断先放弃,去对拍前2题了。事实证明这个策略还是挺对的,至少因为如果我不对拍,第一题爆0。

【时间复杂度】

O((n+m)*log maxw)

观光公交

【问题描述】

风景迷人的小城 Y 市,拥有n 个美丽的景点。由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务。观光公交车在第0 分钟出现在1号景点,随后依次前往2、3、4……n 号景点。从第i 号景点开到第i+1 号景点需要Di 分钟。任意时刻,公交车只能往前开,或在景点处等待。

设共有 m 个游客,每位游客需要乘车1 次从一个景点到达另一个景点,第i 位游客在Ti 分钟来到景点Ai,希望乘车前往景点Bi(Ai

一个乘客的旅行时间,等于他到达目的地的时刻减去他来到出发地的时刻。因为只有一辆观光车,有时候还要停下来等其他乘客,乘客们纷纷抱怨旅行时间太长了。于是聪明的司机ZZ 给公交车安装了k 个氮气加速器,每使用一个加速器,可以使其中一个Di 减1。对于同一个Di 可以重复使用加速器,但是必须保证使用后Di 大于等于0。

那么 ZZ 该如何安排使用加速器,才能使所有乘客的旅行时间总和最小?

【输入】

输入文件名为 bus.in。

第 1 行是3 个整数n, m, k,每两个整数之间用一个空格隔开。分别表示景点数、乘客数和氮气加速器个数。

第 2 行是n-1 个整数,每两个整数之间用一个空格隔开,第i 个数表示从第i

个景点开往第i+1 个景点所需要的时间,即Di。

第 3 行至m+2 行每行3 个整数Ti, Ai, Bi,每两个整数之间用一个空格隔开。

第i+2 行表示第i 位乘客来到出发景点的时刻,出发的景点编号和到达的景点编号。

【输出】

输出文件名为 bus.out。共一行,包含一个整数,表示最小的总旅行时间。

【输入输出样例】

【输入输出样例说明】

对 D2 使用2 个加速器,从2 号景点到3 号景点时间变为2 分钟。

公交车在第 1 分钟从1 号景点出发,第2 分钟到达2 号景点,第5 分钟从2 号景点出发,第7 分钟到达3 号景点。

第 1 个旅客旅行时间 7-0 = 7 分钟。

第 2 个旅客旅行时间 2-1 = 1 分钟。

第 3 个旅客旅行时间 7-5 = 2 分钟。

总时间 7+1+2 = 10 分钟。

【数据范围】

对于 10%的数据,k=0;

对于 20%的数据,k=1;

对于 40%的数据,2 ≤ n ≤ 50,1 ≤ m≤ 1,000,0 ≤ k ≤ 20,0 ≤ Di ≤10,0 ≤ Ti ≤ 500;

对于 60%的数据,1 ≤ n ≤ 100,1 ≤ m≤ 1,000,0 ≤ k ≤ 100,0 ≤ Di ≤100,0 ≤ Ti ≤ 10,000;

对于 100%的数据,1 ≤ n ≤ 1,000,1 ≤ m ≤ 10,000,0 ≤ k ≤ 100,000,0 ≤ Di ≤ 100,0 ≤ Ti ≤ 100,000。

【一句话题意】

给你k个氮气加速器,求乘客的旅行时间最小值。

【考察知识点】

贪心?

【思路】

恩,果断没有思路。

最后还剩1个小时少一点,迅速写了个无任何剪枝DFS搜索,且貌似连计算时间和都搞错了。

杯具!!!!

不过样例过了- -……

【时间复杂度】

random(rp)

NOIP提高组复赛题目

第一题题库

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) NOIP2008 1. 笨小猴 (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。 【输入输出样例1】 【输入输出样例1解释】 单词error 中出现最多的字母r 出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。

2019年NOIP2014提高组复赛试题

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

NOIP2004 提高组试题

第十届全国青少年信息学奥林匹克联赛复赛试题 (提高组 3小时完成) 一、津津的储蓄计划 (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 【样例输出1】 -7 【样例输入2】

NOIP2021复赛提高组模拟试题

NOIP2021复赛提高组模拟试题 ccf全国信息学奥林匹克联赛(noip2021)复赛day1 第二轮CCF国家信息学奥林匹克联盟(noip 2022) 提高组day1 (请仔细阅读本页) 一、题目概况中文题目名称英文题目与子目录名可执行文件名输入文件名输出文件名 每个测试点时限测试点数目每个测试点分值附加样例文件结果比较方式题目类型运行内存 上限 二、提交C++语言的源程序文件名,C语言的源程序文件名,Pascal语言的源程序文件名 三、编译命令(不包含优化开关) 对于C++语言对于C语言对于Pascal语言 注意事项: 1.文件名(程序名和输入/输出文件名)必须使用小写英语。 2、c/c++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。 3.国家统一评估使用的机器配置为cpuamdathlon(TM)64x2dualcorecpu5200+、 2.71ghz和2G内存。以上时限以本配置为准。4.仅提供Linux格式的其他示例文件。 5、特别提醒:评测在noilinux下进行。 6.为了便于评估,请使用您姓名的拼音作为文件夹名称,并将原始程序直接保存在文 件夹中,无需创建新的子文件夹。 g++-opfpf.cpp-g++-otoytoy.cpplmclmgcc-opfpf.c-lmgcc- https://www.360docs.net/doc/5b19344369.html,lmfpcpf.pasfpctoy.pasg++-orunningrunning.cpp-lmgcc- orunningrunning.c- lmfpcrunning.paspf.cpppf.cpf.pastoy.cpptoy.ctoy.pasrunning.cpprunning.crunning .pas斐波那契玩具跑步 pftoyrunningpftoyrunningpf.intoy.inrunning.inpf.outtoy.outrunning.out1s1s1s102 0201055是是是全文比较(忽略行末空格和行尾回车)传统传统传统128mb128mb128mb第1页,共5页 CCF国家信息学奥林匹克联盟(noip2022)半决赛第1天

NOIP2005提高组试题

NOIP2005复赛提高组试题 第十一届全国青少年奥林匹克信息学联赛复赛提高组试题 (提高组三小时完成) 谁拿了最多奖学金(scholar.pas/c/cpp) 【问题描述】 某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同: 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行每行是一位学生的数据,从左向右依次是姓名,期末平均成绩,班级评议成绩,是否是学生干部,是否是西部省份学生,以及发表的论文数。姓名是由大小写英文字母组成的长度不超过20的字符串(不含空格);期末平均成绩和班级评议成绩都是0到100之间的整数(包括0和100);是否是学生干部和是否是西部省份学生分别用一个字符表示,Y表示是,N表示不是;发表的论文数是0到10的整数(包括0和10)。每两个相邻数据项之间用一个空格分隔。【输出文件】 输出文件scholar.out包括三行,第一行是获得最多奖金的学生的姓名,第二行是这名学生获得的奖金总数。如果有两位或两位以上的学生获得的奖金最多,输出他们之中在输入文件中出现最早的学生的姓名。第三行是这N个学生获得的奖学金的总数。 【样例输入】 4 YaoLin 87 82 Y N 0 ChenRuiyi 88 78 N Y 1 LiXin 92 88 N N 0 ZhangQin 83 87 Y N 1 【样例输出】 ChenRuiyi 9000 28700 过河(river.pas/c/cpp)

NOIP2022提高组复赛题解

NOIP2022提高组复赛题解 第一题笨小猴 某题目描述:笨小猴的词汇量很小,所以每次做英语选择题的时候都 很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的 时候选对的几率非常大!这种方法的具体描述如下:假设ma某n是单词 中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母 的出现次数,如果ma某n-minn是一个质数,那么笨小猴就认为这是个LuckyWord,这样的单词很可能就是正确的答案。 输入格式:输入文件word.in只有一行,是一个单词,其中只可能出 现小写字母,并且长度小于100。某输出格式:输出文件word.out共两行,第一行是一个字符串,假设输入的的单词是LuckyWord,那么输出“LuckyWord”,否则输出“NoAnwer”;第二行是一个整数,如果输入单词 是LuckyWord,输出ma某n-minn的值,否则输出0。 样例1输入:error输出:LuckyWord2解释:单词error中出现最多 的字母r出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。 样例2输入:olymipic输出:NoAnwer0解释:单词olympic中出现 最多的字母i出现了2次,出现次数最少的字母出现了1次,2-1=1,1不 是质数。 思路:统计单词中每个字母的出现次数,挑出最多的次数和最少的次 数(不包括0次),相减判断是否为质数即可。判断质数时可以写函数判断,也可以把100以内的质数列成常量数组直接判断,因为单词最多只有100 个字母。需要注意的是输出时的LWNA四个字母要大写。某总结:这是一

道送分题,没有什么难度,需要注意的细节也不多,所以在比赛中是一定 要拿满分的。 参考样程 #include#include#include#defineI_F"word.in "#defineO_F"word.out"uingnamepacetd;tring;hortan;voidInput();voi dSearch();boolPd();voidOutput();intmain(){Input();Search();Outpu t();return0;}voidInput(){iftreamfin(I_F);fin>>;fin.cloe();}voidS earch()//统计字母出现次数{horti,ma某 =0,min=200;hortf[26]={0};for(i=0;i<.length();f[[i++]- 'a']++);for(i=0;i<26;i++)if(f[i]>0){if(f[i]>ma某)ma某 =f[i];if(f[i]=0)3.n 根火柴棍必须全部用上 输入格式:输入文件matche.in共一行,有一个整数n(n<=24)。某 输出格式:输出文件matche.out共一行,表示能拼成的不同等式的数目。

NOIP1999提高组复赛试题

第五届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题 (提高组竞赛用时:3小时) 第一题拦截导弹(28分) 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 样例: INPUT OUTPUT 389 207 155 300 299 170 158 65 6(最多能拦截的导弹数) 2(要拦截所有导弹最少要配备的系统数) 第二题回文数(25分) 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。 例如:给定一个10进制数56,将56加65(即把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 第三题旅行家的预算(27分) 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di、每升汽油价格Pi(i=1,2,……N)。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。

【精选资料】NOIP提高组复赛试题与简解转载

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个按顺序覆盖的矩形,求某个点最上方的矩形编号。 【考察知识点】 枚举 【思路】 好吧我承认看到图片的一瞬间想到过二维树状数组和二维线段树。

第十六届全国青少年信息学奥林匹克联赛复赛试题

第十六届全国青少年信息学奥林匹克联赛复赛试题 (NOIP2010提高组) NOIP2010提高组复赛第一题机器翻译(Trasnlate) 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有软件就会用它进行翻译;如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。 假设内存中有 M 个单元,每单元能存放一个单词和译义。每当软件将一个新单词存入内存前,如果当前内存中已存入的单词数不超过 M-1,软件会将新单词存入一个未使用的内存单元;若内存中已存入 M 个单词,软件会清空最早进入内存的那个单词,腾出单元来,存放新单词。 假设一篇英语文章的长度为 N个单词。给定这篇待译文章,翻译软件需要去外存查找多少次词典?假设在翻译开始前,内存中没有任何单词。 【输入】输入文件名为 translate.in,输入文件共 2 行。每行中两个数之间用一个空格隔开。第一行为两个正整数 M和 N,代表内存容量和文章的长度。第二行为 N 个非负整数,按照文章的顺序,每个数(大小不超过 1000)代表一个英文单词。文章中两个单词是同一个单词,当且仅当它们对应的非负整数相同。 【输出】输出文件 translate.out 共1行,包含一个整数,为软件需要查词典的次数。【数据范围】对于 10%的数据有 M=1,N≤5。00%的数据有 0m then b[a[h-m]]:=false; end;//for writeln(sum); end.//main

NOIP2021提高组复赛试题

CCF全国信息学奥林匹克联赛(NOIP2021)复赛 提高组 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表示“斯波克”。数与数之间以一个空格分隔。 【输出】 输出文件名为rps.out。 输出一行,包括两个整数,以一个空格分隔,别离表示小A、小B的得分。

NOIP2007提高组复赛试题

全国信息学奥林匹克联赛(NOIP2007)复赛 提高组 题目一览 (2007年11月17日 3小时完成) 说明: 1.文件名(程序名和输入输出文件名)必须使用小写 2.C/C++中函数main()的返回值必须是int,程序正常结束时返回值必须是0。 3.全国统一评测时采用的机器参考配置为:CPU 2.0GHz,内存256M。

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

2.字符串的展开 (expand.pas/c/cpp) 【问题描述】 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母H 或数字串替代其中的减号,即,将上面两个子串分别输出为“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只有一行,为展开后的字符串。 【输入输出样例1】 【输入输出样例2】

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

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

第十届全国信息学奥林匹克分区联赛(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

noip2017提高组试题(day1+day2) Word版

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,表示不找零的情况下,小凯用手中的金币不能准确支付的最贵的物品的价值。 【输入输出样例 1】 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历年复赛提高组试题

全国信息学奥林匹克分区联赛(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种。 数据输入的方式为:

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 程序要求: 给出第四层与第三层的数据后,将第一、二层的每块积木标上相应的数据,并输出整个完整的积木图及计算公式。 ①输入数据不存在出错的情况,同时也不会超过整数的范围。 ②计算时可允许出现以下情况: A=B (即可理解为运算符的个数为零) A=B⨯B+B (即全部由B产生)

第12届全国青少年信息学奥林匹克联赛复赛试题(NOIP2006提高组)

第十二届全国青少年信息学奥林匹克 联赛复赛试题 (NOIP2006提高组) 竞赛时间:2006年11月18日上午8:30—11:30 关于竞赛中不同语言使用限制的说明 一.关于使用Pascal语言与编译结果的说明 1.对于Pascal语言的程序,当使用IDE和fpc编译结果不一致时,以fpc的编译结果为准。2.允许使用数学库(uses math子句),以及ansistring。但不允许使用编译开关(最后测试时pascal 的范围检查开关默认关闭:{$R-,Q-,S-}),也不支持与优化相关的选项。 二.关于C++语言中模板使用的限制说明 1.允许使用的部分: 标准容器中的布尔集合,迭代器,串,流。 相关的头文件: 2.禁止使用的部分: 序列:vector,list,deque 序列适配器:stack, queue, priority_queue 关联容器:map, multimap, set, multiset 拟容器:valarray 散列容器:hash_map, hash_set, hash_multimap, hash_multiset 所有的标准库算法 相关头文件:

2 1.能量项链 (energy.pas/c/cpp) 【问题描述】 在Mars 星球上,每个Mars 人都随身佩带着一串能量项链。在项链上有N 颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars 人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m ,尾标记为r ,后一颗能量珠的头标记为r ,尾标记为n ,则聚合后释放的能量为n r m ⨯⨯(Mars 单位),新产生的珠子的头标记为m ,尾标记为n 。 需要时,Mars 人就用吸盘夹住相邻的两颗珠子,通过聚合得到能量,直到项链上只剩下一颗珠子为止。显然,不同的聚合顺序得到的总能量是不同的,请你设计一个聚合顺序,使一串项链释放出的总能量最大。 例如:设N=4,4颗珠子的头标记与尾标记依次为(2,3) (3,5) (5,10) (10,2)。我们用记号⊕表示两颗珠子的聚合操作,(j ⊕k)表示第j ,k 两颗珠子聚合后所释放的能量。则第4、1两颗珠子聚合后释放的能量为: (4⊕1)=10*2*3=60。 这一串项链可以得到最优值的一个聚合顺序所释放的总能量为 ((4⊕1)⊕2)⊕3)=10*2*3+10*3*5+10*5*10=710。 【输入文件】 输入文件energy.in 的第一行是一个正整数N (4≤N ≤100),表示项链上珠子的个数。第二行是N 个用空格隔开的正整数,所有的数均不超过1000。第i 个数为第i 颗珠子的头标记(1≤i ≤N ),当i

NOIP2015提高组复赛试题Day1

全国信息学奥林匹克联赛(2015)复赛 提高组 1 (请选手务必仔细阅读本页内容)一.题目概况 二.提交源程序文件名 三.编译命令(不包含任何优化开关)

注意事项: 1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、中函数 ()的返回值类型必须是,程序正常结束时的返回值必须是 0。 3、全国统一评测时采用的机器配置为: () x2 240 ,2.8,内存 4G,上述时限以此配置为准。 4、只提供格式附加样例文件。 5、特别提醒:评测在当前最新公布的下进行,各语言的编译器版本以其为准。

1.神奇的幻方 () 【问题描述】 幻方是一种很神奇的 N*N 矩阵:它由数字1,2,3, … … , N*N 构成,且每行、每列与两条对角线上的数字之和都相同。 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1 写在第一行的中间。 之后,按如下方式从小到大依次填写每个数K( 2,3, … , N*N ): 1.若(K−1) 在第一行但不在最后一列,则将K填在最后一 行,(K− 1) 所在列的右一列; 2.若(K−1) 在最后一列但不在第一行,则将K填在第一 列,(K− 1) 所在行的上一行; 3.若 (K− 1) 在第一行最后一列,则将K填在 (K− 1) 的正下 方; 4.若(K−1) 既不在第一行,也不在最后一列,如果(K−1) 的右上方还未填数,则将K填在(K−1)的右上方,否则将 K填在 (K− 1) 的正下方 现给定N,请按上述方法构造 N*N 的幻方。 【输入格式】 输入文件名为。 输入文件只有一行,包含一个整数N,即幻方的大小。 【输出格式】 输出文件名为。 输出文件包含N行,每行N个整数,即按上述方法构造出的 N*N的幻方。相邻两个整数之间用单个空格隔开。 【输入输出样例 1】

NOIP2013提高组复赛试题day1+day2

全国信息学奥林匹克联赛(2013)复赛 提高组 1 1.转圈游戏 () 【问题描述】 n 个小伙伴(编号从 0 到 1)围坐一圈玩游戏。按照顺时针方向给 n 个位置编号,从 0 到 1。最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此类推。 游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第m 号位置,第 1 号位置小伙伴走到第 1 号位置,……,依此类推,第n − m号位置上的小伙伴走到第 0 号位置,第1 号位置上的小伙伴走到第 1 号位置,……,第 1 号位置上的小伙伴顺时针走到第1 号位置。 现在,一共进行了 10k 轮,请问 x 号小伙伴最后走到了第几号位置。 【输入】 输入文件名为。 输入共 1 行,包含 4 个整数 n、m、k、x,每两个整数之间用一个空格隔开。 【输出】 输出文件名为。 输出共1 行,包含1 个整数,表示10k 轮后x 号小伙伴所在的

位置编号。 【输入输出样例】 10 3 4 5 5 【数据说明】 对于 30%的数据,0 < k < 7; 对于 80%的数据,0 < k < 107; 对于 100%的数据,1 < n< 1,000,000,0

学科竞赛-NOIP2013提高组复赛试题

NOIP2013提高组复赛试题 CCF 全国信息学奥林匹克联赛(NOIP2013) 复赛 提高组day1 1.转圈游戏 (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 号位置。 现在,一共进行了10^k 轮,请问x 号小伙伴最后走到了第几号位置。 【输入】 输入文件名为circle.in。 输入共1 行,包含4 个整数n、m、k、x,每两个整数之间用一个空格隔开。【输出】 输出文件名为c ircle.out。 输出共1行,包含1个整数,表示10k 轮后x号小伙伴所在的位置编号。 【数据说明】 对于30%的数据,0 对于80%的数据,0 对于100%的数据,1 2.火柴排队(match.cpp/c/pas) 【问题描述】 涵涵有两盒火柴,每盒装有n 根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为:,其中ai 表示第一列火柴中第i 个火柴的高度,bi 表示第二列火柴中第i 个火 柴的高度。 每列火柴中相邻两根火柴的位置都可以交换,请你通过交换使得两列火柴之间的距离最小。请问得到这个最小的距离,最少需要交换多少次?如果这个数字太大,

NOIP2014提高组复赛试题

全国信息学奥林匹克联赛(2014)复赛 提高组 1 1.生活大爆炸版石头剪刀布 () 【问题描述】 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第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表示“斯波克”。数与数之间以一个空格分隔。 【输出】 输出文件名为。

相关文档
最新文档