AGC044C Strange Dance 题解
在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 题解的更多相关文章
- 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 ...
- HDU 1548 A strange lift 题解
A strange lift Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- 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 ...
- CF1506A Strange Table 题解
Content 给定一个 \(n\times m\) 的矩阵.一开始,\((1,1)\) 所在位置上面的数是 \(1\),随后先由上往下将这一列中的所有位置上面填上 \(2,3,\dots,n\),再 ...
- CF1455A Strange Functions 题解
Content 定义一个函数 \(f(x)\) 为 \(x\) 翻转并去掉前导零之后的数,现在有 \(t\) 组询问,每组询问给定一个整数 \(n\),请求出对于所有的 \(1\leqslant x\ ...
- CCF统一省选 Day2 题解
此题解是教练给我的作业,AK了本场比赛的人,以及认为题目简单的人可以不必看 T1 算法一 暴力枚举对信号站顺序的不同排列,然后对代价取\(\min\)即可. 时间复杂度\(O(m! \cdot n)\ ...
- ATcoder Grand Contest总结
最前面: AT的题都很有思维难度,总结一下一些AT的常规操作 1.对于有操作的题目,如果正面推不行的话考虑倒推,将操作转化,寻找更好的性质 2.模型转化,看到某一种的计算的式子,需要考虑有没有更简化的 ...
- POJ2891:Strange Way to Express Integers——题解
http://poj.org/problem?id=2891 题目大意: k个不同的正整数a1,a2,...,ak.对于一些非负m,满足除以每个ai(1≤i≤k)得到余数ri.求出最小的m. 输入和输 ...
- 题解 Strange Housing
传送门 首先想了黑白染色,发现不会染 其实可以考虑如何动态地维护出这个点集 发现题面里对不在点集之中的点之间的连边没有要求 所以考虑不断向图中加点,为了满足要求,每次取一个与当前新图中相连的点 若它与 ...
- [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 ...
随机推荐
- border属性之border-radius
border-radius - 指定每个圆角 如果你在 border-radius 属性中只指定一个值,那么将生成 4 个 圆角. 但是,如果你要在四个角上一一指定,可以使用以下规则: 四个值: 第一 ...
- stegsolve与zsteg的使用
zsteg 介绍:用来检测PNG和BMP中隐藏数据的工具,可以快速提取隐藏信息 使用环境:kali kali自带zsteg,可以用这个指令使用 gem install zsteg 下载完之后查看使用方 ...
- EasyExcel · 写excel
原文地址 通用数据生成 后面不会重复写 private List<DemoData> data() { List<DemoData> list = ListUtils.newA ...
- Django: 后台常用操作
指定状态码 return JsonResponse(data, status=201) Djano删除数据库 删除对应数据库后,删除对应文件 删除对应的记录 Django后台管理 创建超级管理员 py ...
- Docker数据持久化与数据共享
上篇文章的最后我们使用Docker部署了一个纯前端项目,但还有一个很重要的问题就是容器中产生的数据(比如log文件),容器一旦被删除,容器内的所有数据也就没有了,为了避免这个问题我们可以将数据存储到容 ...
- c# .NET 高级编程 高并发必备技巧 - 锁
锁 最为常见的应用就是 高并发的情况下,库存的控制.本次只做简单的单机锁介绍. 直接看代码: 每请求一次库存-1. 假如库存1000,在1000个人请求之后,库存将变为0. public int Re ...
- ImGui界面优化:使用图标字体、隐藏主窗口标题栏
目录 使用图标字体 扩展:内存加载字体 隐藏主窗口标题栏 增加程序退出 改进HideTabBar 窗口最大化 总结 本文主要介绍ImGui应用中的一些界面优化方法,如果是第一次使用ImGui推荐从上一 ...
- 产品代码都给你看了,可别再说不会DDD(四):代码工程结构
这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...
- 论文日记五:QueryInst
导读 实例分割领域21年的SOTA,整个模型结构设计总述为以下: 1)设计了类似于Cascade Mask R-CNN的多阶段迭代优化的bbox和mask预测头: 2)基于query的实例分割方法,延 ...
- 快手根据关键词取商品列表 API 返回值说明
item_search-根据关键词取商品列表 注册开通 ks.item_search 公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) secr ...