C++算法竞赛难度练习 | 每日更新

随机题单

使用方法:每日写2题,难度在省选~CTSC中的简单题难度。
没有特定的专题,主要目的就是练习思路与知识的熟练度。

[file:///C:/Users/ASUS/Desktop/%E9%9A%8F%E6%9C%BA%E9%A1%B5%E9%9D%A2.html](file:///C:/Users/ASUS/Desktop/%E9%9A%8F%E6%9C%BA%E9%A1%B5%E9%9D%A2.html)

@2024/03/04 [NOI2003] 文本编辑器

题目描述

很久很久以前, D O S 3. x DOS3.x DOS3.x 的程序员们开始对 E D L I N EDLIN EDLIN 感到厌倦。于是,人们开始纷纷改用自己写的文本编辑器⋯⋯

多年之后,出于偶然的机会,小明找到了当时的一个编辑软件。进行了一些简单的测试后,小明惊奇地发现:那个软件每秒能够进行上万次编辑操作(当然,你不能手工进行这样的测试) !于是,小明废寝忘食地想做一个同样的东西出来。你能帮助他吗?

为了明确目标,小明对“文本编辑器”做了一个抽象的定义:

文本:由 0 0 0 个或多个 ASCII 码在闭区间 [ 32 32 32, 126 126 126] 内的字符构成的序列。

光标:在一段文本中用于指示位置的标记,可以位于文本首部,文本尾部或文本的某两个字符之间。

文本编辑器:由一段文本和该文本中的一个光标组成的,支持如下操作的数据结构。如果这段文本为空,我们就说这个文本编辑器是空的。

操作名称输入文件中的格式功能
Move ( k ) \text{Move}(k) Move(k)Move k将光标移动到第 k k k 个字符之后,如果 k = 0 k=0 k=0,将光标移到文本开头
Insert ( n , s ) \text{Insert}(n,s) Insert(n,s)Insert n s在光标处插入长度为 n n n 的字符串 s s s,光标位置不变 n ≥ 1 n\geq1 n1
Delete ( n ) \text{Delete}(n) Delete(n)Delete n删除光标后的 n n n 个字符,光标位置不变, n ≥ 1 n \geq 1 n1
Get ( n ) \text{Get}(n) Get(n)Get n输出光标后的 n n n 个字符,光标位置不变, n ≥ 1 n \geq 1 n1
Prev ( ) \text{Prev}() Prev()Prev光标前移一个字符
Next ( ) \text{Next}() Next()Next光标后移一个字符

你的任务是:

  • 建立一个空的文本编辑器。

  • 从输入文件中读入一些操作并执行。

  • 对所有执行过的 GET 操作,将指定的内容写入输出文件。

输入格式

输入文件 editor.in 的第一行是指令条数 t t t,以下是需要执行的 t t t 个操作。其中:

为了使输入文件便于阅读, Insert 操作的字符串中可能会插入一些回车符, 请忽略掉它们(如果难以理解这句话,可以参照样例) 。

除了回车符之外,输入文件的所有字符的 ASCII 码都在闭区间 [ 32 32 32, 126 126 126] 内。且

行尾没有空格。

这里我们有如下假定:

  • MOVE 操作不超过 50000 50000 50000 个, INSERTDELETE 操作的总个数不超过 4000 4000 4000PREVNEXT 操作的总个数不超过 200000 200000 200000

  • 所有 INSERT 插入的字符数之和不超过 2 M 2M 2M 1 M = 1024 × 1024 1M=1024\times 1024 1M=1024×1024 字节) ,正确的输出文件长度不超过 3 M 3M 3M 字节。

  • DELETE 操作和 GET 操作执行时光标后必然有足够的字符。 MOVEPREVNEXT 操作必然不会试图把光标移动到非法位置。

  • 输入文件没有错误。

对 C++ 选手的提示:经测试,最大的测试数据使用 fstream 进行输入有可能会比使用 stdio 慢约 1 1 1 秒。

