2023 Xiangtan University Programming Contest
A. 送给世界的礼物
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
魔女宁宁决定送给世界一个礼物,但是她只有 $$$k$$$ 个盒子,第 $$$i$$$ 个盒子上有一个字符串 $$$T_i$$$,同时她有 1 个糖果串 $$$S$$$,从左到右排成一行,每个糖果用一个小写字母表示,她会将糖果串分成 $$$k$$$ 份,并放入每个盒子。她按照如下步骤去放:
  1. 首先宁宁走到第一个盒子前,选择 $$$S$$$ 串的一个前缀(可以为空)$$$P_1$$$,$$$P_1$$$ 是第一个盒子 $$$T_1$$$ 的子串。
  2. 将 $$$P_1$$$ 从 $$$S$$$ 中截断取出,放入第一个盒子。此时 $$$S$$$ 不再保留前缀 $$$P_1$$$
  3. 宁宁走到第二个盒子前,选择 $$$S$$$ 串的一个前缀(可以为空)$$$P_2$$$,$$$P_2$$$ 是第二个盒子 $$$T_2$$$ 的子串。
  4. 将 $$$P_2$$$ 从 $$$S$$$ 中截断取出,放入第二个盒子。此时 $$$S$$$ 不再保留前缀 $$$P_2$$$
  5. 重复上述步骤,按照顺序走完第 $$$3,4,5...k$$$ 个盒子,每次取出的一个前缀 $$$P_i$$$(可以为空),必须是第 $$$i$$$ 个盒子 $$$T_i$$$ 的子串, 并且取完后 $$$S$$$ 不会保留前缀 $$$P_i$$$。
  6. 宁宁走完第 $$$k$$$ 个盒子时,恰好把原本的糖果串放完。
  7. 将糖果放在盒子里之后,宁宁会每个盒子上贴一个数字 $$$b_i$$$,表示放入第 $$$i$$$ 个盒子的糖果串长度。

子串的定义:一个字符串删除任意长度(可以为0)的前缀、后缀之后剩下的字符串。空串是任意字符串的子串。

显然会有很多方式进行选择,魔女宁宁想知道,最后盒子上的数字序列,字典序最小的是哪一种?

形式化的,你需要使得数列 $$$b_1,b_2,b_3...b_k$$$ 字典序最小。注意 $$$b_i \ge 0$$$,也就是说,盒子里可以是空的

例如:

存在四个盒子:$$$ababc$$$ ,$$$ggoppo$$$,$$$fft$$$, $$$wwwwk$$$ 。

糖果串为:$$$baboppowk$$$。

走到第一个盒子时,取出 $$$bab$$$,此时 $$$S$$$ 剩余 $$$oppowk$$$;

走到第二个盒子时,取出$$$oppo$$$,此时 $$$S$$$ 剩余 $$$wk$$$;

第三个时,只能取出空串,此时 $$$S$$$ 剩余 $$$wk$$$;

第四个时,取出 $$$wk$$$,恰好取完,此时 $$$S$$$ 为空;

那么可以将糖果串分为 : $$$bab-oppo-$$$空$$$-wk$$$ 三段(四份)。显然他们是对应四个盒子的子串。

最后的盒子上标上的数字为: $$$3,4,0,2$$$

Input

第一行一个数字 $$$T$$$ ,表示测试组数。

每一个测试组由以下输入组成:

  1. 第一行输入两个整数 $$$k,n$$$ ,$$$k \le 10, n \le 5 \times 10^4$$$
  2. 第二行包括 $$$k$$$ 个字符串 $$$T_1, T_2....T_k$$$ ,表示每个盒子上的字符串, $$$|T| \le 1 \times 10 ^ 5$$$
  3. 第三行包括一个字符串 $$$S$$$,表示糖果串。

保证字符串只存在小写字母,输入的总字符串长度 $$$ \le 2 \times 10 ^ 6$$$

Output

输出 $$$T$$$ 行,每行 $$$k$$$ 个非负整数 $$$b_1,b_2,b_3,\ldots ,b_k$$$ ,用空格隔开,行尾没有多余空格。

你需要保证数列$$$b_1,b_2,b_3,\ldots ,b_k$$$字典序最小。数据保证每个测试组都有解。

