工艺 bzoj-2882

题目大意题目链接

注释:略。


想法

bzoj1031差不多啊。

把串倍长后扫$sa$数组。

最后再统计答案即可。

Code:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #define N 600050
  6. using namespace std;
  7. inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
  8. 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;}
  9. struct Node {
  10. int num,id,v;
  11. }a[N];
  12. bool cmp_num(const Node &x,const Node &y) {return x.num<y.num;}
  13. bool cmp_id(const Node &x,const Node &y) {return x.id<y.id;}
  14. int n,wa[N],wb[N],Ws[N],wv[N],r[N],sa[N],rank[N],height[N],m,turn[N];
  15. void build_sa()
  16. {
  17. m=n;
  18. int i,j,p,*x=wa,*y=wb,*t;
  19. for(i=0;i<m;i++) Ws[i]=0;
  20. for(i=0;i<n;i++) Ws[x[i]=r[i]]++;
  21. for(i=1;i<m;i++) Ws[i]+=Ws[i-1];
  22. for(i=n-1;~i;i--) sa[--Ws[x[i]]]=i;
  23.  
  24. for(j=p=1;p<n;j<<=1,m=p)
  25. {
  26. for(p=0,i=n-j;i<n;i++) y[p++]=i;
  27. for(i=0;i<n;i++) if(sa[i]-j>=0) y[p++]=sa[i]-j;
  28. for(i=0;i<n;i++) wv[i]=x[y[i]];
  29.  
  30. for(i=0;i<m;i++) Ws[i]=0;
  31. for(i=0;i<n;i++) Ws[wv[i]]++;
  32. for(i=1;i<m;i++) Ws[i]+=Ws[i-1];
  33. for(i=n-1;~i;i--) sa[--Ws[wv[i]]]=y[i];
  34.  
  35. for(t=x,x=y,y=t,x[sa[0]]=0,p=i=1;i<n;i++)
  36. {
  37. if(y[sa[i-1]]==y[sa[i]]&&y[sa[i-1]+j]==y[sa[i]+j]) x[sa[i]]=p-1;
  38. else x[sa[i]]=p++;
  39. }
  40. }
  41. }
  42. int main()
  43. {
  44. int i;
  45. n=rd(); for(i=1;i<=n;i++) a[i].num=rd(),a[i].id=i;
  46. sort(a+1,a+n+1,cmp_num);
  47. int j=0; a[0].num=a[1].num-1;
  48. for(i=1;i<=n;i++)
  49. {
  50. if(a[i].num!=a[i-1].num) j++;
  51. a[i].v=j; turn[j]=a[i].num;
  52. }
  53. sort(a+1,a+n+1,cmp_id);
  54. for(i=0;i<n;i++) r[i]=r[i+n]=a[i+1].v;
  55. n<<=1; r[n++]=0;
  56. build_sa();
  57. i=0; while(sa[i]>n/2) i++;
  58. for(j=sa[i];j<sa[i]+n/2;j++) printf("%d ",turn[r[j]]); puts("");
  59. return 0;
  60. }

小结:后缀数组有很多妙用啊。

[bzoj2882]工艺_后缀数组的更多相关文章

  1. BZOJ_2882_工艺_后缀数组

    BZOJ_2882_工艺_后缀数组 Description 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且 ...

  2. 【BZOJ2882】工艺(后缀数组)

    [BZOJ2882]工艺(后缀数组) 题面 BZOJ权限题,我爱良心洛谷 题解 最容易的想法: 把字符串在后面接一份 然后求后缀数组就行了... #include<iostream> #i ...

  3. BZOJ_4516_[Sdoi2016]生成魔咒_后缀数组+ST表+splay

    BZOJ_4516_[Sdoi2016]生成魔咒_后缀数组+ST表+splay Description 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1.2 拼凑起来形成一个魔 ...

  4. BZOJ_2946_[Poi2000]公共串_后缀数组+二分答案

    BZOJ_2946_[Poi2000]公共串_后缀数组+二分答案 Description          给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: l        读入单 ...

  5. BZOJ_3238_[Ahoi2013]差异_后缀数组+单调栈

    BZOJ_3238_[Ahoi2013]差异_后缀数组+单调栈 Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao ...

  6. BZOJ_1717_[Usaco2006 Dec]Milk Patterns 产奶的模式_后缀数组

    BZOJ_1717_[Usaco2006 Dec]Milk Patterns 产奶的模式_后缀数组 Description 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他 ...

  7. BZOJ_4698_Sdoi2008 Sandy的卡片_后缀数组+单调队列+双指针

    BZOJ_4698_Sdoi2008 Sandy的卡片_后缀数组 Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是 ...

  8. BZOJ_2251_[2010Beijing Wc]外星联络_后缀数组

    BZOJ_2251_[2010Beijing Wc]外星联络_后缀数组 Description 小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻 找外星人的 ...

  9. BZOJ_1692_[Usaco2007 Dec]队列变换_后缀数组

    BZOJ_1692_[Usaco2007 Dec]队列变换_后缀数组 Description FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的“全美农场主大奖赛” ...

随机推荐

  1. 关于jquery获取单选框value属性值为on的问题

    当取单选框的value值的时候,前提是要有value这个属性,如果没有value属性那么取出来的就会为on 取value值的常见三种方式为 $("input[name='XXX']:chec ...

  2. AJPFX讲解java单例模式

    单例设计模式概述:      单例模式就是要确保类在内存中只有一个对象,该实例必须自动创建,并且对外提供单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3 ...

  3. VMware Workstation安装CentOS 7和开发环境

    VMware Workstation新建虚拟机 此处使用的是VMware Workstation 10,其安装过程即是常规Windos系统下软件安装方式,略过. 安装完成双击图标: 打开虚拟机主界面: ...

  4. ASP.NET中调用事务处理的方法

    /// <summary> /// 事务处理 /// </summary> /// <param name="strSql"></para ...

  5. (2) Tomcat启动Jenkins

    Tomcat启动Jenkins 1. 下载Tomact,解压缩到指定目录. 2. 下载Jenkins.war文件,方到Tomact的WebApps下面即可. 3. 修改Tomcat的HTTP端口和默认 ...

  6. 核武器代理CC工具V3.42最新版本!

    软件说明 !!!有新版本更新,请移步到更新地址:https://www.cnblogs.com/cnhacker/p/10878688.html ########################### ...

  7. H5 canvas-小球抛物线

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. WPF学习- AllowDrop 用户控件启用拖放功能

    知识点: 创建自定义用户控件(UserControl) 使用户控件成为拖动源 使用户控件成为放置目标 使面板能够接收从用户控件放置的数据 创建项目: 1.新建WPF项目(Wpf-AllowDrop) ...

  9. linux 后台进程

    1.进程放入后台 ctrl+z 进程放入后台 暂停执行 2.进程放入后台执行 bg % n 或者 bg n 进程放入后台执行 3.进程取出前台执行 fg % n 或者 fg n 进程取出前台执行 4. ...

  10. 解决【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 ...