当前位置: 首页 > news >正文

建网站那种服务器好/上海互联网公司排名

建网站那种服务器好,上海互联网公司排名,wordpress建企业网站,上海大 小企业网站制作搞了一天,代码还未AC过题,自己打的测试数据过了。。 算法: 1. 倍增算法求sa,rank数组,时间复杂度O(nlgn). 2. O(n)时间复杂度求height数组。。 3. RMQ,预处理,时间复杂度O(nlgn) 4.每次查询时间复杂度O&…

搞了一天,代码还未AC过题,自己打的测试数据过了。。

算法:

1. 倍增算法求sa,rank数组,时间复杂度O(nlgn).

2. O(n)时间复杂度求height数组。。

3. RMQ,预处理,时间复杂度O(nlgn)

4.每次查询时间复杂度O(1)

代码:

 

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<vector>
#include<string>
#include<math.h>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
#define MAXN 10010int sa[MAXN], rank[MAXN], sum[MAXN], height[MAXN];
int wa[MAXN], wb[MAXN], wx[MAXN], wsum[MAXN];
char str[MAXN];
int dp[1010][20];
/*
RMQ:
dp[i][j] = max(dp[i][j-1], dp[i + 2 ^(j-1)][j-1])
dp[i][0] = A[i];求区间最值[i,j]
int L =lg( j - i + 1 )
return max(dp[i][L], dp[j + 1 - 2 ^ L][L]); 
*/
//预处理height数组 
void pre(int n)
{for( int i = 0; i <= n; i++)dp[i][0] = height[i];int L = (int) log2(n); for( int j = 1; j <= L; j++){for( int i = 1; i <= n + 1 - (1<<j); i++)dp[i][j] = min(dp[i][j-1], dp[i + (1<<(j-1))][j-1]);}  
}int get_min( int a, int b)
{int L = (int) log2(b - a + 1 );return min(dp[a][L], dp[b + 1 - (1<<L)][L]);       
}//比较字符串是否相等 
int cmp( int *r, int a, int b, int l)
{return (r[a] == r[b] && r[a+l] == r[b+l]);    
}//倍增算法求sa数组 
void get_sa(char *r, int *sa, int n, int m) //r为字符串, sa数组, n为字符串长度, m为字符串最大值 
{int i, j,p, *x = wa, *y = wb, *t;for( i = 0; i < m; i++)sum[i] = 0;//对长度为1时后缀字符串排序 for( i = 0; i < n; i++)sum[ x[i] = r[i] ]++;  //x相当于rank,但不是真正rank for( i = 1; i < m; i++) sum[i] += sum[i-1];for( i = n-1; i >= 0; i--)sa[--sum[x[i]]] = i; //对长度为2,4,...的后缀字符串排序for(j = 1, p = 1; p < n && j <= n; j *= 2){//首先对关键字y排序,排序后的结果保存在y数组中,即是这个后缀字符串的起始位置 for(p = 0,i = n - j; i < n; i++)y[p++] = i;for(i = 0; i < n; i++) if( sa[i] >= j )  y[p++] = sa[i] - j;//然后对关键字x排序,先要获取第1关键字xfor(i = 0; i < n; i++)wx[i] = x[y[i]]; for(i = 0; i < m; i++)wsum[i] = 0;for(i = 0; i < n; i++)wsum[ wx[i] ]++;for(i = 1; i < m; i++)wsum[i] += wsum[i-1];for(i = n - 1;i >= 0; i--)sa[--wsum[wx[i]]] = y[i];//更新xt = x, x = y, y = t;for( x[sa[0]] = 0,i = 1, p = 1; i < n; i++)x[ sa[i] ] = cmp(y, sa[i-1], sa[i], j) ? p - 1 : p++;   }     
}//h[i] = height[rank[i]], h[i] >= h[i-1] - 1
void get_height(char *r, int n)
{int i, j, k = 0;//sa[0] = len 就是我们补的那个0 for(i = 1; i <= n; i++)rank[sa[i]] = i;for(i = 0; i < n ; height[rank[i++]] = k )  for( k ? k-- : 0, j = sa[rank[i]-1]; r[i+k] == r[j+k]; k++);
}int main( )
{int a, b, n, m;while( scanf("%s",str) != EOF ){int len = strlen(str);str[len] = '0';str[len+1] = 0;memset(wa,0,sizeof(wa));memset(wb,0,sizeof(wb));memset(sa,0,sizeof(sa));memset(height,0,sizeof(height));get_sa(str, sa, len + 1, 255);get_height( str, len );pre(len); /*for( int i = 0; i < len; i++){printf("%s %d %d\n",str+sa[i], rank[sa[i]], height[i]);    }*/str[len] = 0;/*int h = -1;for( int i = 1; i < len; i++)h = max(h, height[i]);printf("可重叠最长重复子串为%d\n",h);*/ scanf("%d",&m);while( m-- ){scanf("%d%d",&a,&b);printf("%s %s\n", str+a, str+b);if( a == b ){printf("%d\n", strlen(str+a));continue;}int x1 = min(rank[a],rank[b]) + 1;int y1 = max(rank[a],rank[b]);printf("%d\n",get_min(x1,y1));        }}
}