输出格式

输出文件 editor.out 的每行依次对应输入文件中每条 Get 指令的输出。

样例 #1

样例输入 #1

15
Insert 26
abcdefghijklmnop
qrstuv wxy
Move 15
Delete 11
Move 5
Insert 1
^
Next
Insert 1
_
Next
Next
Insert 4
.\/.
Get 4
Prev
Insert 1
^
Move 0
Get 22

样例输出 #1

.\/.
abcde^_^f.\/.ghijklmno

@2024/03/04 [NOI2007] 社交网络

题目描述

在社交网络 ( Social Network ) 的研究中,我们常常使用图论概念去解释一些社会现象。不妨看这样的一个问题:
在一个社交圈子里有 n n n 个人,人与人之间有不同程度的关系。我们将这个关系网络对应到一个 n n n 个结点的无向图上,两个不同的人若互相认识,则在他们对应的结点之间连接一条无向边,并附上一个正数权值 c c c c c c 越小,表示两个人之间的关系越密切。我们可以用对应结点之间的最短路长度来衡量两个人 s s s t t t 之间的关系密切程度,注意到最短路径上的其他结点为 s s s t t t 的联系提供了某种便利,即这些结点对于 s s s t t t 之间的联系有一定的重要程度。我们可以通过统计经过一个结点 v v v 的最短路径的数目来衡量该结点在社交网络中的重要程度。考虑到两个结点 A A A B B B 之间可能会有多条最短路径。我们修改重要程度的定义如下:令 C s , t C_{s,t} Cs,t 表示从s到t的不同的最短路的数目, C s , t ( v ) C_{s,t}(v) Cs,t(v) 表示经过 v v v s s s t t t 的最短路的数目;则定义:

$ I(v)=\sum_{s \ne v,t\ne v} \frac{C_{s,t}(v)}{C_{s,t}}$

为结点 v v v 在社交网络中的重要程度。为了使 I ( v ) I(v) I(v) C s , t ( v ) C_{s,t}(v) Cs,t(v) 有意义,我们规定需要处理的社交网络都是连通的无向图,即任意两个结点之间都有一条有限长度的最短路径。现在给出这样一幅描述社交网络的加权无向图,请你求出每一个结点的重要程度。

输入格式

输入第一行有两个整数 n n n m m m ,表示社交网络中结点和无向边的数目。
在无向图中,我们将所有结点从 1 1 1 n n n 进行编号。

接下来 m m m 行,每行用三个整数 a , b , c a , b , c a,b,c 描述一条连接结点 a a a b b b ,权值为 c c c 的无向边。
注意任意两个结点之间最多有一条无向边相连,无向图中也不会出现自环(即不存在一条无向边的两个端点是相同的结点)。

输出格式

输出包括 n n n 行,每行一个实数,精确到小数点后 3 3 3 位。第 i i i 行的实数表示结点 i i i 在社交网络中的重要程度。

样例 #1

样例输入 #1

4 4
1 2 1
2 3 1
3 4 1
4 1 1

样例输出 #1

1.000
1.000
1.000
1.000

提示

https://cdn.luogu.com.cn/upload/pic/1136.png

对于1号结点而言,只有2号到4号结点和4号到2号结点的最短路经过1号结点,而2号结点和4号结点之间的最短路又有2条。因而根据定义,1号结点的重要程度计算为1/2+1/2=1。由于图的对称性,其他三个结点的重要程度也都是1。

对于 50 % 50\% 50% 的数据, n ≤ 10 , m ≤ 45 n \le 10 , m \le 45 n10,m45
对于 100 % 100\% 100% 的数据, n ≤ 100 , m ≤ 4500 n \le 100 , m \le 4500 n100,m4500 ,任意一条边的权值 c c c 是正整数且 1 ⩽ c ⩽ 1000 1 \leqslant c \leqslant 1000 1c1000
所有数据中保证给出的无向图连通,且任意两个结点之间的最短路径数目不超过 1 0 10 10^{10} 1010

