【BZOJ】1692: [Usaco2007 Dec]队列变换
【算法】字符串hash
【题解】
显然如果字母互不相同,贪心取是正确的。
如果存在字母相同,那么就换成比较后缀和前缀嘛。
但是要注意,不是后缀和前缀相同就能直接跳跃,每次必须只推一位。
取模的哈希比自然溢出慢了好多。
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const int maxn=,MOD=,base=;
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-]*p[R-L+]%MOD)%MOD;}
int calc2(int L,int R){return (sum2[L]+MOD-sum2[R+]*p[R-L+]%MOD)%MOD;}
bool big(int L,int R){
if(s[L]!=s[R])return s[L]>=s[R];
int l=,r=R-L+;
while(l<r){
int mid=(l+r)>>;
if(calc1(L,L+mid-)==calc2(R-mid+,R))l=mid+;
else r=mid;
}
return s[L+l-]>=s[R-l+];
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
c=getchar();
while(c<'A'||c>'Z')c=getchar();
s[i]=c;
}
p[]=;
for(int i=;i<=n;i++)p[i]=p[i-]*base%MOD;
for(int i=;i<=n;i++)sum1[i]=(sum1[i-]*base+s[i]-'A')%MOD;
for(int i=n;i>=;i--)sum2[i]=(sum2[i+]*base+s[i]-'A')%MOD;
int L=,R=n;
for(int i=,j=;i<=n;i++,j++){
if(!big(L,R)){
putchar(s[L++]);
}
else{
putchar(s[R--]);
}
if(j==)putchar('\n'),j=;
}
return ;
}
【BZOJ】1692: [Usaco2007 Dec]队列变换的更多相关文章
- BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )
数据 n <= 30000 , 然后 O( n² ) 的贪心也过了..... USACO 数据是有多弱啊 = = ( ps : BZOJ 1640 和此题一模一样 , 双倍经验 ) ------ ...
- BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1383 Solved: 582[Submit][St ...
- [BZOJ 1692] [Usaco2007 Dec] 队列变换 【后缀数组 + 贪心】
---恢复内容开始--- 题目链接:BZOJ - 1692 题目分析 首先,有个比较简单的贪心思路:如果当前剩余字符串的两端字母不同,就选取小的字母,这样显然是正确的. 然而若两端字母相同,我们怎么选 ...
- ●BZOJ 1692 [Usaco2007 Dec]队列变换
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1692 题解: 后缀数组,贪心由于每次可以取出旧队列的首部或尾部放在新队列的尾部.所以就需要比 ...
- BZOJ 1692: [Usaco2007 Dec]队列变换
Description FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的"全美农场主大奖赛".在这场比赛中,每个参赛者都必须让他的奶牛排成一列 ...
- bzoj:1692 [Usaco2007 Dec]队列变换&&1640 [Usaco2007 Nov]Best Cow Line 队列变换
Description FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的“全美农场主大奖赛”.在这场比赛中,每个参赛者都必须让他的奶牛排成一列,然后领她们从裁判席 ...
- bzoj 1692: [Usaco2007 Dec]队列变换 ——二分+hash
Description FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的“全美农场主大奖赛”.在这场比赛中,每个参赛者都必须让他的奶牛排成一列,然后领她们从裁判席 ...
- BZOJ 1692: [Usaco2007 Dec]队列变换 (后缀数组/二分+Hash)
跟BZOJ 4278: [ONTAK2015]Tasowanie一模一样 SA的做法就是把原串倒过来接在原串后面,O(nlogn)O(nlogn)O(nlogn)做后缀数组,就能O(1)O(1)O(1 ...
- 1692: [Usaco2007 Dec]队列变换(BZOJ1640强化版)
1692: [Usaco2007 Dec]队列变换 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 682 Solved: 280[Submit][Sta ...
随机推荐
- Linux中java应用程序的部署,使其开机自动启动
初步需求:将在Windows/MyEclipse中开发的java应用程序部署到Linux服务器上,使其运行 针对需求,可以参考下面这些文章,但是这些文章很多东西没有提及到,我自己尝试部署运行 在lin ...
- 实现一个简单版的express
express应该算是早期最优秀的一个node框架了,刚开始学node做后端语言就是用的express,它的cli可以帮我们搭建好项目目录,就像现在的vue,react一样.express本身没有做太 ...
- 【题解搬运】PAT_L1-009 N个数求和
从我原来的博客上搬运.原先blog作废. (伪)水题+1,旨在继续摸清这个blog(囧 题目 就是求N个数字的和.麻烦的是,这些数字是以有理数"分子/分母"的形式给出的,你输出的和 ...
- beta版本冲刺四
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组 ...
- 淘宝RubyGems和NPM镜像的使用
题记:前不久在windows下配置jekyll环境时,需要用到gem,一个ruby的管理包,类似于管理nodejs包的npm.安装ruby环境后,使用gem安装包时请求国外的[https://ruby ...
- mysql 5.7 Access denied for user 'root'@'localhost' solution
sudo vim /etc/mysql/debian.cnf # Automatically generated for Debian scripts. DO NOT TOUCH! [client] ...
- Linux在线用户通信
1,/etc/motd文件 该文件即 message of today(布告栏信息),每次用户登录时,/etc/motd文件的内容会显示在用户的终端.系统管理员可以在文件中编辑系统活动消息 即像公告栏 ...
- hw_breakpoint使用方法
hw_breakpoint 使用方法 kprobe在 do_page_fault 函数中不能使用,那么如果真要在这里打点怎么办呢?看看hw_breakpoint是否可用: 事实证明,即便 hw_bre ...
- SQL SERVER 实用命令集锦
1.根据关键字查询库中的存储过程,返回符合条件的存储过程名称 select distinct object_name(id) from syscomments where id in (select ...
- PowerShell收发TCP消息包
PowerShell收发TCP消息包 https://www.cnblogs.com/fuhj02/archive/2012/10/16/2725609.html 在上篇文章中,我们在PSNet包中创 ...