正题

题目链接:https://jzoj.net/senior/#main/show/1247


题目大意

一个长度为nnn的字符串,每次选择头或者尾加入新的字符串末端,求字典序最小的新的字符串。


解题思路

我们发现若剩下的字符串比翻转之后份字符串字典序大那么就加入头,否则就加入尾。所以我们之间判定就是O(n2)O(n^2)O(n2)的,但是这样的时间复杂度不够优秀。

我们考虑字符串hashhashhash,比较字典序要找到第一个不同的位置,我们二分一下那个位置字符串hashhashhash判定即可。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define ull unsigned long long
using namespace std;
const int N=31000;
const ull p=13331;
int n,z;char c[N];
ull f[N],g[N],pow[N];
ull getf(int l,int r)
{return f[r]-f[l-1]*pow[r-l+1];}
ull getg(int l,int r)
{return g[l]-g[r+1]*pow[r-l+1];}
int main()
{scanf("%d",&n);pow[0]=1;for(int i=1;i<=n;i++)cin>>c[i],pow[i]=pow[i-1]*p;for(int i=1;i<=n;i++)f[i]=f[i-1]*p+c[i]-'A'+1;for(int i=n;i>=1;i--)g[i]=g[i+1]*p+c[i]-'A'+1;int L=1,R=n;for(int i=1;i<=n;i++){int l=0,r=R-L;while(l<=r){int mid=(l+r)/2;if(getf(L,L+mid)==getg(R-mid,R)) l=mid+1;else r=mid-1;}if(c[L+l]<c[R-l]) putchar(c[L++]);else putchar(c[R--]);z++;if(z%80==0) putchar('\n');}
}

jzoj1247-队列变换【字符串hash,二分】相关推荐

  1. jzoj3337-[NOI2013模拟]wyl8899的TLE【字符串hash,二分】

    正题 题目大意 两个字符串A,BA,BA,B.可以修改AAA中的一个字符使得AAA中的1∼k1\sim k1∼k是BBB的子串,求kkk的最大值. 解题思路 先将AAA和BBB字符串hashhashh ...

  2. 【Codeforces - 127D】Password(思维,二分+字符串Hash)

    题干: Asterix, Obelix and their temporary buddies Suffix and Prefix has finally found the Harmony temp ...

  3. 1402 后缀数组 (hash+二分)

    描述 后缀数组 (SA) 是一种重要的数据结构,通常使用倍增或者DC3算法实现,这超出了我们的讨论范围.在本题中,我们希望使用快排.Hash与二分实现一个简单的 O(n log^2⁡n ) 的后缀数组 ...

  4. hash进阶:使用字符串hash乱搞的姿势

    前言 此文主要介绍hash的各种乱搞方法,hash入门请参照我之前这篇文章 不好意思hash真的可以为所欲为 在开头先放一下题表(其实就是我题解中的hash题目qwq) 查询子串hash值 必备的入门 ...

  5. bzoj 1014: [JSOI2008]火星人prefix(splay维护区间+Hash+二分)

    1014: [JSOI2008]火星人prefix Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 7588  Solved: 2429 [Submi ...

  6. 洛谷 P4324 [JSOI2016]扭动的回文串 manacher+字符串hash

    题目描述 JYY有两个长度均为 NNN 的字符串 AAA 和 BBB. 一个扭动字符串 S(i,j,k)S(i,j,k)S(i,j,k) 由 AAA 中的第 iii 个字符到第 jjj 个字符组成的子 ...

  7. 九宫重排 蓝桥杯c++ 题解 字符串hash+bfs

    九宫重排 蓝桥杯c++ 题解 字符串hash+bfs 题意:给出一个九宫格,你可以将与空格相邻的数字和空格进行交换,目的是得到另一个九宫格,问最少的步数. 思路:从最小步数不难看出我们可以使用广度优先 ...

  8. 【BZOJ】1692: [Usaco2007 Dec]队列变换

    [算法]字符串hash [题解] 显然如果字母互不相同,贪心取是正确的. 如果存在字母相同,那么就换成比较后缀和前缀嘛. 但是要注意,不是后缀和前缀相同就能直接跳跃,每次必须只推一位. 取模的哈希比自 ...

  9. hdu4821 字符串hash

    参考博客:点击打开链接 字符串hash典例. 这里用的是bkdrhash 法.也是最常用的冲突最少的一种.原理:把字符串和数值对应.这里用base=31(一般用质数), 先是扫一遍,处理处每个位子到结 ...

最新文章

  1. RASPBERRY PI PICO 开发板 基础测试
  2. QScintilla
  3. 独家解密:阿里是如何应对超大规模集群资源管理挑战的?
  4. linux可以运行常规软件吗,Linux安装一些常规软件(浅显)
  5. 编辑距离—leetcode72
  6. python 创建文件_Python入学首次项目,新手必看,简单易操作
  7. 【转】SQL SERVER 存储过程学习笔记
  8. 牛客 2021年度训练联盟热身训练赛第二场 E题NIH Budget
  9. struck在c语言中的作用,C语言-选择题及答案.doc
  10. php远程上传实例,PHP ftp类实现远程附件上传例子
  11. html模板原型,政务管理系统原型模板分享
  12. Win10此设备不支持接收 Miracast 无法投影的解决方法
  13. html5+简约登录页面,简洁时尚的CSS3用户登录界面设计
  14. canvas学习笔记
  15. python实现AI换脸
  16. 如何极速下载网页上的文件? 怎么批量下载文献
  17. 湍流——湍流积分长度
  18. 学习python的书籍
  19. 给JS对象添加属性和方法
  20. 你的网站友情链接是全站友情链接吗

热门文章

  1. 化妆definer是什么意思_化妆品上的r是什么意思
  2. linux mysql phpadmin_linux安装phpmyadmin数据库管理
  3. 登录服务器修改数据库吗,如何修改服务器登录数据库 sa
  4. 连接mysql数据库2013_使用VS2013 + EF6 + .NET4.5 连接Mysql数据库
  5. php acl rbac,建站常用的用户权限管理模型ACL和RBAC的区别
  6. java实用教程——组件及事件处理——ItemEvent事件(设置字体类型)
  7. 简述tcp协议三报文握手过程_TCP协议中的三次握手和四次挥手(图解)
  8. [剑指offer]面试题26:复杂链表的复制
  9. [剑指offer]面试题22:栈的压入、弹出序列
  10. 数据结构整理中。。。