题面

http://uoj.ac/problem/35

题解

后缀数组当然可以

这里用哈希做

首先排序的问题在哪里

在于比较两个后缀的复杂度是O(length)的

但是我们可以通过找LCP来优化比较

我们二分两个串的LCP的长度 然后通过hash值判断是否相同

这样我们可以在$O(\log l)$的时间内算出两个串的LCP长度

所以排序的复杂度变成$O(n \log ^2 n )$

然后求出连续两个后缀的LCP还是用二分的方法做 复杂度$O(n \log n)$

总的复杂度$O(n \log ^2 n)$

Code

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll read(){
ll x=,f=;char c=getchar();
while(c<'' || c>''){if(c=='-')f=-;c=getchar();}
while(c>='' && c<=''){x=x*+c-'';c=getchar();}
return x*f;
} const int maxn=;
const int mod=1e9+;
int mu[maxn],pr[maxn],cnt;
bool isp[maxn];
int fib[maxn],g[maxn],G[maxn],invG[maxn];
int fpw[maxn][]; inline int ksm(int a,int b){
int ret=;
for(int i=;i<=;i++){
if(b&) ret=ret*1ll*a%mod;
a=a*1ll*a%mod;
b=b>>;
if(b==) return ret;
}
} inline int inv(int a){
return ksm(a,mod-);
} int main(){
#ifdef LZT
freopen("in","r",stdin);
#endif
mu[]=;
memset(isp,,sizeof(isp));
for(int i=;i<=;i++){
if(isp[i]){
pr[++cnt]=i;
mu[i]=-;
}
for(int j=;j<=cnt && i*pr[j]<=;j++){
isp[i*pr[j]]=;
if(i%pr[j]==) break;
mu[i*pr[j]]=-mu[i];
}
} fib[]=;
for(int i=;i<=;i++)
fib[i]=(fib[i-]+fib[i-])%mod;
for(int i=;i<=;i++){
fpw[i][]=inv(fib[i]);
fpw[i][]=;
fpw[i][]=fib[i];
}
for(int i=;i<=;i++)
g[i]=;
for(int i=;i<=;i++)
for(int j=i;j<=;j+=i)
g[j]=g[j]*1ll*fpw[i][mu[j/i]+]%mod;
G[]=;
for(int i=;i<=;i++)
G[i]=G[i-]*1ll*g[i]%mod; invG[]=;
for(int i=;i<=;i++)
invG[i]=inv(G[i]); int tc=read();
while(tc--){
int n=read(),m=read();
int j;
int ans=;
for(int i=;i<=min(n,m);i=j+){
j=min(n/(n/i),m/(m/i));
ans=ans*1ll*ksm(G[j]*1ll*invG[i-]%mod,(n/i)*1ll*(m/i)%(mod-))%mod;
}
printf("%d\n",ans);
} return ;
}

UOJ #35 后缀排序 哈希做法的更多相关文章

  1. UOJ #35. 后缀排序[后缀数组详细整理]

    #35. 后缀排序 统计 描述 提交 自定义测试 这是一道模板题. 读入一个长度为 nn 的由小写英文字母组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符 ...

  2. Uoj #35. 后缀排序(后缀数组)

    35. 后缀排序 统计 描述 提交 自定义测试 这是一道模板题. 读入一个长度为 nn 的由小写英文字母组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在 ...

  3. UOJ#35 后缀排序

    这是一道模板题. 读入一个长度为 n 的由小写英文字母组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置.位置编号为 1 到 n. 除此之外为 ...

  4. UOJ #35. 后缀排序 后缀数组 模板

    http://uoj.ac/problem/35 模板题,重新理了一遍关系.看注释吧.充分理解了倍增的意义,翻倍之后对上一次排序的利用是通过一种类似于队列的方式完成的. #include<ios ...

  5. UOJ#35 —— 后缀排序

    1.题目大意:后缀数组模板题 2.分析:汝佳的书上的代码的有bug,还有那个n是字符串长度+1,''也要加入排序的 存个模板QAQ #include <cstdio> #include & ...

  6. 【后缀数组】uoj#35. 后缀排序

    模板 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #de ...

  7. uoj#35 后缀排序(后缀数组模版)

    #include<bits/stdc++.h> #define N 100005 using namespace std; char s[N]; int a[N],c[N],t1[N],t ...

  8. UOJ 35 后缀数组

    后缀数组裸题,求排名第1~n的后缀,想相邻后缀的最长公共前缀. 集训队模板就是硬lO(∩_∩)O哈哈~ #include <cstdio> #include <cmath> # ...

  9. PAT TOP 1005 Programming Pattern (35 分)哈希做法

    1005 Programming Pattern (35 分) Programmers often have a preference among program constructs. For ex ...

随机推荐

  1. Android中Looper的quit方法和quitSafely方法

    Looper是通过调用loop方法驱动着消息循环的进行: 从MessageQueue中堵塞式地取出一个消息.然后让Handler处理该消息,周而复始.loop方法是个死循环方法. 那怎样终止消息循环呢 ...

  2. 在HDInsight中的Hadoop介绍

    在HDInsight中的Hadoop介绍 概览 Azure的HDInsight是,部署和规定的Apache™Hadoop®集群在云中,提供用于管理,分析和大数据报告软件框架中的服务. 大数据 数据被描 ...

  3. LeetCode题解(14)--Longest Common Prefix

    https://leetcode.com/problems/longest-common-prefix/ 原题: Write a function to find the longest common ...

  4. Printf可变參数使用

    參考文档: http://bbs.csdn.net/topics/70288067 Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源 本文的二 ...

  5. what's WSDL

    WSDL (Web Services Description Language,Web服务描述语言) 它是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些 ...

  6. 关于在PHP中当一个请求未完成时,再发起另一个请求被阻塞的问题

    最近做项目的时候遇到个问题,就是做阿里云oss大文件上传进度条显示,因为要实时查询上传分片进度,所以在上传的同时必须要再发起查询的请求,但是一直都是所有分片上传完成后查询的请求才执行,刚开始以为是阿里 ...

  7. Codeforces Round #326 (Div. 2)

    B. Duff in Love time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  8. Mac JDK 多版本共存

    1.    安装各JDK版本,安装后通过Java -version检测是否安装好    2.    打开~/.bash_profile,没有的话创建    vim ~/.bash_profile   ...

  9. Fastreport生成WEB报表

    开发WEB应用系统通常都会遇到报表打印问题.简单应用可利用IE的页面打印功能,利用HTML标签控制格式来实现.但复杂的业务型应用系统,报表不仅是组成应用的 重要部分,还常常是相当复杂的.现在很多应用系 ...

  10. 软件GUI测试中的关注点

    [摘要] 本文列数了软件黑盒测试过程中,在被测试软件中可能存在的常见软件问题.本文不会详细讨论基本的软件测试思想与常用技术,仅针对在软件黑盒测试过程中若干的问题做描述,并提供个人的参考测试意见与防范意 ...