hdu 4691 Front compression
后缀数组的简单题吧。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int maxn=100000+10; 6 char s[maxn]; 7 int sa[maxn],t[maxn],t2[maxn],c[maxn]; 8 int rank[maxn],height[maxn]; 9 int d[maxn][50]; 10 void build_sa(int n,int m) 11 { 12 int i,*x=t,*y=t2; 13 for(i=0;i<m;i++) c[i]=0; 14 for(i=0;i<n;i++) c[x[i]=s[i]]++; 15 for(i=1;i<m;i++) c[i]+=c[i-1]; 16 for(i=n-1;i>=0;i--) sa[--c[x[i]]]=i; 17 18 for(int k=1;k<=n;k<<=1) 19 { 20 int p=0; 21 for(int j=n-k;j<n;j++) y[p++]=j; 22 for(i=0;i<n;i++) if(sa[i]>=k) y[p++]=sa[i]-k; 23 24 for(i=0;i<m;i++) c[i]=0; 25 for(i=0;i<n;i++) c[x[y[i]]]++; 26 for(i=1;i<m;i++) c[i]+=c[i-1]; 27 for(i=n-1;i>=0;i--) sa[--c[x[y[i]]]]=y[i]; 28 29 swap(x,y); 30 x[sa[0]]=0; 31 p=1; 32 for(i=1;i<n;i++) 33 x[sa[i]]=y[sa[i-1]]==y[sa[i]]&&y[sa[i-1]+k]==y[sa[i]+k]?p-1:p++; 34 if(p>=n) break; 35 m=p; 36 } 37 } 38 void getHeight(int n) 39 { 40 int i,k=0; 41 for(i=1;i<=n;i++) rank[sa[i]]=i; 42 for(i=0;i<n;i++) 43 { 44 if(k) k--; 45 int j=sa[rank[i]-1]; 46 while(s[i+k]==s[j+k]) k++; 47 height[rank[i]]=k; 48 } 49 } 50 int rmq(int a,int b) 51 { 52 a=rank[a],b=rank[b]; 53 if(a>b) swap(a,b); 54 a++; 55 int k=0; 56 while((1<<(k+1))<=b-a+1)k++; 57 return min(d[a][k],d[b-(1<<k)+1][k]); 58 } 59 int main() 60 { 61 while(scanf("%s",s)!=EOF) 62 { 63 int n=strlen(s); 64 build_sa(n+1,128); 65 getHeight(n); 66 for(int i=1;i<=n;i++) d[i][0]=height[i]; 67 for(int j=1;(1<<j)<=n;j++) 68 for(int i=1;i+(1<<j)-1<=n;i++) 69 d[i][j]=min(d[i][j-1],d[i+(1<<(j-1))][j-1]); 70 int m,a,b,x,y; 71 scanf("%d",&m); 72 long long orgin=0,compress=0; 73 scanf("%d%d",&x,&y); 74 orgin+=(y-x+1); 75 compress+=(y-x+3); 76 m--; 77 while(m--) 78 { 79 scanf("%d%d",&a,&b); 80 orgin+=(b-a+1); 81 int tmp; 82 if(a!=x) 83 tmp=rmq(a,x); 84 else 85 tmp=min(b-a,y-x); 86 tmp=min(min(tmp,y-x),b-a); 87 int tmp2=tmp,cnt=0; 88 while(tmp2){tmp2/=10;cnt++;} 89 if(!cnt) cnt++; 90 compress+=(b-a+1+cnt+1-tmp); 91 x=a;y=b; 92 } 93 printf("%I64d %I64d\n",orgin,compress); 94 } 95 return 0; 96 }
转载于:https://www.cnblogs.com/sooflow/p/3402095.html
hdu 4691 Front compression相关推荐
- HDOJ 4691 Front compression 后缀数组
后缀数组求两子串间的最大公共前缀. Front compression Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 102400/1 ...
- 【HDU4691】【后缀数组】Front compression 题解
Front compression 翻译见后 Description Front compression is a type of delta encoding compression algorit ...
- idea mysql 创建表_idea 根据数据库表自动创建持久化类
TODO:Go语言goroutine和channel使用 TODO:Go语言goroutine和channel使用 goroutine是Go语言中的轻量级线程实现,由Go语言运行时(runtime)管 ...
- hdu 5438 Ponds 拓扑排序
Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...
- HDU 1429 胜利大逃亡(续) (BFS+位压缩)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
- 【HDU/算法】最短路问题 杭电OJ 2544 (Dijkstra,Dijkstra+priority_queue,Floyd,Bellman_ford,SPFA)
最短路径问题是图论中很重要的问题. 解决最短路径几个经典的算法 1.Dijkstra算法 单源最短路径(贪心),还有用 priority_queue 进行优化的 Dijkstra 算法. 2.bell ...
- HDU - 5637 Transform (思维、bfs预处理)
HDU - 5637 题目大意: 给出n个数的序列a,对于一个整数x,有两种操作: 1.改变x二进制中任一位 2.将x变为x^a[i] m次查询,每次查询输入两个整数x和y,问x最少经过多少次操作可以 ...
- R - 0 or 1 HDU - 4370
R - 0 or 1 HDU - 4370 题意: 给你一个邻接矩阵,让你求出从满足条件的答案, 条件如下: 1 的出度为 1, 入度不一定 n 的入度为 1, 出度不一定 其余点的 出度 == 入度 ...
- N - Find a way HDU - 2612
N - Find a way HDU - 2612 首先的想法是找到他们俩到每个 KFC 的最小距离,然后让和最小即可 那么怎么求他们俩到 KFC 的最小距离呢,可以从 KFC 出发去找他俩,也可以从 ...
最新文章
- 计算机视觉工程师必读经典图书推荐
- Android自定义控件入门实践之雷达扫描控件
- Eclipse导入Elasticsearch源码
- .net mysql 多线程_.net线程详解(转)
- SuseLinux详解(2)——网络设置静态IP 网关 DNS的方法
- 安卓数据库的使用方式
- 使用画图软件gunplot出现的问题和解决办法
- mac使用之必备神器
- ORBSLAM3 的改进
- CSS相对定位和绝对定位
- Word章节自动编号+公式编号
- 使用TimerOne库
- 好莱坞大片! 为躲避死亡威胁, 只用15步, 这个密码朋克大叔就从世界消失了......
- 文件不见还占用空间咋修复
- 教你怎么批量查询快递单号,一学就会
- 基本数据结构——线性结构(列表/无序表)
- 报错:attributes are not compatible with the provided attributes
- matlab中文乱码问题
- 计算机语言space什么意思,space是什么意思
- iTunes 4.9播客
热门文章
- Spring Data —— 完全统一的API?
- 2012.02.13(rtsp)
- JScript中正则表达函数的说明与应用
- 蓄电池内阻测试仪分析软件,蓄电池内阻测试仪(GCBT-8610)
- 让组件悬浮所有页面之上
- java(17) - 增强for循环、装箱拆箱、可变参数
- 华为服务器通过mgmt口挂载光盘装系统及Linux系统rescue模式下修复内核
- 在多模块开发的时候,利用项目继承可以将结构信息、部署信息,将共同的依赖放在一个父类中。...
- 浅谈ThreadPool 线程池
- 6月第4周全球域名注册商(国际域名)新增注册量TOP22