The 6th FanRuan Cup Southeast University Programming Contest (Winter)
A. 线段
time limit per test
1 second
memory limit per test
1024 megabytes
input
standard input
output
standard output

小J 有一个平面直角坐标系,在这个平面里有一条线段,小J 想要在这个平面里找到一个与这条线段长度相同且相互垂直的线段,请你帮助他找到一条这样的线段。

对一同一平面内的两条线段来说,称它们是相互垂直的当且仅当将两条线段都延长为直线后,两条直线相互垂直。

Input

第一行,一个整数 $$$t(1\le t\le 10^4)$$$,代表数据组数。

对于每组数据,输入仅一行四个整数 $$$x_1,y_1,x_2,y_2(-10^8\le x_1,y_1,x_2,y_2\le 10^8)$$$,$$$(x_1,y_1)$$$ 与 $$$(x_2,y_2)$$$ 分别代表平面中已有的线段的两个端点,保证线段的两个端点不同。

Output

对于每组数据,输出四个整数 $$$u_1,v_1,u_2,v_2(-10^9\le u_1,v_1,u_2,v_2\le 10^9)$$$,$$$(u_1,v_1)$$$ 与 $$$(u_2,v_2)$$$ 分别代表你给出的线段的两个端点。

任意一个满足题目要求的答案都是正确的。

Example
Input
4
0 0 1 1
-3 2 5 4
17 9 -16 -5
-111 -451 119 19180
Output
-1 1 0 0
0 0 2 -8
7 -16 -7 17
-11111 0 8520 -230

B. Good Array
time limit per test
1 second
memory limit per test
1024 megabytes
input
standard input
output
standard output

对于一个长度为 $$$n$$$ 的数组 $$$a$$$ 和一个正整数 $$$m$$$,称数组 $$$a$$$ 是好的当存在一个正整数 $$$b$$$,使得所有小于等于 $$$m$$$ 的正整数中,有且仅有在数组 $$$a$$$ 中出现的那些是 $$$b$$$ 的因子。

例如,当 $$$a=[1,2,3],m=5$$$ 的时候就是一个好的数组,因为可以选取 $$$b=6$$$。但是当 $$$a=[2,3],m=5$$$ 的时候就不是一个好的数组,因为当 $$$b=6$$$ 的时候,数组 $$$a$$$ 中缺少了 $$$b$$$ 的一个因子 $$$1$$$。当 $$$a=[1,2,3,4],m=6$$$ 时不能选取 $$$b=4$$$,因为数组 $$$a$$$ 中的数字 $$$3$$$ 不是 $$$b$$$ 的一个因子。

给定一个长度为 $$$n$$$ 的数组 $$$a$$$ 和一个正整数 $$$m$$$,请判断 $$$a$$$ 的每一个前缀是否是一个好的数组。

Input

第一行,一个整数 $$$t(1\le t\le 2\times 10^4)$$$,代表数据组数。

对于每组数据:

第一行,两个整数 $$$n,m(1\le n \le 10^5;1\le m\le 10^7)$$$,代表数组 $$$a$$$ 的长度,$$$m$$$ 的含义与题目中一致。

第二行,一个长度为 $$$n$$$ 的数组 $$$a_1,\dots,a_n(1\le a_i\le m)$$$,代表数组 $$$a$$$。

保证同一测试点内 $$$n$$$ 的总和不超过 $$$10^5$$$。

Output

对于每组数据,输出一个长度为 $$$n$$$ 的二进制字符串 $$$s$$$。如果 $$$s_i=1$$$ 代表数组 $$$a$$$ 长度为 $$$i$$$ 的前缀是一个好的数组;如果 $$$s_i=0$$$ 代表数组 $$$a$$$ 长度为 $$$i$$$ 的前缀不是一个好的数组。

Example
Input
4
6 16
2 1 4 6 3 12
8 10000000
1 2 8 4 16 9999995 1024 1
3 5
3 2 1
3 6
3 2 1
Output
011001
11011000
001
000
Note

样例第一组数据中,对于数组 $$$a$$$ 的每一个前缀,$$$b$$$ 的值分别为 $$$0,2,4,0,0,24$$$($$$0$$$ 代表 $$$b$$$ 的值不存在)。

