首页 > 其他分享 >ARC119F 题解

ARC119F 题解

时间:2024-05-31 23:26:16浏览次数:14  
标签:color 题解 texttt ARC119F add green black red

blog。被自动机做法恶心到了,现在也来恶心一下大家。

\(\color{red}\textbf{以下内容强烈建议自己推一遍,几乎一半是重复的,推完会很爽,并且理解会很深。}\)

\(\color{red}\textbf{以下内容不建议用} \LaTeX\textbf{书写,因为写起来像在吃大便。}\)


暴力 \(dp_{i,a,b}\) 表示当前在 \(i\),最近的 A/B 在 \(a/b\),方案数。这个是三次方的。

考虑优化状态:比如说 \(\texttt{BAAAAA...AAB}\) 当前在 B,显然傻逼都知道跳过去最优,那么中间无论有几个 A,state 都是相同的,可以尝试记为同一个 state。

于是直接暴力枚举转移,可以实现一个自动机。

提取大便

开始吃大便!下面标绿的是状态,标红的是当前所在处。

  • \(\color{green}\texttt{A}\) 指 \(\texttt{B}\color{red}\texttt{A}\),意为当前在 A,前一个是 B,后面的不重要。
  • \(\color{green}\texttt{B}\) 指 \(\texttt{A}\color{red}\texttt{B}\)。
  • \(\color{green}\texttt{AA}\) 指 \(\texttt{B}\color{red}\texttt{A}\color{black}\texttt{A}\)。
  • \(\color{green}\texttt{BB}\) 指 \(\texttt{A}\color{red}\texttt{B}\color{black}\texttt{B}\)。
  • \(\color{green}\texttt{AAA}\) 指 \(\texttt{B}\color{red}\texttt{A}\color{black}\texttt{AA}\)。
  • \(\color{green}\texttt{BBB}\) 指 \(\texttt{A}\color{red}\texttt{B}\color{black}\texttt{BB}\)。
  • \(\color{green}\texttt{AAAA}\) 指 \(\color{red}\texttt{B}\color{black}\texttt{AAA..AA}\)。注意即使 \(cnt_A<4\) 但是从 \(\texttt{B}\) 直接跳最优的话,也归属于这个 state。
  • \(\color{green}\texttt{BBBB}\) 指 \(\color{red}\texttt{A}\color{black}\texttt{BBB..BB}\)。同上。
  • \(\color{green}\texttt{AB}\) 指 \(\texttt{?}\color{red}\texttt{A}\color{black}\texttt{B}\)。
  • \(\color{green}\texttt{BA}\) 指 \(\texttt{?}\color{red}\texttt{B}\color{black}\texttt{A}\)。
  • \(\color{green}\texttt{@}\) 指 \(\color{red}\texttt{?}\)。注意这里问号的意义是「既可以当作 A 也可以当作 B」。
  • \(\color{green}\texttt{@A}\) 指 \(\color{red}\texttt{?}\color{black}\texttt{A}\)。
  • \(\color{green}\texttt{@B}\) 指 \(\color{red}\texttt{?}\color{black}\texttt{B}\)。

品尝大便

总计 \(13\) 个状态。转移考虑添加 \(\texttt{A/B}\),然后尝试用最小代价跑到定义过的状态去。