Example
Input
5
3 19
iamdata juststructure notstring
datastructurestring
3 8
iiiiii llove yesxtu
ilovextu
3 3
not aurora st
nst
3 15
kids mother people
kidmotherpeople
3 6
bbbb bbbccc dddd
bbbcdd
Output
4 9 6
1 4 3
1 0 2
3 6 6
0 4 2

B. 事关疯狂星期四!
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

疯狂星期四,v me 50!!

每到星期四,zy就像让别人给他$$$50$$$块钱去吃肯德基,而Belmaxi是个大善人,为了能让zy吃到肯德基,他给zy设计了这样一个游戏:

第一天是星期四。接下来的几天里(包括第一天),zy每天上午8点坚持给Belmaxi发$$$5$$$块钱大红包,每到星期四晚上 23:59,Belmaxi就会检查一下,zy是否在此时之前连续7天(包括周四当天)都给他发了红包,如果是,那么Belmaxi就是发给zy一个价值50元的红包;否则Belmaxi只会给zy发一句嘲讽。

经历了 $$$n$$$ 天之后,Belmaxi 翻了聊天记录

Belmaxi 知道哪些天,zy 忘记发他 $$$5$$$ 块钱,他现在给出 zy 忘记发钱的所有日期。Belmaxi 想知道自己的盈亏情况。

Input

第一行一个整数$$$T,(T\le 10^3)$$$

每个样例第一行两个整数$$$n,(n\le 10^{16})$$$,$$$x,(x\le 10^5)$$$,表示经过了$$$n$$$天,有$$$x$$$天zy忘记给钱了

接下来一行$$$x$$$个整数 $$$a_i$$$,表示zy在第 $$$a_i$$$ 天忘记发红包了,保证 $$$a_i$$$ 按照升序给出。

Output

每个样例一个整数,表示Belmaxi的盈亏情况

Example
Input
2
15 2
7 8
16 1
16
Output
15
-25
Note

第一个样例,zy在第七天(星期三,已经连续6天了)忘记给Belmaxi$$$5$$$块钱了,此时Belmaxi已经赚了$$$30$$$元。第八天Belmaxi没收到钱,第九天(星期五)到第15天(星期四),刚好连续7天,zy给Belmaxi$$$35$$$元,Belmaxi给zy$$$50$$$元。Belmaxi净赚$$$30+35-50=15$$$元

第一个样例

C. Markdown表格
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Markdown 是一种轻量级的文本格式,它可以很容易转换HTML,其中表格的语法规则如下:

  1. 使用'|'表示表格列的间隔
  2. 第一行是表头,表头内容为居中对齐
  3. 第二行是表单元格对齐方式,每列单元格的对齐方式,使用若干个'-'组成的一条分割线和':'表示
    • 如果只有分割线,或者在分割线左右都有':',那么为居中对齐;
    • 只有分割线之前有':',那么靠左对齐;
    • 只有分割线之后有':',那么靠右对齐。
  4. 以后的行,每行为一行的单元格

根据Markdown,请按如下格式转换成文本表格:

  1. 用'-'表示横线,'|'表示竖线,'+'表示横竖线的交点
  2. 列宽为当前列最长字符串长度+2
  3. 表头的上下都有行线,表单元格只有最后一行有行线
  4. 对齐方式的输出规则如下:
    • 靠左对齐,字符串左端距离边线1个空格;
    • 居中对齐,字符串距离边线左和右空格数的差不超过1,且左边空格数小于等于右边空格数。
    • 靠右对齐,字符串右端距离边线1个空格;

比如

Name|English |  Math | Data Structure  | Total
---- | :-----: | ---: | :-- | :--
Alice| 100 | 85 | 75 | 260
Bob | 85 | 100 | 85 | 270
+-------+---------+------+----------------+-------+
| Name | English | Math | Data Structure | Total |
+-------+---------+------+----------------+-------+
| Alice | 100 | 85 | 75 | 260 |
| Bob | 85 | 100 | 85 | 270 |
+-------+---------+------+----------------+-------+
Input

只含单一样例。 输入保证没有错误的数据,表格单元格至少有一行。 每行字符串的长度不超过200,表头与单元格字符串只含英文字母、数字、空格。 输入保证单元格的行、列数都不超过10。

Output

按要求输出文本表格,行首尾无空格,也不要有空行。