C. 山
time limit per test
3 seconds
memory limit per test
1024 megabytes
input
standard input
output
standard output
我曾踏足山巅,也曾进入低谷,两者都让我受益良多。

$$$n$$$ 座山从高到低排成了一条直线,这就是进入低谷的路;不过,现在并不是进入低谷的时候,你可以改变山的高度!!!

在每次操作中:

  • 你可以选择任意一座下标为 $$$i$$$ 的山,使得它的高度变成当且高度的 $$$k$$$ 倍。形式化地来说,你可以选择任意一座高度为 $$$a_i$$$ 的山 $$$i$$$,使得 $$$a_i=a_i\times k$$$。

在任何时间,任何地点都有可能陷入低谷。所以请问,在给定 $$$k$$$ 的情况下,对于山的某个区间 $$$l$$$ 到 $$$r$$$ 来说,使得这个区间内的所有山的高度单调不减的操作次数最少是多少。

形式化地来说,给你一个长度为 $$$n$$$ 的单调不增序列 $$$a$$$,在每次操作中,你可以选择一个位置 $$$i(1\le i\le n)$$$,使得 $$$a_i=a_i\times k$$$。那么在给定 $$$k$$$ 的情况下,使得序列 $$$a$$$ 的某个子段 $$$[a_l,\dots,a_r]$$$ 单调不减的操作次数最小值是多少。

Input

第一行,一个整数 $$$t(1\le t\le 10^4)$$$,代表数据组数。

对于每组数据:

第一行,三个整数 $$$n,q,b(2\le n\le 5\cdot 10^5;1\le q\le 5\cdot10^5;1\le b\le 10^6)$$$,代表直线上山的数量,询问次数和表示山的高度时的基数。

接下来一行有 $$$n$$$ 个整数 $$$x_1,\dots,x_n(0\le x_i\le n)$$$,代表初始时第 $$$i$$$ 座山的高度 $$$a_i=b^{x_i}$$$,保证所有山的高度数组 $$$a$$$ 是单调不增的。

接下来连续的 $$$q$$$ 行,每行三个整数 $$$l,r,k(1\le l \lt r\le n;2\le k\le 10^9)$$$,代表每次询问的区间范围和询问时的 $$$k$$$。

保证同一测试点内 $$$n$$$ 的总和和 $$$q$$$ 的总和均不超过 $$$5\cdot10^5$$$。

Output

对于每次询问,输出一行整数代表使得当前区间内山的高度数组变得单调不减的最少操作次数。

因为本题可能存在一定的精度问题,所以允许选手的答案和标准答案之间有 $$$10^{-5}$$$ 的相对误差,即假如标准答案为 $$$ans$$$,选手输出为 $$$out$$$,那么选手的输出会被认为是正确的当且仅当 $$$\frac{|ans-out|}{ans}\le 10^{-5}$$$。

Example
Input
4
4 2 1
1 3 0 4
1 4 2
2 3 71
2 1 2
1 1
1 2 273
10 6 2
10 10 8 6 2 1 1 1 0 0
1 10 2
1 2 998244353
3 7 4
2 5 31
2 10 33
2 3 12
7 4 99787
6 5 4 3 2 1 0
1 7 2
1 7 99788
1 7 99787
2 6 99786
Output
0
0
0
61
0
12
6
28
1
357
21
21
20

D. 防御
time limit per test
2 seconds
memory limit per test
1024 megabytes
input
standard input
output
standard output

提瓦特大陆是一棵树,树上的每个节点从 $$$1$$$ 开始编号,在大陆上的每一个节点中,都有着无尽的知识和宝藏。现在,预言家说,在不久后,在节点 $$$1$$$ 会爆发出一场病毒危机,病毒会沿着树的边不断传播给相邻的节点。假设每一个点都有一个价值 $$$v$$$ 且可以花费 $$$w$$$ 使得该节点无法被感染(包括节点 $$$1$$$)。那么请问,假如可供节点无法被感染的花费总和最大为 $$$c$$$,使用最优的策略,被感染的节点总价值最小是多少?

Input

第一行,一个整数 $$$t(1\le t\le 10^4)$$$,代表数据组数。

对于每组数据:

第一行,两个整数 $$$n,c(2\le n\le 5000;1\le c\le 10^9)$$$,分别代表提瓦特大陆上的节点数和花费的最大值。