对于状态 \(\color{green}\texttt{A}\) 与 \(\color{green}\texttt{B}\),我们有:

  • \(\texttt{B}\color{red}\texttt{A}\color{black}\to\texttt{B}\color{red}\texttt{A}\color{black}\texttt{A}\):不用走即有状态 \(\texttt{B}\color{red}\texttt{A}\color{black}\texttt{A}\),\(\color{green}\texttt{A}\color{black}\xrightarrow{0}\color{green}\texttt{AA}\color{black}\ (\text{add A})\)。
  • \(\texttt{B}\color{red}\texttt{A}\color{black}\to\texttt{B}\color{red}\texttt{A}\color{black}\texttt{B}\):不用走即有状态 \(\color{darkgrey}\texttt{B}\color{red}\texttt{A}\color{black}\texttt{B}\),\(\color{green}\texttt{A}\color{black}\xrightarrow{0}\color{green}\texttt{AB}\color{black}\ (\text{add B})\)。
  • \(\texttt{A}\color{red}\texttt{B}\color{black}\to\texttt{A}\color{red}\texttt{B}\color{black}\texttt{A}\):不用走即有状态 \(\color{darkgrey}\texttt{A}\color{red}\texttt{B}\color{black}\texttt{A}\),\(\color{green}\texttt{B}\color{black}\xrightarrow{0}\color{green}\texttt{BA}\color{black}\ (\text{add A})\)。
  • \(\texttt{A}\color{red}\texttt{B}\color{black}\to\texttt{A}\color{red}\texttt{B}\color{black}\texttt{B}\):不用走即有状态 \(\texttt{A}\color{red}\texttt{B}\color{black}\texttt{B}\),\(\color{green}\texttt{B}\color{black}\xrightarrow{0}\color{green}\texttt{BB}\color{black}\ (\text{add B})\)。

对于状态 \(\color{green}\texttt{AA}\) 与 \(\color{green}\texttt{BB}\),我们有:

  • \(\texttt{B}\color{red}\texttt{A}\color{black}\texttt{A}\to\texttt{B}\color{red}\texttt{A}\color{black}\texttt{AA}\):不用走即有状态 \(\texttt{B}\color{red}\texttt{A}\color{black}\texttt{AA}\),\(\color{green}\texttt{AA}\color{black}\xrightarrow{0}\color{green}\texttt{AAA}\color{black}\ (\text{add A})\)。
  • \(\texttt{B}\color{red}\texttt{A}\color{black}\texttt{A}\to\texttt{B}\color{red}\texttt{A}\color{black}\texttt{AB}\):往后走一步即有状态 \(\color{grey}\texttt{BA}\color{red}\texttt{A}\color{black}\texttt{B}\),\(\color{green}\texttt{AA}\color{black}\xrightarrow{1}\color{green}\texttt{AB}\color{black}\ (\text{add B})\)。
  • \(\texttt{A}\color{red}\texttt{B}\color{black}\texttt{B}\to\texttt{A}\color{red}\texttt{B}\color{black}\texttt{BA}\):往后走一步即有状态 \(\color{grey}\texttt{AB}\color{red}\texttt{B}\color{black}\texttt{A}\),\(\color{green}\texttt{BB}\color{black}\xrightarrow{1}\color{green}\texttt{BA}\color{black}\ (\text{add A})\)。
  • \(\texttt{A}\color{red}\texttt{B}\color{black}\texttt{B}\to\texttt{A}\color{red}\texttt{B}\color{black}\texttt{BB}\):不用走即有状态 \(\texttt{A}\color{red}\texttt{B}\color{black}\texttt{BB}\),\(\color{green}\texttt{BB}\color{black}\xrightarrow{0}\color{green}\texttt{BBB}\color{black}\ (\text{add B})\)。

对于状态 \(\color{green}\texttt{AAA}\) 与 \(\color{green}\texttt{BBB}\),我们有:

  • \(\texttt{B}\color{red}\texttt{A}\color{black}\texttt{AA}\to\texttt{B}\color{red}\texttt{A}\color{black}\texttt{AAA}\),往前走一步即有状态 \(\color{red}\texttt{B}\color{black}\texttt{AAAA}\),\(\color{green}\texttt{AAA}\color{black}\xrightarrow{1}\color{green}\texttt{AAAA}\color{black}\ (\text{add A})\)。
  • \(\texttt{B}\color{red}\texttt{A}\color{black}\texttt{AA}\to\texttt{B}\color{red}\texttt{A}\color{black}\texttt{AAB}\),发现走一步啥都到不了,而走两步可以到 \(\color{grey}\texttt{BAA}\color{red}\texttt{A}\color{grey}\texttt{B}\)(往后两步)或 \(\color{grey}\texttt{BAAA}\color{red}\texttt{B}\)(往前一步然后跳过去),此时同时可得两个状态 \(\color{green}\texttt{A}\) 与 \(\color{green}\texttt{B}\),故 \(\color{green}\texttt{AAA}\color{black}\xrightarrow{2}\color{green}\texttt{@}\color{black}\ (\text{add B})\)。
  • \(\texttt{A}\color{red}\texttt{B}\color{black}\texttt{BB}\to\texttt{A}\color{red}\texttt{B}\color{black}\texttt{BBA}\),同上,\(\color{green}\texttt{BBB}\color{black}\xrightarrow{2}\color{green}\texttt{@}\color{black}\ (\text{add A})\)。
  • \(\texttt{A}\color{red}\texttt{B}\color{black}\texttt{BB}\to\texttt{A}\color{red}\texttt{B}\color{black}\texttt{BBB}\),往前走一步即有状态 \(\color{red}\texttt{A}\color{black}\texttt{BBBB}\),\(\color{green}\texttt{BBB}\color{black}\xrightarrow{1}\color{green}\texttt{BBBB}\color{black}\ (\text{add B})\)。

