NOIP2015提高组复赛试题Day2
noip2015普及组复赛试题

noip2015普及组复赛试题题目一:矩阵运算给定一个n阶方阵A(1 ≤ n ≤ 100),求A的所有指定行指定列删除后得到的新矩阵的行列式。
输入格式:输入第一行包含一个整数n,表示方阵的阶数。
接下来n行,每行包含n个整数,表示方阵A的元素。
接下来一行包含两个整数,表示要删除的行和列的序号。
输出格式:输出一个整数,表示新矩阵的行列式的值。
题目要求:首先,我们需要编写一个能够计算矩阵行列式的函数,然后根据题意进行修改,使其能够处理删除指定行列后的新矩阵,并返回新矩阵的行列式的值。
算法思路:我们可以使用拉普拉斯展开定理来计算矩阵行列式的值。
首先定义一个变量result,初始化为0。
然后遍历矩阵的第一行元素,对于第i 个元素,根据其正负性,计算其余元素组成的(n-1)阶子矩阵的行列式的值,并递归调用自身。
最后将每个元素计算得到的行列式值乘以其对应的元素,累加到result上。
然后根据题目要求,在计算每个元素对应的子矩阵时,判断是否需要删除指定的行列。
如果需要删除,则直接跳过该行列,否则继续计算。
代码如下:```pythondef determinant(matrix):n = len(matrix)if n == 1:return matrix[0][0]result = 0for i in range(n):if n > 2:sub_matrix = [row[:i] + row[i+1:] for row in matrix[1:]]else:sub_matrix = matrix[1:]det = determinant(sub_matrix)result += (-1) ** i * matrix[0][i] * detreturn resultn = int(input())matrix = []for _ in range(n):row = list(map(int, input().split()))matrix.append(row)row, col = map(int, input().split())matrix = [matrix[i][:col] + matrix[i][col+1:] for i in range(row)] # 删除指定列matrix = matrix[:row] + matrix[row+1:] # 删除指定行result = determinant(matrix)print(result)```题目二:水果分配小明和他的朋友们买了n个水果,其中有x个苹果和y个香蕉。
NOIP2015提高组复赛试题

