AtCoder Beginner Contest 199(Sponsored by Panasonic) 题解

ABC199 题解

[toc]

AC代码

A – Square Inequality

B – Intersection

C – IPFL

给定一个字符串 $s$ ,有两种操作:

  1. 交换两个字符;
  2. 交换前一半字符和后一半字符。

$q$ 次操作后,问最终的字符串。

设置一个标志位记录操作 $2$ 的奇偶,若为偶则正常执行操作 $1$ ;若为奇,则执行操作 $1$ 时需要注意此时交换的前后两部分相反。

D – RGB Coloring 2

给定一个 $N$ 个点 $M$ 条边的无向无权图,每个点都不一样。现在对这个图上的点进行染色(颜色集大小为 $3$ ),询问一共有几种不同染色方案。

$N\leq 20$ 。

直接暴搜是 $O(3^n)$ 肯定不行,但是我们发现,如果我们按照 $dfs$ 序枚举每个点的颜色,那么除了第一个点以外的每个点最多只有 $2$ 种可能,复杂度为 $O(n2^n)$ 。

E – Permutation

询问满足以下条件的排列个数:

  1. 大小为 $N$ ;
  2. 前 $X_i$ 个数中不超过 $Z_i$ 个数 $\leq Y_i$ (这种限制一共 $M$ 个)。

$N\leq 18, M\leq 100$ 。

$N\leq 18$ 提示我们显然可以状压,我们用 $dp_S$ 表示前 $|S|$ 个数恰好是集合 $S$ 时的合法情况数,转移考虑每次向 $S$ 中加入一个数 $x$ ,并且满足前 $|S|+1$ 个数的限制即可。这利用了前 $|S|$ 个数的限制不会被后续加入的数影响的性质。

F – Graph Smoothing

给定一个 $N$ 个点,$M$ 条边的无向无权图,每个点初始有一个点权 $A_i$ 。询问执行以下操作 $K$ 次后,每个点的点权是多少?每次操作指的是:独立等概率地选择一条边,然后将这条边两个端点的点权改写为他们的算术平均值。

$N\leq 100, K\leq 10^9$ 。

考虑每一次操作对所有点的影响,由于每一次操作都是等概率地选中 $M$ 条边中的一条且每一轮操作独立,因此我们可以写出每一个点在这一轮操作后的期望权值:
$$
\begin{aligned}
dp[u][i+1]=\frac{1}{M}(\sum_{v}\frac{dp[u][i]+dp[v][i]}{2} + (M-|v|)dp[u][i])
\end{aligned}
$$
$dp[u][i]$ 表示节点 $u$ 在第 $i$ 轮操作后的期望,上式中 $v$ 是与点 $u$ 相邻的点集。

注意到这可以看作是一个矩阵形式,$K$ 次迭代实际上就是这个矩阵的 $K$ 次方,因此我们可以使用矩阵快速幂在 $O(N^3\log(K))$ 的复杂度下解决本问题。

暂无评论

发送评论 编辑评论


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