转载于:https://www.cnblogs.com/tangcong/archive/2012/09/25/2703023.html

http://www.lbrq.cn/news/763561.html

相关文章:

  • python可以做复杂网站/网站工具查询
  • 网站如何做提交的报名表/培训心得体会1000字通用
  • 设计师图片素材网站/关联词有哪些小学
  • 网站建设骗子/软文营销的本质
  • wordpress 首页可变区域/自己的网站怎么样推广优化
  • 桂林象鼻山属于哪个区/seo关键词优化排名软件
  • 网站开发论文答辩问题/长沙seo技术培训
  • wordpress 帝国cms/刷关键词优化排名
  • 黑龙江做网站公司/秦皇岛seo排名
  • 重庆渝兴建设有限公司网站/广告联盟app下载赚钱
  • 视觉做的比较好的国外网站/今日足球比赛分析推荐
  • 网站建设成本价/搜索引擎seo关键词优化
  • 注册公司流程和费用一共多少钱/沧州seo推广
  • 微网站开发需要多少钱/长春seo培训
  • 中信建设有限责任公司官网英文/南城网站优化公司
  • 网站开发记科目/怎么快速优化关键词排名
  • 邯郸做网站找谁/网络营销的具体形式种类
  • 上海建设官方网站/seo的优化策略有哪些
  • 上海建设工程安全质量监督总站网站/百度推广收费多少
  • 做网站应该考虑哪些问题/唐山seo排名外包
  • 安徽六安疫情最新情况/seo网站推广计划
  • 如何建立官方网站/流量推广怎么做
  • 网站开发框架图/今天刚刚发生的新闻
  • 泸州网站建设多少钱/今日头条新闻
  • 淘宝网站设计价格/网站托管服务商
  • 佛山做网站制作公司/网站运营策划书范文
  • 网站里面如何在新闻列表上显示hot/网站维护一年一般多少钱?
  • 注册公司那家网站做的比较好/周口网络推广公司
  • wordpress 茶叶模板/网站seo外链平台
  • 把给公司做的设计放到自己的网站上/长尾关键词挖掘工具
  • 04. study_ESP32配网库
  • 设计模式笔记_行为型_状态模式
  • OpenCV对椒盐处理后的视频进行均值滤波处理
  • IDEA、Pycharm、DataGrip等激活破解冲突问题解决方案之一
  • 树莓派 4B 上部署 Minecraft PaperMC 1.20.x 的一键部署脚本
  • 《AVL树的原理与C++实现:详解平衡二叉搜索树的高效构建与操作》