#基数排序#CF1654F Minimal String Xoration
分析
有没有一种办法可以将每个 \(j\) 的比较过程同时进行,
可以发现其实这个过程很像后缀排序,实际上只是加号变成了异或,
从低位到高位重新将字符串排名,用同样的方法做到 \(O(2^nn)\)
代码
#include <iostream>
using namespace std;
const int N=300011; string S;
int n,two[N],rk[N],tp[N],Rk[N],M,c[N];
int main(){
ios::sync_with_stdio(0);
cin>>n>>S,two[0]=1;
for (int i=1;i<=n;++i) two[i]=two[i-1]<<1;
for (int i=0;i<two[n];++i) rk[i]=i,tp[i]=S[i]-96;
M=26;
for (int i=1;i<=n;++i){
for (int j=0;j<=M;++j) c[j]=0;
for (int j=0;j<two[n];++j) ++c[tp[rk[j]^two[i-1]]];
for (int j=1;j<=M;++j) c[j]+=c[j-1];
for (int j=two[n]-1;~j;--j) Rk[--c[tp[rk[j]^two[i-1]]]]=rk[j];
for (int j=0;j<=M;++j) c[j]=0;
for (int j=0;j<two[n];++j) ++c[tp[Rk[j]]];
for (int j=1;j<=M;++j) c[j]+=c[j-1];
for (int j=two[n]-1;~j;--j) rk[--c[tp[Rk[j]]]]=Rk[j];
for (int j=0;j<=M;++j) c[j]=0;
Rk[rk[0]]=0;
for (int j=1;j<two[n];++j)
Rk[rk[j]]=Rk[rk[j-1]]+(tp[rk[j]]!=tp[rk[j-1]]||tp[rk[j]^two[i-1]]!=tp[rk[j-1]^two[i-1]]);
for (int j=0;j<two[n];++j) tp[j]=Rk[j];
M=Rk[rk[two[n]-1]];
}
for (int i=0;i<two[n];++i) cout<<S[rk[0]^i];
return 0;
}
#基数排序#CF1654F Minimal String Xoration的更多相关文章
- Codeforces 797C - Minimal string
C. Minimal string 题目链接:http://codeforces.com/problemset/problem/797/C time limit per test 1 second m ...
- Minimal string CodeForces - 797C
Minimal string CodeForces - 797C 题意:有一个字符串s和空串t和u,每次操作可以将s的第一个字符取出并删除然后放到t的最后,或者将t的最后一个字符取出并删除然后放到u的 ...
- CodeForce-797C Minimal string(贪心模拟)
Minimal string CodeForces - 797C Petya 收到一个长度不超过 105 的字符串 s.他拿了两个额外的空字符串 t 和 u 并决定玩一个游戏.这个游戏有两种合法操作: ...
- Minimal string 栈 贪心
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- CodeForces 797C Minimal string:贪心+模拟
题目链接:http://codeforces.com/problemset/problem/797/C 题意: 给你一个非空字符串s,空字符串t和u.有两种操作:(1)把s的首字符取出并添加到t的末尾 ...
- Minimal string CodeForces – 797C
题目链接 题目难度: 1700rating 题目类型:string+贪心+STL 题目思路: 由于题目要求的最终结果是字典序最小的那个字符串,那么我们从贪心的从’a’开始查找字符串里是否存在,如果存在 ...
- [cf797c]Minimal string(贪心+模拟)
题意: 给出了字符串s的内容,字符串t,u初始默认为空,允许做两种操作: 1.把s字符串第一个字符转移到t字符串最后 2.把t字符串最后一个字符转移到u字符串最后 最后要求s.t字符串都为空,问u字符 ...
- 【codeforces 797C】Minimal string
[题目链接]:http://codeforces.com/contest/797/problem/C [题意] 一开始,给你一个字符串s:两个空字符串t和u; 你有两种合法操作; 1.将s的开头字符加 ...
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) C. String Reconstruction 并查集
C. String Reconstruction 题目连接: http://codeforces.com/contest/828/problem/C Description Ivan had stri ...
- Codeforces828 C. String Reconstruction
C. String Reconstruction time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
随机推荐
- GDI快速遍历位图像素
使用DIB部分可直接快速访问像素 例如,此测试将记事本中的所有白色像素替换为绿色像素 HDC hDCScreen = GetDC(NULL); HWND hWndDest = FindWindow(L ...
- 一分钟带你了解mySql执行SQL的内部原理
1.把MySQL当个黑盒子一样执行SQL语句 我们知道执行了insert语句之后,在表里会多出来一条数据:执行了update语句之后,会对表里的数据进行更改:执行了delete语句之后,会把表里的一条 ...
- 【Azure Developer】使用Azure Resource Graph的查询语法的示例
文章"[Azure Developer]在Azure Resource Graph Explorer中查看当前订阅下的所有资源信息列表并导出(如VM的名称,IP地址内网/公网,OS,区域等) ...
- NebulaGraph is nothing without you | 社区 2023 年度人物合集
在去年的年度人物 回顾中,我们看到了形形色色的人们,他们当中有帮 NebulaGraph 捉 bug 的小能手,也有通过用回复来解答他人疑惑的启蒙者-在今年(2023 年),我们这个整点不一样的,将镜 ...
- 图数据库 NebulaGraph 的 Java 数据解析实践与指导
如何快速.即时.符合直觉地去处理 Nebula Java Client 中的数据解析?读这一篇就够了. 图数据库 NebulaGrpah 的论坛和微信群里,有不少用户问及了 Java 客户端数据解析的 ...
- 从0开始入门智能知识库和星火大模型,打造AI客服。
介绍FastWiki FastWiki是一个高性能.基于最新技术栈的知识库系统,旨在为大规模信息检索和智能搜索提供解决方案.它采用微软Semantic Kernel进行深度学习和自然语言处理,在后端使 ...
- 面试准备不充分,被Java守护线程干懵了,面试官主打一个东西没用但你得会
写在开头 面试官:小伙子请聊一聊Java中的精灵线程? 我:什么?精灵线程?啥时候精灵线程? 面试官:精灵线程没听过?那守护线程呢? 我:守护线程知道,就是为普通线程服务的线程嘛. 面试官:没了?守护 ...
- inputNextFocus vue - js 跳转 下一个 tab
inputNextFocus vue - js 跳转 下一个 tab <template> <Input v-model="val1" ref="inp ...
- 一个简单的HTTP服务器的实现
我们继续我们的HTTP服务器的实现(使用别的代码来实现), 这个HTTP服务器的实现,我们主要就是关注TCP服务器中的recv还有send的处理. 首先,看一下HTTP,我们在用浏览器访问我们的TCP ...
- 使用 NVIDIA CloudXR 从 Google Cloud 流式传输 VR 和 AR 内容
过去,与 VR 交互需要专用的高端工作站,以及(取决于头显).壁挂式传感器和专用物理空间.VR 中的复杂任务可能会突破传感器范围.电缆长度和空间边界的限制,使艺术家陷入困境并限制他们的行动.该解决方案 ...