对于状态 \(\color{green}\texttt{AAAA}\) 与 \(\color{green}\texttt{BBBB}\),我们有:

  • \(\color{red}\texttt{B}\color{black}\texttt{AAA..AA}\to\color{red}\texttt{B}\color{black}\texttt{AAA..AAA}\),不用动即为原状态,\(\color{green}\texttt{AAAA}\color{black}\xrightarrow{0}\color{green}\texttt{AAAA}\color{black}\ (\text{add A})\)。
  • \(\color{red}\texttt{B}\color{black}\texttt{AAA..AA}\to\color{red}\texttt{B}\color{black}\texttt{AAA..AAB}\),跳过大段 \(\texttt{A}\) 即有状态 \(\color{grey}\texttt{BAAA..AA}\color{red}\texttt{B}\),\(\color{green}\texttt{AAAA}\color{black}\xrightarrow{1}\color{green}\texttt{B}\color{black}\ (\text{add B})\)。
  • \(\color{red}\texttt{A}\color{black}\texttt{BBB..BB}\to\color{red}\texttt{A}\color{black}\texttt{BBB..BBA}\),跳过大段 \(\texttt{B}\) 即有状态 \(\color{grey}\texttt{ABBB..BB}\color{red}\texttt{A}\),\(\color{green}\texttt{BBBB}\color{black}\xrightarrow{1}\color{green}\texttt{A}\color{black}\ (\text{add A})\)。
  • \(\color{red}\texttt{A}\color{black}\texttt{BBB..BB}\to\color{red}\texttt{A}\color{black}\texttt{BBB..BBB}\),不用动即为原状态,\(\color{green}\texttt{BBBB}\color{black}\xrightarrow{0}\color{green}\texttt{BBBB}\color{black}\ (\text{add B})\)。

对于状态 \(\color{green}\texttt{AB}\) 与 \(\color{green}\texttt{BA}\),我们有:

  • \(\texttt{?}\color{red}\texttt{A}\color{black}\texttt{B}\to\texttt{?}\color{red}\texttt{A}\color{black}\texttt{BA}\),发现不能不走,而走一步可以到 \(\color{grey}\texttt{?A}\color{red}\texttt{B}\color{grey}\texttt{A}\)(往后一步)或 \(\color{grey}\texttt{?AB}\color{red}\texttt{A}\)(跳过 \(\texttt{B}\)),此时同时可得两个状态 \(\color{green}\texttt{A}\) 与 \(\color{green}\texttt{B}\),故 \(\color{green}\texttt{AB}\color{black}\xrightarrow{1}\color{green}\texttt{@}\color{black}\ (\text{add A})\)。
  • \(\texttt{?}\color{red}\texttt{A}\color{black}\texttt{B}\to\texttt{?}\color{red}\texttt{A}\color{black}\texttt{BB}\),很明显,无论后续再加 \(\texttt{A/B}\) 都会跳过中间的 \(\texttt{B}\),故 \(\color{green}\texttt{AB}\color{black}\xrightarrow{0}\color{green}\texttt{BBBB}\color{black}\ (\text{add B})\)。
  • \(\texttt{?}\color{red}\texttt{B}\color{black}\texttt{A}\to\texttt{?}\color{red}\texttt{B}\color{black}\texttt{AA}\),同上,\(\color{green}\texttt{BA}\color{black}\xrightarrow{0}\color{green}\texttt{AAAA}\color{black}\ (\text{add A})\)。
  • \(\texttt{?}\color{red}\texttt{B}\color{black}\texttt{A}\to\texttt{?}\color{red}\texttt{B}\color{black}\texttt{AB}\),同上上上,\(\color{green}\texttt{BA}\color{black}\xrightarrow{1}\color{green}\texttt{@}\color{black}\ (\text{add B})\)。