Example
Input
Name|Math | C Prog | Total
---- | :-----: | ---: | :--
Alice| 100 | 75 | 175
Bob | 85|99 |184
Output
+-------+------+--------+-------+
| Name  | Math | C Prog | Total |
+-------+------+--------+-------+
| Alice | 100  |     75 | 175   |
|  Bob  |  85  |     99 | 184   |
+-------+------+--------+-------+

D. 孤寡青蛙
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Clamee 捡到了一本古籍,上面有神奇的咒语:"一只青蛙一张嘴,两只眼睛四条腿。两只青蛙...."。Clamee 念咒之后,天空一声"咕呱!孤寡!",孤寡青蛙之神从天而降!

孤寡青蛙之神给了 Clamee 一个 $$$n \times m$$$ 的字符画,上面画有青蛙。 Clamee 想知道上面画了几只青蛙,只要数出来,孤寡青蛙之神就会离开他。

下面给出青蛙的字符画形式:

字符画形式
孤寡!孤寡!神!
Input

第一行两个数 $$$n,m~(1 \le n,m \le 100)$$$,依次表示字符画的行数和列数。

接下来 $$$n$$$ 行,每行 $$$m$$$ 个字符,描述这张字符画。

Output

输出一行,为一个整数,表示画上的青蛙只数。

Example
Input
9 9
..@..@...
.(\--/)..
(.>__<.).
^^^..^^^.
.........
...@..@..
..(\--/).
.(.>__<.)
.^^^..^^^
Output
2
Note

保证除了完整的青蛙 外只含 '.' 字符,并且每个青蛙是以端正的姿势出现,不会出现倒置、歪斜、扭曲的情况,不会出现头身分离的情况,保证青蛙之间不会重叠。

E. 神之真言
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Belmaxi渴望长生不老,他翻遍古籍,花费数年时间走遍天下,寻访仙山,终于在海外的一座荒山上发现了一个神秘的洞穴。洞穴里有一卷古老的经卷和一颗闪烁着微光的种子。他展开经卷,其上写着这样一段话。

"凡人啊,吾乃创世之神,盘古,汝既寻至此,便与吾有缘。"

"此乃仙种,落地生根,吾传汝两句真言,可令仙种成长。"

"首句真言:圆"

"次句真言:劈"

"......"

阅读完经卷,Belmaxi恍然大悟。

首先,他需要耗费$$$k$$$年修为,将仙种种下,此时仙种将会立刻变成一株高$$$1$$$尺的仙树。

随后,在任意时刻,他可以耗费$$$1$$$年修为,喊出"圆"字真言,可以使得树长高$$$1$$$倍。

或者,当树高为偶数时,他可以耗费$$$k-1$$$年修为,喊出"劈"字真言,树会长高$$$1$$$尺。

盘古大神在经卷的末尾明示:仙树在高度不低于$$$L$$$尺,不超过$$$R$$$尺,且耗费修为年数正好能够被$$$k$$$整除时,会长出令人长生不老的仙果。

Belmaxi不够聪明,他想要问问屏幕前的你,他该如何操作,才能获得仙果?

(提示:$$$n$$$被$$$k$$$整除是指$$$n \div k$$$的余数是$$$0$$$ )

Input

第一行给出一个正整数T,表示样例的个数。$$$(1\le T\le 10^5)$$$

对于每个样例,给出一行,每行给出三个正整数数$$$L,R,k,~(2 \le L\le R\le 5*10^{18},1\le k\le 50)$$$

Output

对于每个样例,输出格式如下:

如果没有办法使得Belmaxi获得仙果,直接输出-1。

否则,你需要输出两行,第一行为一个正整数$$$n$$$,表示你的操作次数。第二行输出一个长度为n的字符串表示你的操作顺序,使得在你的操作之后,仙树符合条件长出仙果。(字符O代表"圆"字真言,P代表"劈"字真言)。

(注意:$$$n$$$不能超过$$$200$$$,可以证明操作次数不可能超过$$$200$$$次,输出大于$$$200$$$的$$$n$$$一律视为错误答案)

(注意:如果有多种操作方式,输出任意一种即可)

Example
Input
3
3 6 2
8 12 3
9 12 5
Output
2
OP
3
OOO
-1
Note

对于"3 6 2"的样例给出以下解释:

初始时树高1尺,耗费修为2年;

使用一次"圆"字真言后,树高2尺,耗费修为3年;

