在2020年A卷省选day2t2有类似建立trie的技巧。

题目链接

显然是建一棵三叉trie树,代表0/1/2

对这棵trie树,我们需要支持子树交换和全局加1

考虑第一个操作怎么做?直接打个懒标记tag记录是否交换即可,因为交换偶数次次等于没交换

现在比较困难的是第二个操作,全局加1还有进位处理,相当于就是轮换,然后1变成2,0变成1,但2变成0的时候需要继续往下递归0处理进位(相当于就是对进位的位继续第二个操作),注意需要写pushdown,和写线段树的pushdown差不多

最后统计答案的时候,记得对整颗树pushdown,因为可能有标记还没下传完,具体细节类比线段树即可,然后答案就根据字典树的 \(end[i]\) 来搞就行。

时间复杂度: \(O(N)\)

代码:

#include<bits/stdc++.h>

#define maxn 5000005

using namespace std;

template<class T>

inline T read(){
T r=0,f=0;
char c;
while(!isdigit(c=getchar()))f|=(c=='-');
while(isdigit(c))r=r*10+(c^48),c=getchar();
return f?-r:r;
} char s[maxn]; int n,len; int pow3[15],ans[maxn]; namespace TRIE{ int trie[maxn][3],tag[maxn],tot=1,ed[maxn]; inline void insert(int x){
int u=1,tmp=x;
for(int i=1;i<=n;i++,x/=3){
if(!trie[u][x%3])trie[u][x%3]=++tot;
u=trie[u][x%3];
}
ed[u]=tmp;
} inline void updateS(int x){
tag[x]^=1;
swap(trie[x][1],trie[x][2]);
} inline void pushdown(int x){
if(!tag[x])return;
updateS(trie[x][0]);
updateS(trie[x][1]);
updateS(trie[x][2]);
tag[x]=0;
} void updateR(int x){
if(!x)return;
pushdown(x);
int tmp=trie[x][2];
trie[x][2]=trie[x][1];
trie[x][1]=trie[x][0];
trie[x][0]=tmp;
updateR(trie[x][0]);
} void calc(int x){
if(!x)return;
pushdown(x);
calc(trie[x][0]);
calc(trie[x][1]);
calc(trie[x][2]);
} void getans(int x){
int u=1,tmp=x;
for(int i=1;i<=n;i++,x/=3)
u=trie[u][x%3];
ans[ed[u]]=tmp;
} } void work(){
n=read<int>();
scanf("%s",s+1);
len=strlen(s+1),pow3[0]=1;
for(int i=1;i<=n;i++)
pow3[i]=pow3[i-1]*3;
for(int i=0;i<pow3[n];i++)TRIE::insert(i);
for(int i=1;i<=len;i++){
if(s[i]=='S')TRIE::updateS(1);
else TRIE::updateR(1);
}
TRIE::calc(1);
for(int i=0;i<pow3[n];i++)
TRIE::getans(i);
for(int i=0;i<pow3[n];i++)
printf("%d ",ans[i]);
puts("");
} int main(){
work();
return 0;
}

AGC044C Strange Dance 题解的更多相关文章

  1. Hdoj 1548.A strange lift 题解

    Problem Description There is a strange lift.The lift can stop can at every floor as you want, and th ...

  2. HDU 1548 A strange lift 题解

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  3. Hdoj 2899.Strange fuction 题解

    Problem Description Now, here is a fuction: F(x) = 6 * x^7+8x^6+7x^3+5x^2-yx (0 <= x <=100) Ca ...

  4. CF1506A Strange Table 题解

    Content 给定一个 \(n\times m\) 的矩阵.一开始,\((1,1)\) 所在位置上面的数是 \(1\),随后先由上往下将这一列中的所有位置上面填上 \(2,3,\dots,n\),再 ...

  5. CF1455A Strange Functions 题解

    Content 定义一个函数 \(f(x)\) 为 \(x\) 翻转并去掉前导零之后的数,现在有 \(t\) 组询问,每组询问给定一个整数 \(n\),请求出对于所有的 \(1\leqslant x\ ...

  6. CCF统一省选 Day2 题解

    此题解是教练给我的作业,AK了本场比赛的人,以及认为题目简单的人可以不必看 T1 算法一 暴力枚举对信号站顺序的不同排列,然后对代价取\(\min\)即可. 时间复杂度\(O(m! \cdot n)\ ...

  7. ATcoder Grand Contest总结

    最前面: AT的题都很有思维难度,总结一下一些AT的常规操作 1.对于有操作的题目,如果正面推不行的话考虑倒推,将操作转化,寻找更好的性质 2.模型转化,看到某一种的计算的式子,需要考虑有没有更简化的 ...

  8. POJ2891:Strange Way to Express Integers——题解

    http://poj.org/problem?id=2891 题目大意: k个不同的正整数a1,a2,...,ak.对于一些非负m,满足除以每个ai(1≤i≤k)得到余数ri.求出最小的m. 输入和输 ...

  9. 题解 Strange Housing

    传送门 首先想了黑白染色,发现不会染 其实可以考虑如何动态地维护出这个点集 发现题面里对不在点集之中的点之间的连边没有要求 所以考虑不断向图中加点,为了满足要求,每次取一个与当前新图中相连的点 若它与 ...

  10. [LA] 2031 Dance Dance Revolution

    Dance Dance Revolution Time limit: 3.000 seconds Mr. White, a fat man, now is crazy about a game nam ...

随机推荐

  1. java根据配置文件读取值

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> ...

  2. centOS7 磁盘扩容(2T以上)

    centOS7 磁盘扩容 1.安装parted分区工具 yum install -y parted 2.查看服务器分区情况 #fdisk -l 或者 lsblk 找到新增磁盘名称 例如/dev/sdb ...

  3. jquery中for循环一共几种

    $.each()  第一个参数是循环的对象 , 第二个参数对对象中的每一个元素 执行 function函数 ,function 的第一个参数 i 是索引,item 是 循环对象中的每一个元素.

  4. quarkus实战之五:细说maven插件

    quarkus的maven插件非常重要,管理和构建工程时都离不开,本篇就来一起了解和掌握它 欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com ...

  5. zabbix 添加 zabbix_agentd 服务

    创建服务文件 # /usr/lib/systemd/system/zabbix-agent.service [Unit] Description=Zabbix Agent After=syslog.t ...

  6. Angular: Error: NG0100: ExpressionChangedAfterItHasBeenChecked

    错误原因 当变更检测完成后又更改了表达式的值时,Angular就会抛出ExpressionChangedAfterItHasBeenCheckedError 错误,Angular只会在开发模式下抛出此 ...

  7. python下的jstack - pystack

    背景 python 多进程任务,卡在某个地方没有继续执行也没有报出异常,进程被hang住 日志没有捕获到相关信息,需要知道进程阻塞在哪里,为什么阻塞 jvm提供了jstack.jmap类工具进行性能分 ...

  8. Python 潮流周刊第 14 期(内容摘要)

    你好,我是猫哥.这里每周分享优质的 Python.AI 及通用技术内容,本期分享的全部是英文材料. 本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程. ...

  9. 从浅入深了解.NET Core MVC 2.x全面教程

    一.基础 1.默认配置 使用Kestrel Web Server ASP.NET Core内置--跨平台 IIS集成 UseIIS() UseIISIntergration() Log IConfig ...

  10. Spring Secriuty登录失败错误状态999重定向302

    原因是login.html登录页面有不能加载的静态资源,找出来去掉就好了,比如 bootstrap.min.css 环境 使用Spring Boot Security 3做一个登录功能,使用了一个教程 ...