对于状态 \(\color{green}\texttt{@}\),我们有:

  • \(\color{red}\texttt{?}\color{black}\to\color{red}\texttt{?}\color{black}\texttt{A}\),不用走即有状态 \(\color{red}\texttt{?}\color{black}\texttt{A}\),\(\color{green}\texttt{@}\color{black}\xrightarrow{0}\color{green}\texttt{@A}\color{black}\ (\text{add A})\)。
  • \(\color{red}\texttt{?}\color{black}\to\color{red}\texttt{?}\color{black}\texttt{B}\),不用走即有状态 \(\color{red}\texttt{?}\color{black}\texttt{B}\),\(\color{green}\texttt{@}\color{black}\xrightarrow{0}\color{green}\texttt{@A}\color{black}\ (\text{add B})\)。

对于状态 \(\color{green}\texttt{@A}\) 与 \(\color{green}\texttt{@B}\),我们有:

  • \(\color{red}\texttt{?}\color{black}\texttt{A}\color{black}\to\color{red}\texttt{?}\color{black}\texttt{AA}\),最优显然是将 \(\texttt{?}\to\texttt{B}\) 然后跳过大段 \(\texttt{A}\),所以 \(\color{green}\texttt{@A}\color{black}\xrightarrow{0}\color{green}\texttt{AAAA}\color{black}\ (\text{add A})\)。
  • \(\color{red}\texttt{?}\color{black}\texttt{A}\color{black}\to\color{red}\texttt{?}\color{black}\texttt{AB}\),走一步可以到 \(\color{grey}\texttt{A}\color{red}\texttt{A}\color{grey}\texttt{B}\)(将 \(\texttt{?}\to\texttt{A}\) 然后向后走一步)或 \(\color{grey}\texttt{BA}\color{red}\texttt{B}\)(将 \(\texttt{?}\to\texttt{B}\) 然后向后走跳一步),此时同时可得两个状态 \(\color{green}\texttt{A}\) 与 \(\color{green}\texttt{B}\),所以 \(\color{green}\texttt{@A}\color{black}\xrightarrow{1}\color{green}\texttt{@}\color{black}\ (\text{add B})\)。
  • \(\color{red}\texttt{?}\color{black}\texttt{B}\color{black}\to\color{red}\texttt{?}\color{black}\texttt{BA}\),同上,\(\color{green}\texttt{@B}\color{black}\xrightarrow{1}\color{green}\texttt{@}\color{black}\ (\text{add A})\)。
  • \(\color{red}\texttt{?}\color{black}\texttt{B}\color{black}\to\color{red}\texttt{?}\color{black}\texttt{BB}\),同上上上,\(\color{green}\texttt{@B}\color{black}\xrightarrow{1}\color{green}\texttt{@}\color{black}\ (\text{add B})\)。

走出厕所

最后定义 \(dp_{i,j,s}\) 表示前 \(i\) 个点走了 \(j\) 步,当前所在状态为 \(s\),方案数。

初始化 \(dp_{0,0,\color{green}\texttt{?}\color{black}}=1\),跑上述自动机刷表转移即可。

小细节:状态所在的位置不是最终 \(n+1\) 点所在位置,所以还需要记一下 \(dis_s\) 表示状态 \(s\) 还要走多少步到达终点。

具体地,\(dis_{\color{green}\texttt{AA}}=dis_{\color{green}\texttt{BB}}=dis_{\color{green}\texttt{AAA}}=dis_{\color{green}\texttt{BBB}}=2\),其余均为 \(1\)。判一下统计答案即可。

实现

可以用 map 记录每个状态的 id,这样写转移会清晰很多。

code,时间复杂度 \(O(nk|S|)\),其中 \(|S|=13\)。

