第五届图灵杯趣味网络国际邀请赛 - 中级组

本文介绍了第五届图灵杯趣味网络国际邀请赛中级组的题目,包括等差数列、鱼棋、差值、基础循环结构练习题。详细说明了各题的题目描述、输入输出格式、样例及提示,涉及C++编程解题,如判断数列能否划分为等差数列子序列等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第五届图灵杯趣味网络国际邀请赛 - 中级组

今天第五届图灵杯趣味网络国际邀请赛 - 中级组比赛开始了,我也积极参加了,给大家看一看中级组的题:

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},你只能进行如下两种操作:

  1. 你可以选取一个 int 范围内的非负整数 val,序列 {ai} 将会变为 {ai+val}。

  2. 你可以选取一个 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 分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值