0%

    有 $n$ 个战士站成一排,第 $i$ 个战士的战力是 $a_i$。所有战士的战力都是两两不同的。

    你可以使用两种类型的咒语:

    1. 火球术:你可以消耗 $x$ 点法力值来干掉连续的 $k$ 个战士(你必须干掉正好 $k$ 个,而不能干掉 $\le k$ 个)。

    2. 狂暴术:你可以消耗 $y$ 点法力值,选择站在一起的两个战士使他们展开决斗,战力较弱的那个战士将会被干掉。

    我们来举个例子,假设有 $7$ 个战士,其战力分别为 $[2,3,7,8,11,5,4]$,且此时的$k=3$($k$ 的定义详见火球术)。如果你对战力为 $8$ 与 $11$ 的两个战士施加狂暴术,剩下战士的战力将会变成 $[2,3,7,11,5,4]$(战力为 $8$ 的战士在决斗中战死)。然后如果我们对战力为 $[7,11,5]$ 的战士施加火球术,剩下战士的战力将会变成 $[2,3,4]$。

    你想要组建一支军队,因此你想要将所有战士战力的序列从 $a_1,a_2,\cdots,a_n$ 变为 $b_1,b_2,\cdots,b_m$。试计算你所需的最少法力值。

    输入格式

    第一行两个整数 $n,m (1\le n,m\le 2\cdot 10^5)$ ——序列 $a$ 的长度和序列 $b$ 的长度。

    第二行三个整数 $x,k,y (1\le x,y\le 10^9,1\le k\le n)$ ——火球术消耗的法力值,火球术的范围和狂暴术消耗的法力值。

    第三行 $n$ 个整数 $a_1,a_2,…,a_n (1\le a_i\le n)$。保证 $a_i$ 是两两不同的。

    第四行 $m$ 个整数 $b_1,b_2,…,b_m(1\le b_i\le n)$。保证 $b_i$ 是两两不同的。

    输出格式

    一行一个整数,即将序列从 $a_1,a_2,\cdots,a_n$ 变为 $b_1,b_2,\cdots,b_m$所需的最少法力值。如果无法完成变换,则输出$-1$。

