随机题单
使用方法:每日写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 n≥1 |
Delete ( n ) \text{Delete}(n) Delete(n) | Delete n | 删除光标后的 n n n 个字符,光标位置不变, n ≥ 1 n \geq 1 n≥1 |
Get ( n ) \text{Get}(n) Get(n) | Get n | 输出光标后的 n n n 个字符,光标位置不变, n ≥ 1 n \geq 1 n≥1 |
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 个,INSERT
和DELETE
操作的总个数不超过 4000 4000 4000,PREV
和NEXT
操作的总个数不超过 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
操作执行时光标后必然有足够的字符。MOVE
、PREV
、NEXT
操作必然不会试图把光标移动到非法位置。 -
输入文件没有错误。
对 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
提示
对于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
n≤10,m≤45。
对于
100
%
100\%
100% 的数据,
n
≤
100
,
m
≤
4500
n \le 100 , m \le 4500
n≤100,m≤4500 ,任意一条边的权值
c
c
c 是正整数且
1
⩽
c
⩽
1000
1 \leqslant c \leqslant 1000
1⩽c⩽1000 。
所有数据中保证给出的无向图连通,且任意两个结点之间的最短路径数目不超过
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 1≤x,y≤w。坐标的编号从 1 1 1 开始。对于一个 4 × 4 4\times 4 4×4 的正方形,就有 1 ≤ x ≤ 4 1\leq x\leq 4 1≤x≤4, 1 ≤ y ≤ 4 1\leq y\leq 4 1≤y≤4(如图):
请帮助 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 x1≤x≤x2, y 1 ≤ y ≤ y 2 y_1\leq y\leq y_2 y1≤y≤y2 所规定的矩形中的用户数量。 |
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 1≤w≤2×106。
-
1 ≤ x 1 ≤ x 2 ≤ w 1\leq x_1\leq x_2\leq w 1≤x1≤x2≤w, 1 ≤ y 1 ≤ y 2 ≤ w 1\leq y_1\leq y_2\leq w 1≤y1≤y2≤w, 1 ≤ x , y ≤ w 1\leq x,y\leq w 1≤x,y≤w, 0 < a ≤ 10000 0<a\leq 10000 0<a≤10000。
-
命令 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)。
例如下面是三个游戏的例子。
最近兔兔总是输掉游戏,而且蛋蛋格外嚣张,于是兔兔想请她的好朋友——你——来帮助她。她带来了一局输给蛋蛋的游戏的实录,请你指出这一局游戏中所有她“犯错误”的地方。
注意:
-
两个格子相邻当且仅当它们有一条公共边。
-
兔兔的操作是“犯错误”的,当且仅当,在这次操作前兔兔有必胜策略,而这次操作后蛋蛋有必胜策略。
输入格式
输入的第一行包含两个正整数 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 1≤k≤1000) ,表示兔兔和蛋蛋各进行了 k k k 次操作。
接下来 2 k 2k 2k 行描述一局游戏的过程。其中第 2 i − 1 2i - 1 2i−1 行是兔兔的第 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 1≤n≤40, 1 ≤ m ≤ 40 1 \leq m\leq 40 1≤m≤40, 1 ≤ k ≤ 1000 1\leq k\leq 1000 1≤k≤1000。
测试点编号 | 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 1≤m≤20 |
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 9∼14 | n = 2 n=2 n=2 | 1 ≤ m ≤ 40 1\leq m\leq 40 1≤m≤40 |
15 , 16 15,16 15,16 | 1 ≤ n ≤ 16 1\leq n\leq 16 1≤n≤16 | 1 ≤ m ≤ 16 1\leq m\leq 16 1≤m≤16 |
17 ∼ 20 17\sim 20 17∼20 | 1 ≤ n ≤ 40 1\leq n\leq 40 1≤n≤40 | 1 ≤ m ≤ 40 1\leq m\leq 40 1≤m≤40 |