ARC153 ABC 题解

A

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

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

例如 998244353

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


【分析】
本质不同的数只有 106 个。可以直接枚举。

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

B

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

求操作之后的矩阵。

N,M,Q2×105


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

image

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

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

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

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

时间复杂度 O(NM+Q)

C

【题意】给定数列 A1,A2,...,An,其中每个数都是 1 或者 1。试图构造 B1,B2,...,Bn 使得 B 严格递增并且 i=1nAiBi=0


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

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

image

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

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

k<0 同法。

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

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

image

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

其实我们考虑一一匹配的括号。不妨考虑左括号是 1,右括号是 0 的情况。令一对匹配括号的下标是 i,j。这时候由于 B 数组左边永远比右边小,因此 BiAi=Bi<Bj=BjAj

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

image

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

posted @   OIer某罗  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示