AtCoder Beginner Contest 196 题解

ABC196 题解

[toc]

AC代码

A – Difference Max

B – Round Down

C – Doubled

给定一个正整数 $N$ ,询问 $N$ 以内有几个对偶正整数。

一个数被称为是对偶的当且仅当:

  • 这个数长度是偶数;
  • 这个数前一半等于后一半,例如 $123123$ 。

$N\leq 10^{12}$ 。

因为这个数是对偶的,因此我们可以暴力枚举前一半,然后算出整个数并判断是否 $\leq N$ ,复杂度 $O(\sqrt{n})$ 。

D – Hanjo

给定一个 $H\times W$ 的网格图,有两种不同尺寸的榻榻米,第一种尺寸为 $1\times 2$ 有 $A$ 个(可以旋转为 $2\times 1$ );第二种尺寸为 $1\times 1$ ,有 $B$ 个。询问有几种不同的摆放方式使得榻榻米恰好铺满了网格图。

$HW\leq 16,2A+B=HW$ 。

数据范围极小,直接暴搜!

注意到 $1\times 2$ 的榻榻米本质上可以看作在网格图中选择一条分隔边,而 $H\times W$ 的网格图中最多也只有 $24$ 条($4\times 4$),同时 $A_{\max}=8$ ,因此可以写出一个复杂度为 $O(24\times \binom{24}{8})$ 的搜索。

E – Filters

给定两个长度均为 $N$ 的序列 $A=(a_1, a_2, \dots, a_N),T=(t_1, t_2, \dots, t_N)$ 和一个长度为 $Q$ 的序列 $X=(x_1, x_2, \dots, x_N)$。定义函数 $f_i(x)$ 为:

f_i(x) =
\begin{cases} x + a_i & (t_i = 1)\\
\max(x, a_i) & (t_i = 2)\\
\min(x, a_i) & (t_i = 3)\\
\end{cases}

对于每个 $x_i$ 求出 $f_N( \dots f_2(f_1(x_i)) \dots )$ 的值。

$2\leq N,Q\leq 2\times10^5,|a_i|,|x_i|\leq 10^9$ 。

观察函数 $f(x)$ 三种操作的特性后发现:

  1. 操作一实际上就是垂直方向上偏移 $a_i$ 个单位;
  2. 操作二可以视为一个二极管,$x$ 想要通过就必须 $\geq a_i$ ,否则会被强制拉成 $a_i$ ;
  3. 操作三同理,$x$ 想要通过就必须 $\leq a_i$ ,否则会被强制拉成 $a_i$ ;

因此,该函数最终的图像一定表现为下图的形式:

ABC196E

中间那段函数显然是 $y=x+k$ 因此,只需要找到两个发生变化的分界点即可解决本题。这两个分界点可以二分搜索也可以直接线性模拟得到。

F – Substring 2

给定两个 $01$ 串 $S,T$ ,询问最少修改 $T$ 串中几个字符才能让 $T$ 变成 $S$ 的一个子串。

$10^6\geq|S|\geq|T|$ 。

FFT做字符串匹配的经典应用,直接套用 这篇文章 的内容就行。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