ARC153 ABC 题解

A

【题意】
给定 \(N\),求第 \(N\) 个满足以下条件的数:

  • 它是一个 \(9\) 位数,没有前导 \(0\)
  • 它的第一位等于它的第二位。
  • 它的第五位等于它的第六位。
  • 它的第七位等于它的第九位。

例如 \(998244353\)

保证存在第 \(N\) 个这样的数。


【分析】
本质不同的数只有 \(10^6\) 个。可以直接枚举。

也可以按位直接求,显然第 \(\mathtt{ABCDEF}\) 个满足条件的数是 \(\mathtt{(A+1)(A+1)BCDDE(F-1)E}\)

B

【题意】
给定 \(N\times M\) 的字符矩阵。做 \(Q\) 次操作,每次形如把矩阵竖着和横着切两刀,形成的四个区域分别翻转 \(180°\)

求操作之后的矩阵。

\(N,M,Q \le 2 \times 10^5\)


首先考虑一维怎么做。手玩一下如下图:(我们只关心每个位置最后跑哪里去了,不妨设 \(c_i = i\)

image

注意到不管怎么翻转,都是一个 \(1 \sim 7\) 正或反着循环放在某一个位置上。进一步地,如果操作次数为奇数,那么是反的。否则是正的。位置怎么考虑?考虑追踪 \(1\)\(7\) 的分界线,不难发现进行左端点为 \(x_1,x_2,...,x_k\) 的操作之后,它在什么位置上:
\(x_1-x_2+...+x_k\)\(k\) 为奇数)
\(-x_1+x_2+...+x_k\)\(k\) 为偶数)

然后就能做一维的情况了。

接下来推广的时候我们会发现两维之间是独立的,根本不需要其他什么考虑就可以推广了。

因此我们得到了一个做法:每一维分别考虑,每一维只需要维护形如 \(x_1-x_2+...+x_k\) 的一个数,最后按顺序放置标记位置的数字即可。

时间复杂度 \(O(NM + Q)\)

C

【题意】给定数列 \(A_1,A_2,...,A_n\),其中每个数都是 \(1\) 或者 \(-1\)。试图构造 \(B_1,B_2,...,B_n\) 使得 \(B\) 严格递增并且 \(\sum \limits_{i = 1}^{n} A_i B_i = 0\)


先给 \(B\) 随便赋值,然后调整一下。

考虑随便赋值之后,得到的数是 \(k\)。我们可以给某一个前缀减去某个数,或者给后缀加上某个数,使得总共变化了 \(-k\)。如下图所示。

image

令选出的位置的 \(A\) 之和为 \(t\)。不难发现 \(t\)\(1\) 或者 \(-1\) 的时候是最好的(灵活性最大,并且限制也最少)。

如果 \(k>0\),需要总共加上一个负数。那么可以选择一段 \(t = 1\) 的前缀,给它们分别减去 \(k\);或者选出一段 \(t=-1\) 的后缀,给它们分别加上 \(k\)

\(k<0\) 同法。

如果选不出来怎么办?其实这些情况都是无解的。考虑证明。

因为选不出来的串首先长度是偶数,其次形如下面这样的数列,可以让 \(1\) 表示左括号或者右括号,\(-1\) 表示另一种括号,得到一个合法括号序列

image

我们会发现这样的时候选不出 \(<0\) 的前缀,也选不出 \(>0\) 的后缀。

其实我们考虑一一匹配的括号。不妨考虑左括号是 \(1\),右括号是 \(0\) 的情况。令一对匹配括号的下标是 \(i,j\)。这时候由于 \(B\) 数组左边永远比右边小,因此 \(B_iA_i = B_i < B_j= -B_jA_j\)

因此这样得出来的一定是个小于 \(0\) 的数,因为每一对数字加起来都小于 \(0\)

image

因此有解构造,无解输出就行。

posted @ 2023-01-14 23:05  OIer某罗  阅读(49)  评论(0编辑  收藏  举报