阅读全文 »

    有一个无限图,其中有无数个节点,从 $1$ 开始标号。有一条从 $u$ 到 $u+v$ 的单向边,当且仅当 $u \& v = v$ (这里的 $\&$ 指 按位与 。除此以外没有其它边。

    有 $q$ 个询问,询问是否存在一条从 $u$ 到 $v$ 的路径。

    输入格式

    第一行一个整数 $q$ ($1\le q\le10^5 $) —— 询问的个数

    接下来 $q$ 行中,每行有两个整数 $u,v$ ($1 \leq u,v < 2^{30}$),意义如上

    输出格式

    对于每个询问,输出一行 YES 来表示存在从 $u$ 到 $v$ 的一条路径,或输出一行 NO 表示不存在这样一条路径。(你可以以任意大小写形式来输出 YESNO)

阅读全文 »

    给定一张 $n$ 行 $m$ 列的黑白图片(下标从 $1$ 开始),每一个单元格都被涂上了黑色或白色($1$ 或者 $0$)。

    我们对这张图片进行了若干次(可能为零次)操作,每一次操作都是下列两种之一:

    • 选择一个单元格,这个单元格不能在图片的边缘(即,单元格所在行不能是 $1$ 或 $n$ 行,所在列不能是 $1$ 或 $m$ 列),并且这个单元格被四个不同颜色的单元格包围(中间 $0$ 四周 $1$,反之亦然),将这个单元格涂成相反的颜色;

    • 复制一份当前图片。

    两种操作不一定会交替进行。

    给出你初始图片与 $k$ 份复制图片,一共 $k+1$ 份图片,这 $k+1$ 份图片是被随机打乱的。

    你的任务是恢复操作的顺序。若有多种可能答案,只输出其中一个即可。

    所有数据保证答案一定存在。

    输入格式

    输入第一行包含三个整数 $n$、$m$ 以及 $k$($3\le n,m\le 30$;$0\le k\le 100$),分别表示图片的行数、列数和复制图片的数量。

    接下来 $k+1$ 行,每行一张图片,包括 $k$ 张复制图片和 $1$ 张初始图片,顺序是打乱的。

    每张图片由 $n$ 行 $m$ 列组成,每个单元格都为 $0$ 或 $1$。每张图片之前都有一个空行。

    输出格式

    输出第一行一个整数,表示初始图片是第几张。图片按其输入顺序分别编号 $1$ 至 $k+1$。

    输出第二行一个整数 $q$,表示进行了多少次操作。

    接下来 $q$ 行,每行对应一次操作,须按正确顺序输出操作。每个操作有题目描述中提到的两种类型:

    • $1\ x\ y$ 表示在坐标 $(x,y)$ 执行第一种操作;

    • $2\ i$ 表示复制一份当前图片,编号是 $i$。

阅读全文 »

    Alice做到了这样一道题:

    > 给定一个序列$a$,有$n$个元素,编号从$0$到$n-1$。求$\max\limits_{0 \leq l \leq r \leq n-1} \sum\limits_{l \leq i \leq r} (r-l+1) \cdot a_i$。

    >

    > $|a_i| \leq 10^6,n \leq 2000$

    Alice觉得这题太水了,很快就给出了解法:

    ```

    function find_answer(n, a)

    # Assumes n is an integer between 1 and 2000, inclusive# Assumes a is a list containing n integers: a[0], a[1], ..., a[n-1]res = 0cur = 0k = -1for i = 0 to i = n-1    cur = cur + a[i]    if cur &lt; 0        cur = 0        k = i    res = max(res, (i-k)*cur)return res

    ```

    聪明的你一定发现了,Alice的解法是错误的。例如对于序列$a = [6, -8, 7, -42]$,Alice的程序得出的结果是$7$,而正确答案应该是$3 \cdot (6-8+7) = 15$。

    于是你决定HACK掉Alice的解法。

    请给出一组数据,使得正确答案-Alice的答案=$k$,你的数据必须满足$n \leq 2000,|a_i| \leq 10^6$。

    $k \leq 10^9$

阅读全文 »

    给你两长度都为 $n$ 的小写字符串 $S, T$。

    每次操作中你可以任选一个 $L (1\le L\le n)$,同时翻转 $S$ 中的任意一个长度为 $L$ 的子串和 $T$ 中任意一个长度为 $L$ 的子串。

    请回答你是否能在若干次操作后使两字符串一样?

    输入格式

    第一行一个正整数 $q(1\le q\le 10^4)$ 表示询问次数

    接下来 $q$ 组数据,每组数据三行,第一行一个正整数 $n(1\le n\le 2\times 10^5)$,第二行一个字符串 $S$,第三行一个字符串 $T$。

    保证 $\sum n\le 2\times 10^5$

    输出格式

    $q$ 行,每行一个字符串 YESNO

阅读全文 »

    • 给出一个序列 $a$,求出一个长度不超过 $3n$ 的操作序列,使序列 $a$ 中每个元素相等。

    • 定义一次操作为:选出 $(i,j,x)$ 三元组,满足 $i,j$ 为序列合法下标,$x$ 为 $10^9$ 以内非负整数,令 $a_i:= a_i-x\cdot i,a_j:=a_j+x\cdot i$。

    • 必须保证操作过程中的任意时刻序列 $a$ 中每个元素都非负。

    • 输出时先输出操作次数 $k$,然后输出 $k$ 行操作序列。

    • 数据组数 $t\le10^4$,序列长度 $n\le10^4$,元素大小 $1\le a_i\le10^5$。

阅读全文 »

    The Hat是一个快速解释/猜测单词的游戏(类似于Alias)。在这道题中,我们所讨论的是一种游戏变体,即玩家坐在桌旁,每个人都单独玩游戏。

    有 $n$ 个人聚集在一个有 $m$ 张桌子( $n \ge m \times 2$ )的房间里。他们想玩 $k$ 次 The Hat。$k$ 次游戏将在这些桌子上进行,每个人都会玩 $k$ 次游戏。

    这些玩家被分配到这些桌子上。每个玩家可以在不同的桌子上玩,但每局游戏每个玩家只能在一张桌子上玩。

    玩家们希望拥有“公平”的游戏顺序。出于这个原因,他们正在寻找一个方案,要求如下:

    • 在任意一场游戏中,所有桌子都有 $\lfloor \dfrac{n}{m} \rfloor$ 或 $\lceil \dfrac{n}{m} \rceil$ 个玩家。不同的桌子有不同数量的玩家,这些玩家可以玩不同的游戏。

    • 每个玩家都有一个值 $b_i$,它表示第 $i$ 个玩家和 $\lceil \dfrac{n}{m} \rceil$ 个玩家在一张桌子上玩游戏的次数。任意两个玩家的 $b_i$ 值相差不会超过 $1$。换句话说,对于任意两个玩家 $i,j$,满足 $|b_i-b_j| \leq 1$。

    我们称有 $\lfloor \dfrac{n}{m} \rfloor$ 个玩家的桌子为“小桌子”,称有 $\lceil \dfrac{n}{m} \rceil$ 个玩家的桌子为“大桌子”。

    例如,$n=5,m=2,k=2$,那么根据第一项要求,每张桌子上应该有 $2$ 或 $3$ 名玩家。考虑这些游戏顺序:

    • 第一局:玩家 $1,2,3$ 在第一张桌子上玩,玩家 $4,5$ 在第二张桌子上玩。第二局:玩家 $5,1$ 在第一张桌子上玩,玩家 $2,3,4$ 在第二张桌子上玩。这个顺序是不“公平”的,因为 $b_2=2$ (第二名玩家在大桌子上玩了两次),$b_5=0$ (第五名玩家没有在大桌子上玩过游戏)。

    • 第一局:玩家 $1,2,3$ 在第一张桌子上玩,玩家 $4,5$ 在第二张桌子上玩。第二局:玩家 $4,5,2$ 在第一张桌子上玩,玩家 $1,3$ 在第二张桌子。这是一种“公平”的顺序:$b=[1,2,1,1,1]$ (任意两个值的差都不超过 $1$)。

    为 $n$ 个玩家找到所有“公平”的顺序,如果他们玩 $k$ 次游戏,在 $m$ 张桌子上。

    输入格式

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

    接下来 $t$ 行,每行三个整数 $n,m,k(2 \leq n \leq 2 \times 10^5,1 \leq m \leq \lfloor \dfrac{n}{2} \rfloor,1 \leq k \leq 10^5)$,分别表示玩家个数,桌子个数以及游戏次数。

    保证所有测试用例的 $n \times k$ 之和不超过 $2 \times 10^5$。

    输出格式

    对于每组数据,输出 $k$ 块矩阵,每块矩阵有 $m$ 行。每一块矩阵表示一次游戏,共有 $m$ 张桌子,用一行表示一张桌子,每行先输出这张桌子的玩家数,再输出这些玩家。每组数据

    如果有多个“公平”的顺序,那么输出任意一个。保证至少有一个有效的解。

阅读全文 »