第二行,$$$n$$$ 个整数 $$$v_1,\dots,v_n(0\le v_i\le 5000;\sum v\le 5000)$$$,代表每个点的价值。

第三行,$$$n$$$ 个整数 $$$w_1,\dots,w_n(1\le w_i\le 10^9)$$$,代表使得每个点无法被感染的花费。

接下来连续的 $$$n-1$$$ 行,每行两个整数 $$$x,y(1\le x,y\le n)$$$,代表树上的一条边,保证所有的边构成一棵树。

保证同一测试点内 $$$n^2$$$ 和 $$$(\sum v)^2$$$ 的总和均不会超过 $$$5\times 10^7$$$。

Output

对于每组数据,输出一个整数,代表在花费不超过 $$$c$$$ 的情况下,被感染的节点总价值最小是多少。

Example
Input
4
3 10
1 1 1
11 4 5
1 2
1 3
4 9
1 2 3 4
9 10 11 12
1 2
2 3
3 4
11 20
5 27 40 39 47 67 69 75 77 80 30
27 25 24 21 20 19 18 15 5 7 1
1 2
3 2
4 2
1 5
3 7
6 7
7 8
5 9
5 10
11 5
2 1
1 1
2 2
1 2
Output
1
0
315
2

E. Time Traveller
time limit per test
2 seconds
memory limit per test
1024 megabytes
input
standard input
output
standard output

时之旅人注定是孤独的。

Doctor who 是一位时间旅行者,他经常在宇宙中进行旅行。宇宙中有许多星球,星球是他旅行的目的地。宇宙可以被看作是一张有向图,对于编号为 $$$u,v$$$ 的两颗星球来说,它们之间有一条从 $$$u$$$ 到 $$$v$$$ 的有向边(保证 $$$u \lt v$$$),且经过该边需要经过 $$$w$$$ 的时间(边的长度为 $$$w$$$)。同时,宇宙是在不断变化的,对于一条长度为 $$$w$$$ 的边,这条边仅在时间轴中的 $$$t$$$ 至 $$$t+w$$$ 时间内存在,所以 Doctor who 必须恰好在 $$$t$$$ 时刻从这条边的起点出发。

Doctor who 拥有一个能够穿梭时间的时光机器,该机器只能在某个星球上时使用,且每次进行时间穿梭都需要消耗一定的能量,即存在两个时间点 $$$t_1,t_2$$$ 那么该机器从时间 $$$t_1$$$ 穿梭到时间 $$$t_2$$$ 所需要的能量是 $$$|t_1-t_2|+c$$$($$$c$$$是一个常数,对于每颗星球来说是不同的),并且使用时光机器后 Doctor who 的位置也不会变。

那么请问,假如 Doctor who 在任意一个时刻可以进行以下三件事之一:

1. 呆在某个星球上不动。 2. 在某条连接两个星球的边上移动。 3. 进行时空穿梭。

且他在 $$$0$$$ 时刻从星球 $$$1$$$ 出发,那么他到达每个星球的时刻加上时光机消耗的能量的总和的最小值分别是多少。

Input

第一行,一个整数 $$$t(1\le t\le 10^4)$$$,代表数据组数。

对于每组数据:

第一行,两个整数 $$$n,m(2\le n \le 2\cdot 10^5;1\le m\le 4\cdot10^5)$$$,代表宇宙中的星球数和连接星球的边数。

第二行,$$$n$$$ 个整数 $$$c_1,\dots,c_n(0\le c_i\le 10^9)$$$,代表在每颗星球上进行时间穿梭消耗能量的常数。

接下来连续的 $$$m$$$ 行,每行四个整数 $$$u_i,v_i,w_i,t_i(1\le u_i \lt v_i\le n;1\le w\le 10^9;0\le t_i \le2\cdot 10^9)$$$,代表连接有向边的两颗星球,边的长度和边存在的时间在时间轴上的起点。

保证同一测试点内 $$$n$$$ 的总和不超过 $$$2\cdot 10^5$$$ 且同一测试点内 $$$m$$$ 的总和不超过 $$$4\cdot10^5$$$。

Output

对于每组数据:

输出共一行,$$$n$$$ 个整数,即对于编号从 $$$1$$$ 到 $$$n$$$ 的每颗星球,输出一个整数,代表到达这颗星球的时刻加上时光机消耗的能量的和的最小值,如果 Doctor who 永远无法到达这颗星球,那么这个值就是 $$$-1$$$。

