第五届图灵杯趣味网络国际邀请赛 - 中级组
今天第五届图灵杯趣味网络国际邀请赛 - 中级组比赛开始了,我也积极参加了,给大家看一看中级组的题:
A 等差数列:
题目描述
给定一个长度为 n 的数列 a。问能否把它划分成两个可以空的子序列,使得这两个子序列都形成等差数列。
输入格式
本题有多组测试数据。
第一行输入一个正整数 T,表示数据组数。
接下来 T 组数据,对于每组测试数据:
第一行一个整数 n,表示点的个数。
接下来一行 n 个正整数 a1,a2,...,an,保证 a1<a2<..<an。
输出格式
对于每组数据,如果可以划分则输出 Yes
,否则输出 No
。注意大小写。
样例
Input 1
4
5
1 2 3 5 7
5
1 3 6 10 15
8
1 2 5 6 9 10 13 14
6
1 4 6 7 8 9
Output 1
Yes
No
Yes
Yes
提示
对于 100% 的数据,保证 1≤∑n≤5×10^5,且 1≤a1<a2<...<an≤10^9。
Subtask1 (5 pts) : n≤4。
Subtask2 (20 pts) : an≤15。
Subtask3 (20 pts) : an≤n+2。
Subtask4 (25 pts) : ∑n≤5000。
Subtask5 (30 pts) : 无特殊限制。
B 鱼棋:
题目描述
鱼棋是一种老少皆宜的单人棋类游戏。在鱼棋中,玩家拥有一张 N×M 的棋盘,其中第 i 行的第 j 个格子表示为 (i,j)(1≤i≤N,1≤j≤M)。玩家需要操控一枚棋子经过若干次移动到达终点。每个格子可能是可以行走的自由格子,或不能行走的障碍格子。
在鱼棋中,共有以下四种可能的棋子,分别为王(K)、马(N)、车(R)与象(B),每个棋子可以按照以下规则进行行棋:
-
王(K):王可以走到与它相邻的八个格子中的任意一个(如下图所示)。但是如果对应的格子超出了棋盘的边界或被障碍物阻挡,则不可以移动到对应的格子。
王可以移动到的位置,其中王的位置由蓝色格子标记,可移动的位置由绿色格子标记。
-
马(N):马的走法是走"日"字,或英文字母大写的"L"形:即先向左(或右)走1格,再向上(或下)走2格;或先向左(或右)走2格,再向上(或下)走1格(如下图所示)。但是如果对应的格子超出了棋盘的边界或被障碍物阻挡,则不可以移动到对应的格子。
马可以移动到的位置,其中马的位置由蓝色格子标记,可移动的位置由绿色格子标记。
-
车(R):车可以走到与它在同一行或同一列的任何格子,但是中间不能有任何障碍物阻挡,也不能走出棋盘的边界。
车可以移动到的位置,其中车的位置由蓝色格子标记,可移动的位置由绿色格子标记,而由红色标记的
X
即为障碍物所在的位置。
-
象(B):象可以走到与它在同一条对角线的任何格子,但是中间不能有任何障碍物阻挡,也不能走出棋盘的边界。换句话说,象的走法类似车,但每一步的方向是 45∘ 的斜线。
象可以移动到的位置,其中象的位置由蓝色格子标记,可移动的位置由绿色格子标记,而由红色标记的
X
即为障碍物所在的位置。
在每个回合,玩家可以选择两种操作中的其中一种进行,操作分别为变身或行走。
-
变身:棋手可以选择任意一种棋子(王、马、车、象),将自己的棋子变成这种棋子。
-
行走:棋手可以按照上述行棋规则,进行任意一次移动。
游戏的目标是使用尽可能少的回合数将自己的棋子送达终点。
作为一名萌新鱼棋玩家,青鱼想要知道,对于给定的局面,至少需要进行多少回合的操作,才能达到游戏的目标。
输入格式
每个测试点中包含多组测试数据。
输入的第一行包含一个整数 T,表示测试数据的数量。对于每组测试数据:
输入的第一行包含两个整数 N,M 和一个是 KNRB
四个字符之一的字符 C。其中 N 和 M 描述棋盘的大小,而字符 C 描述初始时青鱼的棋子是哪一种棋子。其中 K
代表王、 N
代表马、 R
代表车、 B
代表象。
接下来 N 行,每行 M 个字符,描述棋盘的状态。其中:
-
字符
.
表示这个格子是一个可以自由通行的格子。 -
字符
S
表示这个格子是游戏的起点(显然,起点也是一个可以自由同行的格子)。 -
字符
T
表示这个格子是游戏的终点(显然,终点也是一个可以自由同行的格子)。 -
字符
#
表示这个格子是一个不可以通行的障碍物。
输入的数据保证棋盘中包含恰好一个格子为字符 S
,恰好一个格子为字符 T
。
输出格式
对于每组测试数据,输出一行一个整数:
-
如果无论如何操作,都不能够到达终点,输出
-1
。 -
否则,输出一行一个整数,表示最小的操作次数。
样例
Input 1
5
1 3 B
S#T
1 5 R
S...T
2 5 K
S.#.T
##.##
9 6 N
S.....
####.#
###.##
##.###
######
#.#.##
##.#..
###.#.
###T#.
6 11 R
S....#....T
###.##.####
##.###.#...
#....#.#...
#####..#...
######.....
Output 1
-1
1
3
10
6
提示
对于所有的测试数据,保证
N⋅M≥2,1≤N,M≤10^6,∑N⋅M≤10^6,1≤T≤10^5。
对于所有的测试数据,保证棋盘中包含恰好一个格子为字符S
,恰好一个格子为字符 T
。
-
子任务 1(10 分):N,M≤4,∑N⋅M≤1,000.
-
子任务 2(20 分):N,M≤50,∑N⋅M≤5,000.
-
子任务 3(20 分):N,M≤200,∑N⋅M≤10^5.
-
子任务 4(20 分): 保证棋盘中不存在障碍物。
-
子任务 5(15 分):∑N⋅M≤10^5.
-
子任务 6(15 分): 没有额外的限制。
C 差值:
题目描述
你有一个 998244353 进制的数字。
一个子串的值就是这个子串看成 998244353 进制的数字后的值。
你需要对 1≤len≤n−1,找到两个起始位置不同的长度为 len 的子串,使得他们差的绝对值最小。
对于每个 len,输出这个最小的差对 1000000007 取模的值。
形式化题意:
定义常量 m=998244353。
给定一个长度为 n 的非负整数序列 a,定义
f(l,r)=∑i=lrai×mr−i
同时定义
g(len)=min1≤l1<l2≤n−len+1|f(l1,l1+len−1)−f(l2,l2+len−1)|
请你对于每个 1≤len≤n−1,求出 g(len) 对 1000000007 取模的值。
输入格式
输入共两行。
第一行输入一个正整数 n。
第二行输入 n 个整数表示序列 a。
输出格式
输出一行,n−1 个数,依次表示 len=1⋯n−1 时的答案模 1000000007 的值。
样例
Input 1
5
1 3 5 2 4
Output 1
1 998244354 647159248 899074099
提示
样例解释
长度为 1 时,f(4,4)−f(1,1)=1;
长度为 2 时,f(2,3)−f(4,5)=998244354;
长度为 3 时,f(3,5)−f(2,4)=2×9982443532−3×998244353+2≡647159248(mod1000000007);
长度为 4 时,f(2,5)−f(1,4)=2×9982443533+f(3,5)−f(2,4)≡899074099(mod1000000007);
本题采用捆绑测试
-
Subtask 1(5 pts):n≤100。
-
Subtask 2(10 pts):n≤500。
-
Subtask 3(10 pts):n≤5000,且保证 ai≤1。
-
Subtask 4(15 pts):n≤5000。
-
Subtask 5(30 pts):n≤105。
-
Subtask 6(30 pts):无特殊限制。
对于 100% 的数据,2≤n≤10^6,0≤ai≤10^6。
D 基础循环结构练习题:
题目描述
现在你有一个长度为 n 的序列 {ai},其中 ai=i,1≤n≤1000。给定一个目标序列 {bi},你需要在进行不超过 2001 次操作后,将 {ai} 变成 {bi},你只能进行如下两种操作:
-
你可以选取一个 int 范围内的非负整数 val,序列 {ai} 将会变为 {ai+val}。
-
你可以选取一个 int 范围内的正整数 val ,序列 {ai} 将会变为 {aimodval}。
可以证明,总有一种方法可以在 2001 次操作内,把 {ai} 变成 {bi}。
输入格式
共两行。
第一行,一个正整数 n,表示序列长度。
第二行,n 个正整数,即为目标序列 {bi}。
输出格式
第一行,请输出一个非负整数 t,表示达到目标序列所需操作次数。
接下来 t 行,每行两个整数,第一个数为你选取的操作类型 opt,第二个数为你选取的参数 val 。
样例
Input 1
3
3 5 2
Output 1
5
1 1
2 3
1 3
2 4
1 2
Input 2
3
6 8 4
Output 2
5
1 2
2 4
1 4
2 5
1 4
提示
对于 100% 的数据,满足 1≤n≤1000,0≤bi<100000。
你需要保证您的输出满足 0≤t≤2001,opt∈{1,2},0≤val≤2147483647 。
本题采用子任务评测,共有 4 个 subtask。
第一个 subtask,满足 n=1,0≤bi<100000,分值为 1 分。
第二个 subtask,满足 1≤n≤3,0≤bi<5,分值为 19 分。
第三个 subtask,满足 1≤n≤1000,0≤bi<100000,额外保证目标序列 {bi} 单调不降,分值为 35 分。
第四个 subtask,满足 1≤n≤1000,0≤bi<100000,分值为 45 分。