标签:color,题解,texttt,ARC119F,add,green,black,red
From: https://www.cnblogs.com/liangbowen/p/18225395

相关文章

  • 【题解】UOJ#284 快乐游戏鸡
    题目大意给出一棵有\(n\)个节点的树,编号为\(i\)的点权为\(w_i\),在树上通过一条边需要花费时间\(1\),如果能通过一个点权为\(w_i\)的点当且仅当此时的死亡次数大于等于\(w_i\),否则会立即回到起点并且死亡次数加一。给出\(q\)组询问,每组询问给出起点\(s\)和终点\(t\),......
  • CF1981D题解
    CF1981D题解前言标签:筛法,欧拉回路。赛后过的,构造一眼秒,欧拉图写错了,多少有点抽象。题意构造一个长度为\(n\)的序列\(a\),需要满足:\(\forall1\lei\len\),\(1\lea_i\le3\times10^5\)。\(\forall1\lei<j<n\),\(a_i\timesa_{i+1}\nea_j\timesa_{j+1}\)。......
  • 题解合集
    CF1270FAwesomeSubstringsCF1860CGameonPermutationP10161[DTCPC2024]小方的疑惑10P10236[yLCPC2024]D.排卡P10368「LAOI-4」ColorsP10369「LAOI-4」MexTower(Easyver.)P10370「LAOI-4」MexTower(Hardver.)P2398GCDSUMP2568GCDP8445射命丸文的取材......
  • CF Round946(div3) 题解
    目录946(div3)ABCDEG946(div3)A每个屏幕3X5,可放2个2X2,其余可填7个1X1先算2X2需要多少个屏幕,再算当前屏幕是否可放下所有1X1,根据1X1的量加屏幕.voidfunc(){ inta,b; cin>>a>>b; intans=(b+1)/2; intstp=a-(ans*15-4*b); if(stp>0) ans+=(s......
  • P2215 [HAOI2007] 上升序列题解
    题目大意对于一个集合$S$,对于$S$中长度为$m$的子序列$P$,在集合$P$中如果$P_1<P_2<...<P_m$那么我们称$P$为$S$的一个上升序列。如果有多个$P$满足条件我们就输出最小的那个,如果没有完成条件的$P$则输出Impossible。思路对于一个含有$......
  • P2266 爱的供养题解
    题目大意给你一个矩阵$w$,大小为$n\timesm$,然后你每次都从一个宝藏点开始去走旁边$T-1$个点施法,施法过的点就不用再走了,施法不需要耗费体力但是每一次从一个点走到另一个点需要耗费的权值为这两个点的高度差,你每次可以走的方向是上下左右。求最小需要耗费的体力。......
  • P10526 [XJTUPC2024] 命令行题解
    题目大意对于一个字符串$s$在输入的最后一行读入的字符,如个字符不为$E\(,\)T\(,\)B$那么这一个字符就添加至字符串$s$的末尾。对于操作$B$那么执行删除字符串$s$的最后一个字符,如果$s$为空那么跳过这个操作。对于操作$T$找到一个以字符串......
  • P10530 [XJTUPC2024] 生命游戏 题解
    题目大意一棵树一共$n$个点如果有$k$个点与某一个点相连那么这一轮的结尾这个点就会死。思路这道题有几个坑!并没有说哪一个节点是根节点。双向边记得开双倍数组。等这一轮的点消除完了才能再次判断哪一些点可以消除。首先我们创建一个数组$Size_{n}$来......
  • CF/505/D 题解
    思路这道题的思路其实是根据样例图片来的。首先第一张:这张图片可以得知$n$个点没有环的时候最少需要$n-1$个点。再看第二张:这个图确实很难思考,但稍微思考一下如果我们把含有一个强连通分量的图变成一整个强连通图。这个图的边数不就变成$n$了吗?来推一下......
  • P6342 [CCO2017] Vera 与道路建设 题解
    题目大意对于一个图w一共有v个点点的编号为1,2,...,v,对于点a与点b如果满足$a\tob$且$b\toa$使得每一条道路都只走过一次,那么我们称$a,b$为完美点对,当一个联通图只有$k$个完美点对时,称这个联通图为美丽公路网,要求求出一个美丽公路网......