首页 > 其他分享 >题解:AtCoder Beginner Contest AT_abc380_d ABC380D Strange Mirroring

题解:AtCoder Beginner Contest AT_abc380_d ABC380D Strange Mirroring

时间:2024-12-06 22:14:28浏览次数:7  
标签:10 Beginner AtCoder 题解 复杂度 二号 一号 字符串

题目大意

给定一个字符串 $S$,执行 $10^{100}$ 次以下操作:

  • 首先,令字符串 $T$ 为字符串 $S$ 中所有大写字母变为小写字母,小写字母变为大写字母的结果。
  • 其次,将 $T$ 拼接在 $S$ 后面。

接下来,有一些询问:

  • 请输出在所有操作执行完成之后 $S$ 的第 $K$ 个字母。

思路

乍一看,好大的数据范围!这题真难!

仔细思考一番发现,我们可以令原始的 $S$ 为一号串,刚开始$T$ 为二号串,然后每一次操作完的字符串就是一号串和二号串的组合。

于是,这题是……找规律?

以下内容为考场上研究的内容:

1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
1  2  2  1  2  1  1  2  2  1  1  2  1  2  2  1  2  1  1  2  1  2  2  1  1  2  2  1  2  1  1  2  2  1  1  2  1  2  2  1  1  2  2  1  2  1  1  2  1  2  2  1  2  1  1  2  2  1  1  2  1  2  2  1

1           2           3           4           5           6           7           8           9           10          11          12          13          14          15          16
1           2           2           1           2           1           1           2           2           1           1           2           1           2           2           1

1                                               2                                               3                                               4                                     
1                                               2                                               2                                               1                                     

解释一下,这堆东西每两行为一组,每组中第一行为位置,第二行为编号(一或二)。第一组是刚才说的一号二号串的组合,第二组就是把第一组中的 1 2 2 1 看作一号串,2 1 1 2 看作二号串,第三组同理。

规律的话嘛,就是可以发现每一层的规律都一样,最后一层就是 1 2 2 1。当然不能直接计算出来了,不过可以递归。单次查询的时间复杂度不高,递归调用的时间复杂度较为合理。$dfs(x)$ 的时间复杂度为 $O(log_4x)$,可以解决本题。

代码

Submission #59860658

标签:10,Beginner,AtCoder,题解,复杂度,二号,一号,字符串
From: https://www.cnblogs.com/thrift/p/18591498

相关文章

  • 题解:AtCoder Beginner Contest AT_abc373_d ABC373D Hidden Weights
    题目传送门题目翻译给你一个$N$个点,$M$条边的有向图,其中边有边权。现在让你给每一个点设置一个点权$a$,使得对于任意两点$x$和$y$,如果$x$到$y$有一条边,边权为$w$,那么需要满足$a_y-a_x=w$。现在让你输出一组合法的分配方案,题目保证存在,输出任意一组都行。思路1(注意......
  • 题解:[USACO07DEC] Sightseeing Cows G
    洛谷P2868题目大意有个$n$个点,$m$条边的有向图,点有点权,边有边权。现在要找出一个环,使得点权和与边权和的比值最大。思路既然说要使得点权和与边权和的比值最大,那么就会想到$01$分数规划。二分答案就不用说了,重点是这个$check$函数。$01$分数规划的板子中要检查的是......
  • 题解:AT_abc371_c [ABC371C] Make Isomorphic
    题目大意有两个简单无向图,你每一次可以给第二个图添上或去掉一条边,有相应花费,问将两个图变为同构最少需要花费多少钱。思路观察数据范围,可以发现$N$非常小,可以考虑枚举全排列。所以我们就暴力枚举$1$到$N$,把这个当前排列记在一个数组里,$t[i]$表示在第一个图中点$i$对应......
  • 题解:AT_abc366_d [ABC366D] Cuboid Sum Query
    这是一个区间求和问题,因为Q很大,所以使用前缀和。N不超过100,所以在Q次询问中嵌套一次O(n)的循环是不会超时的。令s[i][j][k]表示第i层中左上角为(1,1),右下角为(j,k)的矩形中所有元素的和。s[i][j][k]=s[i][j-1][k]+s[i][j][k-1]-s[i][j-1][k-1]+a[i][j][k];然后在Q次询问中,枚举层数......
  • 题解:AT_abc369_e [ABC369E] Sightseeing Tour
    题目大意给定一个$N$个点,$M$条边的无向图。其中边有边权。有$Q$次询问,每一次给你$K$条必须经过的边(但是方向没有限制),问从$1$到$N$的最短路长度是多少。思路观察数据范围,可以发现:虽然$M$很大,但是$N$和$K$并不大。$K\le5$,可以暴力枚举每一条边经过时的方向以及......
  • 题解:CF1950F 0, 1, 2, Tree!
    题目链接思路不能形成树的情况:第一,一棵树必须有叶子节点。所以$c=0$的情况就一定不能形成一棵树。其次,可以发现,我们每增加一个度为$2$的节点,叶子节点就也会增加$1$个。所以$a+1\neqc$的情况也肯定不行了。代码片段if(!c||a+1!=c) cout<<"-1"<<endl;......
  • 题解:P4009 汽车加油行驶问题
    题目思路这是一个分层图最短路问题,我们可以使用升维的方法来完成本题。因为存在加油付费的问题,边权不一定为$1$,所以不能使用广搜来做。数据范围不大:$N\le100$。可以使用SPFA算法完成本题。每一个状态有三个值,分别是当前到达的行、列,以及剩下的油还能走几步。考虑是否需要加油......
  • 题解:P2217 [HAOI2007] 分割矩阵
    思路首先,我们要弄明白题中的方差是什么。公式:$S=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2}$接下来,我们思考一下题目怎么做。数据很小,于是想到了暴搜。但是时间复杂度有点难以接受啊,优化一下吧。有一种很有效的优化,那就是广为人知的记忆化搜索。它能使所有......
  • 题解:AT_abc368_d[ABC368D] Minimum Steiner Tree
    题目大意题目给定一棵由$N$个节点组成的无根树,删除其中的一些点和边,使剩下的点和边仍然能够组成一棵树,且包含给定的$K$个特殊点,问最少剩下几个点。思路我们可以发现,这棵无根树的根必须是给定的特殊点之一,不然根节点就可以删除,答案就不是最优。所以我们使用深度优先搜索遍......
  • 题解:AT_abc368_c [ABC368C] Triple Attack
    思路$N$很大,导致$T$可能也会很大,所以一遍一遍的模拟就会超时。我们发现,题中有一个要求:每次必须打离自己最近的活着的敌人。我们就只用枚举每个敌人即可,在枚举的过程中计算答案。细节处理这道题有点难度,因为$T$是$3$的倍数时能量会变成$3$。这是个周期问题,自然会想到除......