@2024/03/05 [BalkanOI2007] Mokia 摩基亚

题目描述

摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统。和其他的定位系统一样,它能够迅速回答任何形如 “用户 C 的位置在哪?” 的问题,精确到毫米。但其真正高科技之处在于,它能够回答形如 “给定区域内有多少名用户?” 的问题。

在定位系统中,世界被认为是一个 w × w w\times w w×w 的正方形区域,由 1 × 1 1\times 1 1×1 的方格组成。每个方格都有一个坐标 ( x , y ) (x, y) (x,y) 1 ≤ x , y ≤ w 1\leq x,y\leq w 1x,yw。坐标的编号从 1 1 1 开始。对于一个 4 × 4 4\times 4 4×4 的正方形,就有 1 ≤ x ≤ 4 1\leq x\leq 4 1x4 1 ≤ y ≤ 4 1\leq y\leq 4 1y4(如图):

https://cdn.luogu.com.cn/upload/pic/17271.png

请帮助 Mokia 公司编写一个程序来计算在某个矩形区域内有多少名用户。

输入格式

有三种命令,意义如下:

命令参数意义
0 0 0 w w w初始化一个全零矩阵。本命令仅开始时出现一次。
1 1 1 x   y   a x\ y\ a x y a向方格 ( x , y ) (x, y) (x,y) 中添加 a a a 个用户。 a a a 是正整数。
2 2 2 x 1   y 1   x 2   y 2 x_1\ y_1\ x_2\ y_2 x1 y1 x2 y2查询 x 1 ≤ x ≤ x 2 x_1\leq x\leq x_2 x1xx2 y 1 ≤ y ≤ y 2 y_1\leq y\leq y_2 y1yy2 所规定的矩形中的用户数量。
3 3 3无参数结束程序。本命令仅结束时出现一次。

输入共若干行,每行有若干个整数,表示一个命令。

输出格式

对所有命令 2 2 2,输出一个一行整数,即当前询问矩形内的用户数量。

样例 #1

样例输入 #1

0 4
1 2 3 3
2 1 1 3 3
1 2 2 2
2 2 2 3 4
3

样例输出 #1

3
5

提示

数据规模与约定

对于 100 % 100\% 100% 的数据,保证:

  • 1 ≤ w ≤ 2 × 1 0 6 1\leq w\leq 2\times 10 ^ 6 1w2×106

  • 1 ≤ x 1 ≤ x 2 ≤ w 1\leq x_1\leq x_2\leq w 1x1x2w 1 ≤ y 1 ≤ y 2 ≤ w 1\leq y_1\leq y_2\leq w 1y1y2w 1 ≤ x , y ≤ w 1\leq x,y\leq w 1x,yw 0 < a ≤ 10000 0<a\leq 10000 0<a10000

  • 命令 1 1 1 不超过 160000 160000 160000 个。

  • 命令 2 2 2 不超过 10000 10000 10000 个。

@2024/03/05 [NOI2011] 兔兔与蛋蛋游戏

题目描述

这些天,兔兔和蛋蛋喜欢上了一种新的棋类游戏。

这个游戏是在一个 n n n m m m 列的棋盘上进行的。游戏开始之前,棋盘上有一个格子是空的,其它的格子中都放置了一枚棋子,棋子或者是黑色,或者是白色。

每一局游戏总是兔兔先操作,之后双方轮流操作,具体操作为:

  • 兔兔每次操作时,选择一枚与空格相邻的白色棋子,将它移进空格。

  • 蛋蛋每次操作时,选择一枚与空格相邻的黑色棋子,将它移进空格。

第一个不能按照规则操作的人输掉游戏。为了描述方便,下面将操作“将第x行第y列中的棋子移进空格中”记为 M ( x , y ) M(x,y) M(x,y)

例如下面是三个游戏的例子。

https://cdn.luogu.com.cn/upload/image_hosting/6wfmhuf2.png

