首页 > 其他分享 >题解 [ABC242D] ABC Transform

题解 [ABC242D] ABC Transform

时间:2024-01-20 11:47:01浏览次数:26  
标签:字符 ABC const 题解 LL Transform dfs 时刻

【洛谷博客】

很巧妙的一道题。

题意

给定一个字符串 \(S\),只包含字符 ABC

每过一个时刻,字符会发生变化:A\(\to\)BCB\(\to\)CAC\(\to\)AB

设 \(0\) 时刻为 \(S_0=S\)。

进行 \(Q\) 次询问,每次询问时刻 \(t\) 时,字符串 \(S_t\) 中第 \(k\) 个字符。

分析

为了方便处理,我这里将所有下标减一。

经过观察可以得出,\(t \ (t>0)\) 时刻的第 \(k\) 个字符,一定是由 \(t-1\) 时刻的第 \(\left\lfloor\dfrac k 2\right\rfloor\) 个字符变化而来的。

如果 \(k \bmod 2 = 0\) 则是变化后的第一个字符,否则是第二个。

此时就可以倒推出 \(0\) 时刻对应的字符,再返回得到答案。

但是发现这样一个递归求解的复杂度是 \(O(t)\) 的,无法接受。

\(\log_2 k + 1\) 次操作后 \(k=0\) 且不会再变,此时构成了一个 ABC 的循环节。

单次询问时间复杂度 \(O(\min(t,\log_2 k))\)。

代码

//the code is from chenjh
#include<cstdio>
#define MAXN 100005
using namespace std;
typedef long long LL;
char s[MAXN];
const char T[3][3]={"BC","CA","AB"};//打表每种字符对应的情况,避免大量的分类讨论。
char dfs(const LL&t,const LL&k){return k?(t?T[dfs(t-1,k>>1)-'A'][k&1]:s[k]):(s[0]-'A'+t%3)%3+'A';}//k=0 不再变化时,直接由循环节得出,否则如果 t=0 返回第 k 位字符,否则获取上个时刻的字符。
int main(){
	int q;
	scanf("%s %d",s,&q);
	for(LL t,k;q--;) scanf("%lld%lld",&t,&k),putchar(dfs(t,k-1)),putchar('\n');//因为下标减一,所以查询的时候也要减一。
	return 0;
}

标签:字符,ABC,const,题解,LL,Transform,dfs,时刻
From: https://www.cnblogs.com/Chen-Jinhui/p/17976207/solution-at-abc242-d

相关文章

  • 题解 [ABC144E] Gluttony
    【洛谷博客】题意翻译很清楚,略。分析经过观察最优方案一定是消化代价小的配难消化的菜。所以将\(F\)从小到大排序,\(A\)从大到小排序,当然也可以反着来。因为有\(K\)次修行的机会,难以直接贪心。因为随着时间增加,修行的使用次数会减少,存在单调性。所以考虑使用二分答案转......
  • 题解 [ABC186F] Rook on Grid
    【洛谷博客】有一点难度,但不多。题意一个\(H\timesW\)的地图上有\(M\)个障碍物。有一辆车在\((1,1)\),一次行动可以向下或向右移动任意格(不得穿过障碍物)。求这辆车在最多两次行动中可能到达多少个格子。分析车有四种选择:向右、向下、先向右再向下、先向下再向右。然......
  • 题解 [ABC186E] Throne
    【洛谷博客】同余方程板子题,没过的可以先去看看。题意翻译给的很清楚。分析看到这个转圈圈的就很容易想到同余方程。为了方便处理,我们就将编号全部减\(1\),于是编号就变成\(0\simN-1\)。然后就可以很容易的列出同余方程:\[S+Kx\equiv0\pmod{N}\]移项可得:\[Kx\equ......
  • 题解 [ABC236D] Dance
    【洛谷博客】简单搜索题。题意将\(2N\)个人两两分组,每两个人配对会有一个快乐值,求快乐值异或最大。分析观察数据范围\(N\le8\),很容易想到搜索。又因为\(2N\le16\),所以直接枚举全排列不可行,需要做一点优化。第\(i\)个人和第\(j\)个人配对产生的快乐值,与第\(j\)......
  • 洛谷入门赛 #19 题解
    比赛传送门A-分饼干I将三盒饼干按数量排序。若较小的两盒饼干数之和大于另一盒饼干,则将较小的两盒饼干奖励给第一名,另一盒奖励给第二名;若较大的一盒饼干数大于另外两盒之和,则将较大的一盒奖励给第一名,另外两盒奖励给第二名。B-分饼干II每个人分到的饼干数都不同,即可以看......
  • CF1898D Absolute Beauty 题解
    Problem-D-Codeforcesemm,怎么说呢?因为想起之前那个直接去掉绝对值取最大时就是答案的影响,这题并没有想到正确做法。(或者说想到了正确做法,但是因为不知道一个性质所以要大分讨)假如原题满足\(a_i<b_i\),则我们把原题抽象成线段\((a_i,b_i)\),考虑两条线段合并时的情况:......
  • P8512 [Ynoi Easy Round 2021] TEST_152 题解
    题目链接:[YnoiEasyRound2021]TEST_152题目比较抽象,翻译一下。就是有\(n\)个操作,每个操作为\((l_i,r_i,v_i)\)表示把长为\(m\)序列\(a\)的\([l_i,r_i]\)上的数覆盖为\(v_i\)。而查询为\([time_l,time_r]\),表示从\(time_l\)的操作开始执行,到\(time_r\)操作结......
  • [OI] 洛谷P1001过河卒题解
    [NOIP2002普及组]过河卒题目描述棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点。卒行走的规则:可以向下、或者向右。同时在棋盘上\(C\)点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,\(A\)点\((0......
  • [BZOJ3786] 星系探索 题解
    题目链接:\(BZOJ\)本题通过\(dyf\_DYF\)的题解理解\(ETT\),代码则借鉴\(lcyfrog\)的题解,图片则使用了何太郎的题解。在此笔者感谢这三位神犇。声明变量:\(ls\):左儿子\(rs\):右儿子\(sz\):子树大小\(rk\):对应堆值\(fa\):节点父亲\(sm\):子树权值和\(p\):\(1/-1\)表示第一......
  • P4345 [SHOI2015] 超能粒子炮·改 题解
    P4345[SHOI2015]超能粒子炮·改题解求\[\sum_{i=0}^k\binom{n}{i}\pmod{2333}\]思路这种模数小的组合数计数问题可以考虑Lucas定理,试试呗。如果按余数分类不好优化,可以按商分类求和,这样一来套个前缀和可以得到一个递推式,注意最后一块商可能是不整的,单独拿出来即可。......