[bzoj2882]工艺_后缀数组
工艺 bzoj-2882
题目大意:题目链接。
注释:略。
想法:
跟bzoj1031差不多啊。
把串倍长后扫$sa$数组。
最后再统计答案即可。
Code:
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <algorithm>
- #define N 600050
- using namespace std;
- inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
- int rd() {int x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
- struct Node {
- int num,id,v;
- }a[N];
- bool cmp_num(const Node &x,const Node &y) {return x.num<y.num;}
- bool cmp_id(const Node &x,const Node &y) {return x.id<y.id;}
- int n,wa[N],wb[N],Ws[N],wv[N],r[N],sa[N],rank[N],height[N],m,turn[N];
- void build_sa()
- {
- m=n;
- int i,j,p,*x=wa,*y=wb,*t;
- for(i=0;i<m;i++) Ws[i]=0;
- for(i=0;i<n;i++) Ws[x[i]=r[i]]++;
- for(i=1;i<m;i++) Ws[i]+=Ws[i-1];
- for(i=n-1;~i;i--) sa[--Ws[x[i]]]=i;
- for(j=p=1;p<n;j<<=1,m=p)
- {
- for(p=0,i=n-j;i<n;i++) y[p++]=i;
- for(i=0;i<n;i++) if(sa[i]-j>=0) y[p++]=sa[i]-j;
- for(i=0;i<n;i++) wv[i]=x[y[i]];
- for(i=0;i<m;i++) Ws[i]=0;
- for(i=0;i<n;i++) Ws[wv[i]]++;
- for(i=1;i<m;i++) Ws[i]+=Ws[i-1];
- for(i=n-1;~i;i--) sa[--Ws[wv[i]]]=y[i];
- for(t=x,x=y,y=t,x[sa[0]]=0,p=i=1;i<n;i++)
- {
- if(y[sa[i-1]]==y[sa[i]]&&y[sa[i-1]+j]==y[sa[i]+j]) x[sa[i]]=p-1;
- else x[sa[i]]=p++;
- }
- }
- }
- int main()
- {
- int i;
- n=rd(); for(i=1;i<=n;i++) a[i].num=rd(),a[i].id=i;
- sort(a+1,a+n+1,cmp_num);
- int j=0; a[0].num=a[1].num-1;
- for(i=1;i<=n;i++)
- {
- if(a[i].num!=a[i-1].num) j++;
- a[i].v=j; turn[j]=a[i].num;
- }
- sort(a+1,a+n+1,cmp_id);
- for(i=0;i<n;i++) r[i]=r[i+n]=a[i+1].v;
- n<<=1; r[n++]=0;
- build_sa();
- i=0; while(sa[i]>n/2) i++;
- for(j=sa[i];j<sa[i]+n/2;j++) printf("%d ",turn[r[j]]); puts("");
- return 0;
- }
小结:后缀数组有很多妙用啊。
[bzoj2882]工艺_后缀数组的更多相关文章
- BZOJ_2882_工艺_后缀数组
BZOJ_2882_工艺_后缀数组 Description 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且 ...
- 【BZOJ2882】工艺(后缀数组)
[BZOJ2882]工艺(后缀数组) 题面 BZOJ权限题,我爱良心洛谷 题解 最容易的想法: 把字符串在后面接一份 然后求后缀数组就行了... #include<iostream> #i ...
- BZOJ_4516_[Sdoi2016]生成魔咒_后缀数组+ST表+splay
BZOJ_4516_[Sdoi2016]生成魔咒_后缀数组+ST表+splay Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔 ...
- BZOJ_2946_[Poi2000]公共串_后缀数组+二分答案
BZOJ_2946_[Poi2000]公共串_后缀数组+二分答案 Description 给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: l 读入单 ...
- BZOJ_3238_[Ahoi2013]差异_后缀数组+单调栈
BZOJ_3238_[Ahoi2013]差异_后缀数组+单调栈 Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao ...
- BZOJ_1717_[Usaco2006 Dec]Milk Patterns 产奶的模式_后缀数组
BZOJ_1717_[Usaco2006 Dec]Milk Patterns 产奶的模式_后缀数组 Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他 ...
- BZOJ_4698_Sdoi2008 Sandy的卡片_后缀数组+单调队列+双指针
BZOJ_4698_Sdoi2008 Sandy的卡片_后缀数组 Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是 ...
- BZOJ_2251_[2010Beijing Wc]外星联络_后缀数组
BZOJ_2251_[2010Beijing Wc]外星联络_后缀数组 Description 小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻 找外星人的 ...
- BZOJ_1692_[Usaco2007 Dec]队列变换_后缀数组
BZOJ_1692_[Usaco2007 Dec]队列变换_后缀数组 Description FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的“全美农场主大奖赛” ...
随机推荐
- 关于jquery获取单选框value属性值为on的问题
当取单选框的value值的时候,前提是要有value这个属性,如果没有value属性那么取出来的就会为on 取value值的常见三种方式为 $("input[name='XXX']:chec ...
- AJPFX讲解java单例模式
单例设计模式概述: 单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3 ...
- VMware Workstation安装CentOS 7和开发环境
VMware Workstation新建虚拟机 此处使用的是VMware Workstation 10,其安装过程即是常规Windos系统下软件安装方式,略过. 安装完成双击图标: 打开虚拟机主界面: ...
- ASP.NET中调用事务处理的方法
/// <summary> /// 事务处理 /// </summary> /// <param name="strSql"></para ...
- (2) Tomcat启动Jenkins
Tomcat启动Jenkins 1. 下载Tomact,解压缩到指定目录. 2. 下载Jenkins.war文件,方到Tomact的WebApps下面即可. 3. 修改Tomcat的HTTP端口和默认 ...
- 核武器代理CC工具V3.42最新版本!
软件说明 !!!有新版本更新,请移步到更新地址:https://www.cnblogs.com/cnhacker/p/10878688.html ########################### ...
- H5 canvas-小球抛物线
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- WPF学习- AllowDrop 用户控件启用拖放功能
知识点: 创建自定义用户控件(UserControl) 使用户控件成为拖动源 使用户控件成为放置目标 使面板能够接收从用户控件放置的数据 创建项目: 1.新建WPF项目(Wpf-AllowDrop) ...
- linux 后台进程
1.进程放入后台 ctrl+z 进程放入后台 暂停执行 2.进程放入后台执行 bg % n 或者 bg n 进程放入后台执行 3.进程取出前台执行 fg % n 或者 fg n 进程取出前台执行 4. ...
- 解决【npm ERR! Unexpected end of JSON input while parsing near '...sh_time":141072930277'】方案
问题描述执行npm install的时候报错npm ERR! Unexpected end of JSON input while parsing near '...sh_time":141 ...