【输入输出样例1】 substring.in
6 3 1
aabaab
aab
substring.out
互
【输入输出样例2】
substring.in
632
aabaab
aab
substring.out
t
【输入输出样例说明】
所有合法方案如下∶(加下划线的部分表示取出的子串)
样例1∶aab aab / aab aab
测试点编号
“工
区
[3
问
100 仰
[100
100 100
100
区el
吕=I
亡
13
二
[15
100 二
100 [15
10 [16
[10
10
[1187
K 闷
了89
10
100
100
100
100
八闷1闪2
100 13
16 18
邻20
10 [19
10
10
分21
10有的手牌都是随机生成的。
1.若(K-1)在第一行但不在最后一列,则将K填在最后一行,(K-1)所在列
的右一列;
2. 若(K-1)在最后一列但不在第一行,则将K填在第一列,(K-1)所在行的上
一行∶
3. 若(K-1)在第一行最后一列,则将K填在(K-1)的正下方∶
4.若(K-1)既不在第一行,也不在最后一列,如果(K-1)的右上方还未填数,
的位置不同也认为是不同的方案。
【输入格式】
第一行是三个正整数n,m,k,分别表示字符串A的长度,字符串B的长度,以及问
题描述中所提到的k,每两个整数之间用一个空格隔开。
NOIP2015提高组day1第二题解题报告

NOIP2015提高组day1第二题解题报告NOIP2015提高组复赛Day1第二题解题报告By 某蒟蒻zrw1.题目大概描述(因为写的时候题目还没放出来)几个小盆友们在传递自己的信息(生日),并且每个小盆友只会把自己知道的信息传给唯一的一个人【但是自己可以收到很多信息,并会在收到信息的下一轮把这些信息传给那个唯一的人】(单相思233333),问多少轮后自己会收到自己一开始传递出去的自己的信息。
输入:第一行一个整数n,表示有n个人接下来n行,每行一个数j,设这是除第一行外的第i行,那么j 表示第i个人只会把信息传给第j个人。
输出:一个整数,表示最少几轮后自己的信息会回到自己手中。
样例输入:52 4 23 1样例输出:3数据规模:100% n<=200000 60% n<=2500 30% 记不住了……2.大概需要什么样的算法根据数据规模,我们可以大概判断需要多少效率的算法,甚至有的时候可以猜出这题用的是什么算法。
对于本题来说,60%大概就是O(n^2)的算法了,一般是裸的暴力回溯或者是暴力广搜,也有用floyd的(我是从NOIP吧上看到的)。
如果要AC的话,算法效率至少要在O(nlogn)以下(log在这里是以2为底不是以10为底)。
然而,本题是有O(n)算法的,下面会讲。
3.我们还是画个图吧(图可能比较难看,但能看就行)画画图,就会知道这是在做一件什么事情了。
以样例数据为例:我们很容易发现,2,3,4,形成了一个环,而1和5,并没有什么卵用……所以在环234中,由于每一轮可以把在上一轮知道的信息传给唯一的下一个人,在234环中,就需要3轮,信息才能传到多画几个图(由于本人很懒,就只画一张特殊情况比较多的小图):(有木有一种贵圈真乱的感觉)我们可以看出来,1,5,6,成了一个环,而2,3,4,8,也成了一个环,7,9,是来打酱油的。
那么对于这两个环来说,因为每一轮可以传递上一轮信息给下一个人,所以显然是1,5,6这个环比较早传完,3轮。
NOIP2015普及组复赛试题讲解(c++版本)

- 16 -
试题分析
BYE
温馨提示:
先理解题目在看题解。
The END
2017. 07. 28
数值加1 } }
d[i][j]=-1;//用-1表示地雷 long l1,l2; for(l1=-1;l1<=1;l1++) for(l2=-1;l2<=1;l2++) { if(d[i+l1][j+l2]!=-1) d[i+l1][j+l2]++; }//边上八个位置的格子不是雷则
if(
} for(i=1;i<=n;i++) { for(j=1;j<=m;j++) d[i][j]==-1) cout<<'*'; else cout<<d[i][j]; cout<<endl; }//输出 return 0;
-3-
第2题 “扫雷游戏”简述
扫雷游戏是一款十分经典的单机小游戏。 在n行m列的雷区中有一些格子含有地雷(称之为地雷格), 其他格子不含地雷(称之为非地雷格)。 玩家翻开一个非地雷格时,该格将会出现一个数字——提 示周围格子中有多少个是地雷格。 游戏的目标是在不翻出任何地雷格的条件下,找出所有的 非地雷格。 现在给出n行m列的雷区中的地雷分布,要求计算出每个非 地雷格周围的地雷格数。 注:一个格子的周围格子包括其上、下、左、右、左上、 左下、右上、右下八个方向上与之直接相邻的格子。
【分析】K的规模比较少,直接用模拟,一天一天发金币。 N天发N枚金币,N递增1,剩余天数K-N 预计时间15-25分钟
-2-
参考程序 C++
NOIP2015提高组复赛试题Day2

CCF 全国信息学奥林匹克联赛(NOIP2015)复赛提高组day2(请选手务必仔细阅读本页内容)一.题目概况二.提交源程序文件名三.编译命令(不包含任何优化开关)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数 main()的返回值类型必须是 int,程序正常结束时的返回值必须是 0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor,2.8GHz,内存 4G,上述时限以此配置为准。
4、只提供 Linux 格式附加样例文件。
5、特别提醒:评测在当前最新公布的 NOI Linux 下进行,各语言的编译器版本以其为准。
1.跳石头(stone.cpp/c/pas)【问题描述】一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。
组委会已经选择好了两块岩石作为比赛起点和终点。
在起点和终点之间,有 N 块岩石(不含起点和终点的岩石)。
在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。
为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。
由于预算限制,组委会至多从起点和终点之间移走 M 块岩石(不能移走起点和终点的岩石)。
【输入格式】输入文件名为 stone.in。
输入文件第一行包含三个整数 L,N,M,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。
接下来 N 行,每行一个整数,第 i 行的整数 Di(0 < Di < L)表示第 i 块岩石与起点的距离。
这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同一个位置。
【输出格式】输出文件名为 stone.out。
输出文件只包含一个整数,即最短跳跃距离的最大值。
【输入输出样例 1 说明】将与起点距离为 2 和 14 的两个岩石移走后,最短的跳跃距离为 4(从与起点距离 17 的岩石跳到距离 21 的岩石,或者从距离 21 的岩石跳到终点)。
NOIP2015年普与组复赛试题讲解(c++版本)

参考程序
➢ #include <iostream>
➢ using namespace std;
➢ int main()
➢{
➢
long d[102][102];
➢
long n,m;
➢
cin>>n>>m;
➢
long i,j;
➢
char ch;
➢
for(i=0;i<=n;i++)
➢
{
➢
for(j=0;j<=m;j++)
确定解题思路
➢ 每一次的最优解必然包含了上一次的最优解,也 就是说只要知道这一轮的最大疲劳值就行了。而 这一次的最大疲劳值也就是找最大能多消耗的疲 劳值。(贪心算法)
➢ 分成两部分:一部分的距离小于已经到达的最远 距离,另一部分大于可以到达的最远距离。
数据结构
➢ 小于最远距离的部分,它们的疲劳增加值就是各 个点的疲劳值,所以用最大堆存储,疲劳值最大 的在最前。
moБайду номын сангаас;
➢}
➢ printf("%d\n",ans);
➢ return 0;
➢}
第4题 “推销员”简述
➢ 阿明是一名推销员,他奉命到螺丝街推销他们公司的产 品。螺丝街是一条死胡同,出口与入口是同一个,街道 的一侧是围墙,另一侧是住户。螺丝街一共有 N 家住户, 第 i 家住户到入口的距离为 Si 米。由于同一栋房子里可 以有多家住户,所以可能有多家住户与入口的距离相等。 阿明会从入口进入,依次向螺丝街的 X 家住户推销产品, 然后再原路走出去。 阿明每走 1 米就会积累 1 点疲劳值, 向第 i 家住户推销产品会积累 Ai 点疲劳值。阿明是工作 狂,他想知道,对于不同的 X,在不走多余的路的前提 下,他最多可以积累多少点疲劳值。
NOIP2015复赛普及组试题

CCF 全国信息学奥林匹克联赛(NOIP2015)复赛普及组(请选手务必仔细阅读本页内容)一.题目概况二.提交源程序文件名三.编译命令(不包含任何优化开关)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor,,内存4G,上述时限以此配置为准。
4、只提供Linux 格式附加样例文件。
5、特别提醒:评测在当前最新公布的NOI Linux 下进行,各语言的编译器版本以其为准。
1. 金币c/pas)国王将金币作为工资,发放给忠诚的骑士。
第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N 天每天收到N 枚金币后,骑士会在之后的连续N+1 天里,每天收到N+1 枚金币。
请计算在前K 天里,骑士一共获得了多少金币。
【输入格式】输入文件名为。
输入文件只有1 行,包含一个正整数K,表示发放金币的天数。
【输出格式】输出文件名为。
输出文件只有1 行,包含一个正整数,即骑士收到的金币数。
【输入输出样例1】【输入输出样例1 说明】骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。
因此一共收到1+2+2+3+3+3=14 枚金币。
【输入输出样例2】【数据说明】对于100%的数据,1 ≤ K ≤ 10,000。
2.扫雷游戏(c/pas)扫雷游戏是一款十分经典的单机小游戏。
在n 行m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。
玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。
NOIP2015年复赛普与组试题

CCF 全国信息学奥林匹克联赛(NOIP2015)复赛普及组(请选手务必仔细阅读本页内容)一.题目概况二.提交源程序文件名三.编译命令(不包含任何优化开关)【问题描述】注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) II x2 240 processor,2.8GHz,内存4G,上述时限以此配置为准。
4、只提供Linux 格式附加样例文件。
5、特别提醒:评测在当前最新公布的NOI Linux 下进行,各语言的编译器版本以其为准。
1. 金币(coin.cpp/c/pas)国王将金币作为工资,发放给忠诚的骑士。
第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N 天每天收到N 枚金币后,骑士会在之后的连续N+1 天里,每天收到N+1 枚金币。
请计算在前K 天里,骑士一共获得了多少金币。
【输入格式】输入文件名为coin.in。
输入文件只有1 行,包含一个正整数K,表示发放金币的天数。
【输出格式】输出文件名为coin.out。
输出文件只有1 行,包含一个正整数,即骑士收到的金币数。
【输入输出样例1】【问题描述】【输入输出样例1 说明】骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。
因此一共收到1+2+2+3+3+3=14 枚金币。
【输入输出样例2】【数据说明】对于100%的数据,1 ≤ K ≤ 10,000。
2.扫雷游戏(mine.cpp/c/pas)扫雷游戏是一款十分经典的单机小游戏。
在n 行m 列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全国信息学奥林匹克联赛(2015)复赛
提高组 2
(请选手务必仔细阅读本页内容)
一.题目概况
二.提交源程序文件名
三.编译命令(不包含任何优化开关)
1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、中函数 ()的返回值类型必须是,程序正常结束时的返回值必须是 0。
3、全国统一评测时采用的机器配置为: () x2 240 ,2.8,内存 4G,上述时限以此配置为准。
4、只提供格式附加样例文件。
5、特别提醒:评测在当前最新公布的下进行,各语言的编译
器版本以其为准。
1.跳石头
()
【问题描述】
一年一度的“跳石头”比赛又要开始了!
这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。
组委会已经选择好了两块岩石作为比赛起点和终点。
在起点和终点之间,有 N 块岩石(不含起点和终点的岩石)。
在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。
为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳跃距离尽可能长。
由于预算限制,组委会至多从起点和终点之间移走 M 块岩石(不能移走起点和终点的岩石)。
【输入格式】
输入文件名为。
输入文件第一行包含三个整数 L,N,M,分别表示起点到终点的距离,起点和终点之间的岩石数,以及组委会至多移走的岩石数。
接下来 N 行,每行一个整数,第 i 行的整数(0 < < L)表示第 i 块岩石与起点的距离。
这些岩石按与起点距离从小到大的顺序给出,且不会有两个岩石出现在同一个位置。
【输出格式】
输出文件名为。
输出文件只包含一个整数,即最短跳跃距离的最大值。
【输入输出样例 1】
【输入输出样例 1 说明】
将与起点距离为 2 和 14 的两个岩石移走后,最短的跳跃
距离为 4(从与起点距离 17 的岩石跳到距离 21 的岩石,或者
从距离 21 的岩石跳到终点)。
【输入输出样例 2】
见选手目录下的 2 和 2。
【数据规模与约定】
对于 20%的数据,0 ≤ M ≤ N ≤ 10。
对于 50%的数据,0 ≤ M ≤ N ≤ 100。
对于 100%的数据,0 ≤ M ≤ N ≤ 50,000,1 ≤ L ≤1,000,000,000。
2.子串
()
【问题描述】
有两个仅包含小写英文字母的字符串A和B。
现在要从字符
串A中取出k个互不重叠的非空子串,然后把这k个子串按照其
在字符串A中出现的顺序依次连接起来得到一个新的字符串,
请问有多少种方案可以使得这个新串与字符串 B 相等?注意:
子串取出的位置不同也认为是不同的方案。
【输入格式】
输入文件名为。
第一行是三个正整数 n,m,k,分别表示字符串 A 的长度,字符串 B 的长度,以及问题描述中所提到的 k,每两个整数之
间用一个空格隔开。
第二行包含一个长度为 n 的字符串,表示字符串A。
第三行包含一个长度为 m 的字符串,表示字符串B。
【输出格式】
输出文件名为。
输出共一行,包含一个整数,表示所求方案数。
由于答案
可能很大,所以这里要求输出答案对 1,000,000,007 取模的
结果。
【输入输出样例 1】
【输入输出样例 2】
【输入输出样例 3】
【输入输出样例说明】
所有合法方案如下:(加下划线的部分表示取出的子串)
样例 1: /
样例 2:a / a / a a / a
b / b / b
样例 3:a a b / a a b / a a a b / a a b
a a
b a a b / a a a b / a a b
【输入输出样例 4】
见选手目录下 4 与 4。
【数据规模与约定】
对于第 1 组数据:1≤n≤500,1≤m≤50,1;
对于第 2 组至第 3 组数据:1≤n≤500,1≤m≤50,2;
对于第 4 组至第 5 组数据:1≤n≤500,1≤m≤50,;
对于第 1 组至第 7 组数据:1≤n≤500,1≤m≤50,
1≤k≤m;
对于第 1 组至第 9 组数据:1≤n≤1000,1≤m≤100,
1≤k≤m;
对于所有 10 组数据:1≤n≤1000,1≤m≤200,1≤k≤m。
3. 运输计划
()
【问题描述】
公元 2044 年,人类进入了宇宙纪元。
L 国有 n 个星球,还有 1 条双向航道,每条航道建立在两
个星球之间,这 1 条航道连通了 L 国的所有星球。
小 P 掌管一家物流公司,该公司有很多个运输计划,每个
运输计划形如:有一艘物流飞船需要从号星球沿最快的宇航路
径飞行到号星球去。
显然,飞船驶过一条航道是需要时间的,
对于航道j,任意飞船驶过它所花费的时间为,并且任意两艘飞
船之间不会产生任何干扰。
为了鼓励科技创新,L 国国王同意小 P 的物流公司参与 L
国的航道建设,即允许小 P 把某一条航道改造成虫洞,飞船驶
过虫洞不消耗时间。
在虫洞的建设完成前小 P 的物流公司就预接了 m 个运输计划。
在虫洞建设完成后,这 m 个运输计划会同时开始,所有飞
船一起出发。
当这 m 个运输计划都完成时,小 P 的物流公司
的阶段性工作就完成了。
如果小 P 可以自由选择将哪一条航道改造成虫洞,试求出
小 P 的物流公司完成阶段性工作所需要的最短时间是多少?
【输入格式】
输入文件名为。
第一行包括两个正整数 n、m,表示 L 国中星球的数量及小
P 公司预接的运输计划的数量,星球从 1 到 n 编号。
接下来 1 行描述航道的建设情况,其中第 i 行包含三个整
数 , 和,表示第 i 条双向航道修建在与两个星球之间,
任意飞船驶过它所花费的时间为。
接下来 m 行描述运输计划的情况,其中第 j 行包含两个正
整数和,表示第 j 个运输计划是从号星球飞往号星球。
【输出格式】
输出文件名为。
共 1 行,包含 1 个整数,表示小 P 的物流公司完成阶段
性工作所需要的最短时间。
【输入输出样例 1】
见选手目录下的 1 与 1。
【输入输出样例 1 说明】
将第 1 条航道改造成虫洞:则三个计划耗时分别为:11、12、11,故需要花费的时间为 12。
将第 2 条航道改造成虫洞:则三个计划耗时分别为:7、15、11,故需要花费的时间为 15。
将第 3 条航道改造成虫洞:则三个计划耗时分别为:4、8、11,故需要花费的时间为 11。
将第 4 条航道改造成虫洞:则三个计划耗时分别为:11、15、5,故需要花费的时间为 15。
将第 5 条航道改造成虫洞:则三个计划耗时分别为:11、10、6,故需要花费的时间为 11。
故将第 3 条或第 5 条航道改造成虫洞均可使得完成阶段性
工作的耗时最短,需要花费的时间为 11。
【样例输入输出 2】
见选手目录下的 2 与 2。
【数据规模与约定】
所有测试数据的范围和特点如下表所示。