Example
Input
4
2 1
9 16
1 2 4 8
3 3
0 1 0
1 2 1 0
2 3 2 0
1 3 1 8
8 10
3 0 1 2 5 0 8 0
1 3 9 0
3 8 5 2
7 8 11 90
2 5 1 0
1 8 7 15
2 4 1 0
3 4 3 10
2 5 9 16
4 6 25 25
1 7 6 16
4 3
1000000000 1000000000 1000000000 1000000000
1 2 1000000000 2000000000
2 3 1000000000 0
3 4 1000000000 0
Output
0 12
0 1 4
0 -1 9 13 -1 50 22 15
0 3000000000 5000000000 7000000000

F. 机惨
time limit per test
1 second
memory limit per test
1024 megabytes
input
standard input
output
standard output

Ambition 出去买饮料了!擅长光速机惨的 nkxjlym 显然不会错过这次机会,他决定进行他的机惨计划,用字符 a 填满 Ambition 电脑里的记事本!

nkxjlym 打开了 Ambition 电脑里的记事本,输入了一个字符 a。接下来,他有两种操作:

1. 花费 $$$v$$$ 秒,全选所有记事本里的文字,复制,并且将光标移动到文本的尾部。 2. 花费 $$$w$$$ 秒,按下粘贴键,将他最新一次复制的所有文本粘贴到记事本中已有文本的末尾。

nkxjlym 知道,要让 Ambition 的电脑死机,至少要在记事本中输入 $$$k$$$ 个字符。

不幸的是,Ambition 走前,为了防止 nkxjlym 机惨他,在电脑里写了一段程序,使得 nkxjlym 进行操作1的时间不是一个固定值,而是 $$$v=rnd()$$$,其中 rnd 是一段随机数程序,每一次调用都会返回一个新的值。

Ambition 马上就要回来了,nkxjlym 想要知道,假如以最优顺序按键,让 Ambition 的电脑死机的时间最短是多少。

以下是这段随机数程序的 C++ 版本和 py 版本。

int rnd()
{
seed = (1ll * seed * 7 + 13) % mod;
return seed;
}
def rnd():
global seed
seed = (seed * 7 + 13) % mod
return seed
Input

第一行,一个整数 $$$t(1\le t\le 10^4)$$$,代表数据组数。

对于每组数据,输入仅有一行四个整数 $$$seed,mod,w,k(0\le seed\le 10^9;1\le mod,w\le 10^9;2\le k\le 10^9)$$$,前两个数字代表随机数生成器中的常数,第三个数字代表粘贴操作所需的时间,最后一个数字代表让 Ambition 的电脑死机的最少字符数。

Output

对于每组数据,输出一个整数,代表让 Ambition 的电脑死机的最短时间。

Example
Input
4
0 1 1 2
8 1 2 79
731 483 166 443
880889741 623864658 89252520 848014988
Output
1
14
3185
7402394725

G. 宝石碰撞
time limit per test
1 second
memory limit per test
1024 megabytes
input
standard input
output
standard output

你获得了一串 $$$n$$$ 个宝石,从左到右排成了一行,其中每颗宝石有自己独特的价值,第 $$$i$$$ 颗宝石价值为 $$$v_i$$$。如果把这串宝石全部卖出去,可以获得所有宝石价值的总和这么多的钱财。

但是聪明的你发现,宝石内部的能量是不稳定的!对于宝石的某个区间 $$$[l,r](l \lt r)$$$,可以从左右两端向内部施加一次碰撞,来改变宝石的能量分布,使得 $$$[l,r]$$$ 内部的所有宝石的价值都变为 $$$v_l \oplus v_r$$$,其中 $$$\oplus$$$ 是二进制异或运算。注意,由于只有一个宝石时无法碰撞,所以要求选择的区间 $$$l \lt r$$$。

你可以任意决定碰撞操作的位置、顺序和次数,请问你能获得的最大价值是多少?

Input

第一行,一个整数 $$$t$$$ $$$(1\le t\le 10^5)$$$,表示测试数据的组数。

对于每组测试数据:

第一行输入一个整数 $$$n$$$ $$$(1\le n\le 10^5)$$$,表示宝石的个数;第二行包含 $$$n$$$ 个整数 $$$v_i$$$ $$$(1\le v_i \lt 2^{31})$$$,表示第 $$$i$$$ 个宝石的价值。

保证所有同一测试点内的 $$$n$$$ 总和不超过 $$$10^5$$$。

Output

对每组测试数据,输出一行整数,表示你能获得的最大价值。

Example
Input
7
2
1 2
2
6 2
3
3 5 2
4
2 6 4 12
6
15 1 4 8 2 16
2
9 10
3
24 25 13
Output
6
8
21
56
186
19
72

H. AGAIN! Permutation with MAX Score
time limit per test
1 second
memory limit per test
1024 megabytes
input
standard input
output
standard output

定义一个长度为 $$$n$$$ 的排列 $$$p$$$ 的得分 $$$score_p$$$ 为 $$$\sum_{i=1}^n[(\sum_{j=1}^i p_j)=k\times p_i]$$$,即在 $$$p$$$ 的所有下标中,前缀和是当前位置的值的 $$$k$$$ 倍的下标数量。

给定整数 $$$n$$$,你需要确定一个正整数 $$$k$$$,求出所有的长度为 $$$n$$$ 的排列中,得分的最大值是多少。

一个长度为 $$$n$$$ 的排列 $$$p$$$ 是指从 $$$1$$$ 到 $$$n$$$ 的每个整数恰巧在 $$$p$$$ 中出现一次,例如 $$$[3,1,2]$$$、$$$[1]$$$ 都是排列,但是 $$$[1,1,3]$$$、$$$[3,2,4]$$$ 都不是排列。

Input

第一行,一个整数 $$$t(1\le t\le 10^4)$$$,代表数据组数。

对于每组数据,仅输入一个正整数 $$$n(1\le n\le 10^6)$$$,代表排列的长度。

保证同一测试点内 $$$n$$$ 的总和不超过 $$$10^6$$$。

Output

对于每组数据,输出共有两行:

第一行,一个整数 $$$k(1\le k\le 10^{12})$$$,代表你选择的整数 $$$k$$$。

第二行,一个长度为 $$$n$$$ 的排列,代表得分最高的排列。

任意满足题目要求的答案都是正确的。

Example
Input
6
1
2
3
4
5
6
Output
1
1
1
2 1
3
3 1 2
3
4 2 3 1
3
4 2 3 1 5
3
2 1 5 4 6 3
Note

在第三组输出样例中,使用红色标出了所有得分下标的数字 $$$[3,1,{\color{red}2}]$$$。

在第六组输出样例中,使用红色标出了所有得分下标的数字 $$$[2,{\color{red}1},5,{\color{red}4},{\color{red}6},3]$$$。

I. 棋盘
time limit per test
1 second
memory limit per test
1024 megabytes
input
standard input
output
standard output

小J面前有一个 $$$n\times m$$$ 的棋盘,他手里面还有很多个形如"L"型的拼图,拼图如下图所示:

该拼图可以旋转或反转放入棋盘中

他想问你这个棋盘在拼图不互相重叠的情况下最多能摆多少块拼图。

Input

第一行,一个整数 $$$t(1\le t \le 100)$$$,代表数据组数。

对于每组数据,输入一行两个整数 $$$n,m(1\le n,m \le 10^6)$$$,分别代表棋盘的长和宽。

Output

对于每组数据,输出一行一个正整数,代表在拼图不互相重叠的情况下棋盘中最多能摆多少块拼图。

Example
Input
4
2 3
3 3
1 100
7 5
Output
2
2
0
11
Note

样例中第二组和第三组数据分别按照如下方式摆放。

J. Swap, Splice and Modulus
time limit per test
2 seconds
memory limit per test
1024 megabytes
input
standard input
output
standard output

给你一个以长度 $$$n$$$ 为循环周期的无限长度的正整数序列 $$$a_1,a_2\dots$$$ 和一个质数 $$$p$$$。不仅如此,还有对这个无限长度的序列的如下两种操作:

  • $$$1$$$ $$$i$$$ $$$j$$$:对于所有的 $$$k\in N$$$,交换序列中所有的 $$$a_{k\times n+i}$$$ 和 $$$a_{k\times n +j}$$$。
  • $$$2$$$ $$$x$$$:求出这个无限长度的循环序列的前 $$$x$$$ 个数拼接$$$^{\dagger}$$$在一起后对于 $$$p$$$ 取模的结果。

