【算法】字符串hash

【题解】

显然如果字母互不相同,贪心取是正确的。

如果存在字母相同,那么就换成比较后缀和前缀嘛。

但是要注意,不是后缀和前缀相同就能直接跳跃,每次必须只推一位。

取模的哈希比自然溢出慢了好多。

#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const int maxn=30010,MOD=123456789,base=291;
ll sum1[maxn],sum2[maxn],p[maxn];
int n;
char c,s[maxn];
int calc1(int L,int R){return (sum1[R]+MOD-sum1[L-1]*p[R-L+1]%MOD)%MOD;}
int calc2(int L,int R){return (sum2[L]+MOD-sum2[R+1]*p[R-L+1]%MOD)%MOD;}
bool big(int L,int R){if(s[L]!=s[R])return s[L]>=s[R];int l=1,r=R-L+2;while(l<r){int mid=(l+r)>>1;if(calc1(L,L+mid-1)==calc2(R-mid+1,R))l=mid+1;else r=mid;}return s[L+l-1]>=s[R-l+1];
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){c=getchar();while(c<'A'||c>'Z')c=getchar();s[i]=c;}p[0]=1;for(int i=1;i<=n;i++)p[i]=p[i-1]*base%MOD;for(int i=1;i<=n;i++)sum1[i]=(sum1[i-1]*base+s[i]-'A')%MOD;for(int i=n;i>=1;i--)sum2[i]=(sum2[i+1]*base+s[i]-'A')%MOD;int L=1,R=n;for(int i=1,j=1;i<=n;i++,j++){if(!big(L,R)){putchar(s[L++]);}else{putchar(s[R--]);}if(j==80)putchar('\n'),j=0;}return 0;
}

View Code

转载于:https://www.cnblogs.com/onioncyc/p/7445338.html

【BZOJ】1692: [Usaco2007 Dec]队列变换相关推荐

  1. BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )

    数据 n <= 30000 , 然后 O( n² ) 的贪心也过了..... USACO 数据是有多弱啊 = = ( ps : BZOJ 1640 和此题一模一样 , 双倍经验 ) ------ ...

  2. bzoj 1640 bzoj 1692: [Usaco2007 Dec]队列变换(后缀数组)

    1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1756  Solved: 737 [Submit][ ...

  3. bzoj:1692 [Usaco2007 Dec]队列变换1640 [Usaco2007 Nov]Best Cow Line 队列变换

    Description FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的"全美农场主大奖赛".在这场比赛中,每个参赛者都必须让他的奶牛排成一列 ...

  4. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家( 平衡树 )

    按鲜嫩程度排个序, 从大到小处理, 用平衡树维护价值 ---------------------------------------------------------------------- #i ...

  5. bzoj 1691: [Usaco2007 Dec]挑剔的美食家(multiset贪心)

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 879  Solved: 445 [Submit] ...

  6. bzoj 1627: [Usaco2007 Dec]穿越泥地(BFS)

    1627: [Usaco2007 Dec]穿越泥地 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 768  Solved: 517 [Submit][S ...

  7. bzoj 1690: [Usaco2007 Dec]奶牛的旅行(01分数规划--最优比率环)

    01分数规划问题: 给你n个物品,a[i]表示第i个物品的收益,b[i]表示代价,x[i]表示选或不选,求一个最佳方案使得下式取值最大 通用解: 当然是从式子上考虑,定义函数F[cnt]如下: 其中c ...

  8. bzoj 1626: [Usaco2007 Dec]Building Roads 修建道路(最小生成树)

    1626: [Usaco2007 Dec]Building Roads 修建道路 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1709  Solved ...

  9. bzoj 1625: [Usaco2007 Dec]宝石手镯(01背包)

    1625: [Usaco2007 Dec]宝石手镯 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1316  Solved: 929 [Submit][ ...

最新文章

  1. java 中的 serialVersionUID
  2. TCL基础篇---基本语法(持续更新)
  3. java二叉堆_为什么二叉堆利用数组存储?
  4. 第一篇博客,用以规划我的编程人生
  5. QML基础类型之enumeration
  6. linux平台及windows平台mysql重启方法
  7. 曹大带我学 Go(11)—— 从 map 的 extra 字段谈起
  8. Linux服务器之间传输文件 scp命令
  9. windows下pclpy安装失败的解决方法——本地安装
  10. android打开相机拍照及打开相册选择照片
  11. 谈谈学完Asp.net 中的自定义控件后的感受
  12. java怎么把照片导出来,JAVA将图片转成base64导出到word中
  13. Unity3D开发之制作序列帧动画
  14. 利用Tushare获取股票数据(全面详细,照着敲就可以)
  15. 蜗牛星际b款装服务器系统,星际蜗牛 篇八:蜗牛星际B款改装美化 —— 拆!拆!拆!...
  16. Python学习笔记_获取猫耳广播剧
  17. 基于JAVA学术会议信息网站计算机毕业设计源码+系统+数据库+lw文档+部署
  18. 周易六十四卦——山泽损卦
  19. <read papers>学术论文的基金项目和研究成果格式怎么标注?
  20. 【墨天轮】openGausss数据库有奖征文活动开始啦!华为平板、京东购物卡等你拿!

热门文章

  1. QT自定义窗口插件在QT Creator的应用
  2. 黄淮学院计算机录取线,黄淮学院录取投档线
  3. 如何选择版本控制系统之二
  4. Python-描述符
  5. poj 3468 线段树
  6. android adb常用指令
  7. jquery实现在元素外单击,隐藏此元素
  8. vb中如何才能有手型的光标?
  9. extjs Combobox级联
  10. BoW图像检索Python实战