正题

题目链接: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. Quick-cocos2d-x3.3 Study (十五)--------- 为小鸟添加一个物理加速度
  2. CCF 202104 Python
  3. 蓝桥备赛第一周2021.1.11 递归 枚举 位运算
  4. sysbench OLTP基准测试
  5. CSocket文件传输 分段传输的关键代码
  6. jquery miniui , 普加甘特图,流程管理
  7. ubuntu中解压rar文件遇到乱码的解决方法
  8. 数字反转(信息学奥赛一本通-T1089)
  9. FPGA 芯片被曝严重的 Starbleed 漏洞,影响数据中心IoT工业设备等
  10. MongoDB4.0.2集群搭建
  11. 被欧美公司垄断的工业软件,中国还有机会吗?
  12. Google / Baidu 黑客搜索引擎语法详细记录
  13. 二维otsu算法python_图像二值化与otsu算法介绍
  14. 8个高清图片素材网站,免费可商用。
  15. (一)线段树入门--补充与其他模板
  16. SDOI2018 一轮培训划水祭
  17. ZYNQ产品生产拷机问题思考
  18. 亿赛通文档安全云服务正式启动
  19. 最近面试的软件测试笔试题笔试题(已整理参考答案)
  20. 考研数二第十五讲 定积分和不定积分以及定积分中值定理

热门文章

  1. excel 如何替换带上标的文字_如何在Excel中批量提取中文汉字和英文字母
  2. matlab生成有向网络,matlab ode45和矩阵生成有向网络图
  3. php 获取对象所有成员变量,PHP成员变量获取对比
  4. linux 查询系统性能,Linux 系统各种性能查询
  5. c#事件的发布-订阅模型_微信灰度测试订阅号付费功能,小米推出最便宜5G套餐,腾讯辟谣高管猝死赔钱事件,核心期刊发布十岁儿童文章,这就是今天的其他大新闻!...
  6. 山西农业大学计算机科学与技术分数线,2016年山西农业大学计算机科学与技术专业在湖北录取分数线...
  7. java面试题_阿里大厂流出的数百道 Java 经典面试题
  8. [JavaWeb-MySQL]事务的基本介绍
  9. [Java基础]类和接口的关系
  10. 《C++ Primer》13.1.4节练习