$$$^{\dagger}$$$对于两个正整数来说,将这两个数字$$$\it{拼接}$$$在一起意味着把这两个数字像字符串一样从左向右连接到一起,从而得到一个新的正整数。举个例子,将 $$$123$$$ 和 $$$45$$$ 拼接在一起的结果为 $$$12345$$$。

Input

第一行,一个整数 $$$t(1\le t\le 10^4)$$$,代表数据组数。

对于每组数据:

第一行,三个整数 $$$n,q,p(1\le n \le 3·10^5;1\le q \le 3·10^5;10^9-10^7\le p\le 10^9+10^7)$$$,分别代表无限序列的循环周期,询问的次数和操作二的模数,保证 $$$p$$$ 是一个质数。

第二个,$$$n$$$ 个整数 $$$a_1,\dots,a_n(1\le a_i\le 10^9)$$$,代表无限循环序列的前 $$$n$$$ 个数字。

接下来连续的 $$$q$$$ 行,每行现有一个整数 $$$op(1\le op\le2)$$$,代表操作的类型。如果 $$$op=1$$$,那么接下来有两个整数 $$$i,j(1\le i,j\le n)$$$,代表交换无限循环序列的前 $$$n$$$ 个数字中的 $$$a_i$$$ 和 $$$a_j$$$(后面所有周期中的数字也会被交换)。如果 $$$op=2$$$,那么接下来仅有一个数字 $$$x(1\le x \le 2·10^9)$$$,代表询问将无限循环序列的前 $$$x$$$ 个数字拼接在一起后对于 $$$p$$$ 取模的结果是多少。

保证对于每组数据,第一个询问的操作类型 $$$op=2$$$。

保证同一测试点内 $$$n$$$ 和 $$$q$$$ 的和均不会超过 $$$3·10^5$$$。

Output

对于每个操作类型 $$$op=2$$$ 的询问,输出一行整数代表答案。

Example
Input
2
4 4 998244353
1 2 3 4
2 5
1 2 3
2 2
2 12
6 5 1000000007
1 145 14 19 19 180
2 6
1 1 3
1 5 6
1 2 2
2 916619
Output
12341
13
644986728
141911165
47833121

K. GCD of Set
time limit per test
1 second
memory limit per test
1024 megabytes
input
standard input
output
standard output

小w 很喜欢 $$$\gcd$$$ 和集合,于是他想出了这道题。但是 小w 还很喜欢看书,出完这道题他就跑去图书馆了。你能帮他解决这个问题吗?

称一个集合的 $$$\gcd$$$ 为集合内所有数的最大公因数。

形式化地,若集合 $$$A=\left \{ a_1,a_2,...,a_n \right \}$$$ ,则 $$$\gcd(A)=\gcd(a_1,a_2,...,a_n)$$$。

特别地,如果集合只有一个数,则它的 $$$\gcd$$$ 是就是这个数,即 $$$\gcd(\left \{ a \right \})={a}$$$。

给定一个大小为 $$$n$$$ 的不可重数集 $$$U$$$,你需要将其划分为 $$$k$$$ 个非空子集,使得每个子集的 $$$\gcd$$$ 的和最大。

Input

第一行,一个整数 $$$t(1 \le t \le 10^4)$$$,代表数据组数。

对于每组数据:

第一行,输入 $$$2$$$ 个整数 $$$n,k$$$ $$$(1 \le k \le n \le 10^6)$$$,分别表示集合 $$$U$$$ 的大小和划分的子集数。

第二行,输入 $$$n$$$ 个整数 $$$a_1,...,a_n$$$ $$$(1 \le a_i \le 10^6)$$$,$$$a_i$$$ 互不相同,表示给定的集合 $$$U$$$。

保证同一测试点内的 $$$a_i$$$ 的最大值之和不超过 $$$10^6$$$ 。

Output

输出一个整数,代表每个子集的 $$$\gcd$$$ 的和的最大值。

Example
Input
4
3 2
3 6 5
5 4
13 11 10 9 5
4 2
4 2 5 3
4 3
4 2 5 3
Output
8
38
6
10