使用一次"劈"字真言后,树高3尺,耗费修为4年;

此时树高在范围内且耗费修为年数被k整除。

————————————————————————

对于"8 12 3"的样例给出以下解释:

初始时树高1尺,耗费修为3年;

使用一次"圆"字真言后,树高2尺,耗费修为4年;

使用一次"圆"字真言后,树高4尺,耗费修为5年;

使用一次"圆"字真言后,树高8尺,耗费修为6年;

此时树高在范围内且耗费修为年数被k整除。

F. 简单字符串问题
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

给你一个长度为$$$n$$$,只含小写字符的字符串$$$str$$$,你要统计满足如下条件的三元组$$$ \lt a,b,c \gt $$$的数量

  • $$$1\le a \lt b \lt c \le n $$$
  • $$$str[a]=str[b]$$$且$$$str[b]=str[c]$$$,其中$$$str[i]$$$代表从左往右起$$$str$$$的第$$$i$$$个字符,下标从$$$1$$$开始
  • $$$2b=a+c$$$
Input

第一行一个整数 $$$(1 \le T \le 10000)$$$,表示数据组数

每组测试数据占一行,分别为字符串长度$$$n(3 \le n \le 100000)$$$和字符串$$$str$$$

保证单个测试样例的字符串长度之和不超过100000

Output

每组数据输出$$$1$$$行,代表该样例中满足条件的三元组的数量

Example
Input
2
6 abcabc
6 abcbcb
Output
0
1
Note

注意,如果你想的只是朴素的$$$O(n^2)$$$枚举的方法来统计答案,那么请再仔细考虑。

G. String Game II
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

改编自xtuoj 1406

Alice和Bob正在玩一个基于字符串的游戏,一开始,Alice和Bob分别拥有一个等长的字符串 $$$S1$$$ 和 $$$S2$$$,且这两个字符串只包含小写字母。

在每个回合中,Alice和Bob 必须 分别选择 对方 的字符串的某一个位置并把这个位置上的字母改变为其他小写字母。

经过 $$$P$$$ 个回合后,他们的得分分别等于自己的字符串中出现最多的字母出现的次数。 最终得分高者获胜,如果两人得分相等,则为平局。

现在你知道了初始的两个字符串 $$$S1$$$ 、$$$S2$$$ 和回合数 $$$P$$$,如果两人都以最优策略游戏,请问最后谁能获胜或者结果是平局。

Input

第一行是一个数 $$$T~(1 \le T \le 2000)$$$ ,表示样例的个数。 然后每个样例第一行两个数字,分别是字符串长度 $$$N$$$ 和回合数$$$P$$$ ,$$$(1 \le N \le 500,0 \le P \le 10^9)$$$。 接下来两行是两个字符串$$$S1$$$ , $$$S2$$$ ,分别是Alice和Bob的初始字符串。

Output

对于每个样例,输出一行。如果Alice能获胜,输出 "Alice" ,如果结果是平局,输出 "Draw" ,否则输出 "Bob" 。

Example
Input
5
26 1
qwertyuiopasdfghjklzxcvbnm
qwertyuiopasdqghjklzxcvbnm
6 2
aabcsd
ooookr
5 2
aaaaa
bbbds
5 5
abdhj
jdufh
5 0
aabbb
bbdes
Output
Alice
Bob
Alice
Draw
Alice

H. 灌水工程
time limit per test
3 seconds
memory limit per test
64 megabytes
input
standard input
output
standard output

Clamee 发现 X 校准备建 $$$n$$$ 栋房子,该校准备采用如下方案建造:

第一列建 $$$x$$$ 栋,之后每列所建房子的数量都不多于前一列,且每列建的房子数量必为正数,假设一共建了 $$$y$$$ 列。

那么在这个方案下,X 校要会申请 $$$x\cdot y$$$ 单位面积的土地。

Clamee 想知道所有建 $$$n(1\le n\le 10^5)$$$ 栋房子的方案所占用的土地面积之和,对给定质数 $$$p(2\le p\le 2^{31}-1)$$$ 取模。

两个方案不同当且仅当两方案所建列数不同或存在一列在两方案中所建房子数量不同。

Input

一行,两个数,$$$n$$$ 和 $$$p$$$,含义如题面所述。

Output

所占用土地面积之和对 $$$p$$$ 取模的结果。