https://cdn.luogu.com.cn/upload/image_hosting/j7vox6n7.png

https://cdn.luogu.com.cn/upload/image_hosting/er1t5wpb.png

最近兔兔总是输掉游戏,而且蛋蛋格外嚣张,于是兔兔想请她的好朋友——你——来帮助她。她带来了一局输给蛋蛋的游戏的实录,请你指出这一局游戏中所有她“犯错误”的地方。

注意:

  • 两个格子相邻当且仅当它们有一条公共边。

  • 兔兔的操作是“犯错误”的,当且仅当,在这次操作前兔兔有必胜策略,而这次操作后蛋蛋有必胜策略。

输入格式

输入的第一行包含两个正整数 n , m n,m n,m

接下来 n n n 行描述初始棋盘。其中第 i i i 行包含 m m m 个字符,每个字符都是大写英文字母 X、大写英文字母 O 或点号 . 之一,分别表示对应的棋盘格中有黑色棋子、有白色棋子和没有棋子。其中点号 . 恰好出现一次。

接下来一行包含一个整数 k k k 1 ≤ k ≤ 1000 1\leq k\leq 1000 1k1000) ,表示兔兔和蛋蛋各进行了 k k k 次操作。

接下来 2 k 2k 2k 行描述一局游戏的过程。其中第 2 i − 1 2i - 1 2i1 行是兔兔的第 i i i 次操作(编号为 i i i 的操作) ,第 2 i 2i 2i 行是蛋蛋的第 i i i 次操作。每个操作使用两个整数 x , y x,y x,y 来描述,表示将第 x x x 行第 y y y 列中的棋子移进空格中。

输入保证整个棋盘中只有一个格子没有棋子, 游戏过程中兔兔和蛋蛋的每个操作都是合法的,且最后蛋蛋获胜。

输出格式

输出文件的第一行包含一个整数 r r r,表示兔兔犯错误的总次数。

接下来 r r r 行按递增的顺序给出兔兔“犯错误”的操作编号。其中第 i i i 行包含一个整数 a i a_i ai 表示兔兔第 i i i 个犯错误的操作是他在游戏中的第 a i a_i ai 次操作。

样例 #1

样例输入 #1

1 6 
XO.OXO 
1 
1 2 
1 1

样例输出 #1

1
1

样例 #2

样例输入 #2

3 3 
XOX 
O.O 
XOX 
4 
2 3 
1 3 
1 2 
1 1 
2 1 
3 1 
3 2 
3 3

样例输出 #2

0

样例 #3

样例输入 #3

4 4 
OOXX 
OXXO 
OO.O 
XXXO 
2 
3 2 
2 2 
1 2 
1 3

样例输出 #3

2
1
2

提示

对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 40 1\leq n\leq 40 1n40 1 ≤ m ≤ 40 1 \leq m\leq 40 1m40 1 ≤ k ≤ 1000 1\leq k\leq 1000 1k1000

测试点编号 n n n m m m
1 , 2 1,2 1,2 n = 1 n=1 n=1 1 ≤ m ≤ 20 1\leq m\leq 20 1m20
3 3 3 n = 3 n=3 n=3 m = 4 m=4 m=4
4 , 5 4,5 4,5 n = 4 n=4 n=4 m = 4 m=4 m=4
6 , 7 6,7 6,7 n = 4 n=4 n=4 m = 5 m=5 m=5
8 8 8 n = 3 n=3 n=3 m = 7 m=7 m=7
9 ∼ 14 9\sim 14 914 n = 2 n=2 n=2 1 ≤ m ≤ 40 1\leq m\leq 40 1m40
15 , 16 15,16 15,16 1 ≤ n ≤ 16 1\leq n\leq 16 1n16 1 ≤ m ≤ 16 1\leq m\leq 16 1m16
17 ∼ 20 17\sim 20 1720 1 ≤ n ≤ 40 1\leq n\leq 40 1n40 1 ≤ m ≤ 40 1\leq m\leq 40 1m40
  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值