Example
Input
3 998244353
Output
10
Note

以下给出了所有的工程方案:

所申请的土地面积分别为 3,4,3 总和为 10。

I. 更加逆天的求和
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

继逆天求和之后,Belmaxi想更逆天一些了,于是他想到了逆天第二重,让你求出下面这个函数:

$$$$$$ f(n)=\sum_{i=1}^{n}\sum_{j=1}^{n}{\lfloor\frac{i}{j}\rfloor} $$$$$$

比如

$$$$$$ \begin{array}{rcl} f(1)& = & 1 \\ f(2)& = & \lfloor \frac{1}{1} \rfloor + \lfloor \frac{1}{2} \rfloor + \lfloor \frac{2}{1} \rfloor + \lfloor \frac{2}{2} \rfloor = 4 \\ \cdots \end{array} $$$$$$

现在已知$$$n$$$,请计算$$$f(n)$$$。

Input

第一行一个正整数 $$$T~(T\le 10^3)$$$,表示样例组数。

接下来的每组样例,每行一个正整数$$$n$$$,含义同题干的公式。

对于所有样例$$$\sum{n} \le 10^7$$$

Output

每个样例占一行,输出上述式子的结果,为一个整数。

Example
Input
3
5
21
9999974
Output
27
670
788622283414245

J. 线路改建
time limit per test
3 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

湘大的网络拓扑可以看成一幅联通树形图(数据结构中的"树"),其中网络中心所在的位置是 $$$1$$$ 号点,也就是根节点。路由器以及服务器都可以看成一个节点。总共有 $$$n$$$ 个节点,$$$n- 1$$$ 条边,每条边就是一条线路,每条线路会有一个传输时延 $$$t$$$,从节点 $$$a$$$ 到 $$$b$$$ 的时间等于$$$a,b$$$ 之间 最短路径上的传输时延之和。

现在网络中心获得了一笔经费,这笔经费可以足够整改 $$$k$$$ 次线路,每一次整改可以将这条线路的时延减少 $$$\lfloor \frac{t}{2} \rfloor$$$。也就是说,对一条时延为 $$$t$$$ 的线路进行一次整改,它的时延由 $$$t$$$ 变为 $$$\lceil \frac{t}{2} \rceil$$$ ,并且一条线路可以经历多次整改。注意区分"线路"与"路径"的区别,线路只指一条边。

我们设 $$$f(x)$$$ 为从 $$$1$$$ 号点传输消息到 $$$x$$$ 点需要的时延(注意,只是单向的,所以你不需要考虑消息回送),由于网络中心需要长期发布一些消息,所以网络中心想知道经历整改后可以使得 $$$\sum _{i=2}^n{f(i)}$$$ 最小为多少?

$$$\lfloor x \rfloor$$$ 表示不大于 $$$x$$$ 的最大整数,即向下取整。$$$\lceil x \rceil$$$ 表示不小于 $$$x$$$ 的最小整数,即向上取整。

形式化的说:给定一棵 $$$n$$$ 个节点的带权树形图,你有 $$$k$$$ 次机会,每次你可以选择一条边,使得它的边权从 $$$t_i$$$ 变为 $$$\lceil \frac{t_i}{2} \rceil$$$,询问你所有点到根节点的路径和最小是多少?

Input

第一行一个数字 $$$T$$$ ,代表测试组数。

对于每组输入,由以下部分组成:

  1. 第一行两个整数 $$$n, k$$$,保证 $$$2 \le n \le 10^4,~k \le 10^9$$$
  2. 接下来 $$$n - 1$$$ 行,每行三个整数 $$$u_i, v_i, t_i$$$ ,表示 $$$u_i$$$ 和 $$$v_i$$$ 之间有一条 $$$t_i$$$ 时延的线路。$$$u_i,v_i \in [1,n],t_i \in [1,10^9]$$$
  3. 数据保证是一棵树。并且 $$$\sum{n} \le 2 \times 10^6$$$
Output

输出 $$$T$$$ 行,每行一个整数 $$$W$$$ ,表示最小时延和。

Example
Input
3
5 3
2 1 4
3 1 6
4 2 3
5 3 1
5 3
2 1 9
3 2 6
4 3 9
5 4 7
5 3
2 1 586754654
3 1 313989971
4 3 557336509
5 4 748196409
Output
12
46
1989174327