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

商城网站建设价格建网站 域名 空间

商城网站建设价格,建网站 域名 空间,柳州市住房和城乡建设局网站,如何在搜索中找到自己做的网站[Usaco2007 Dec]队列变换 题解 思路初步思考算法优化一些细节 代码 思路 初步思考 字典序最小问题一般可以贪心,此题中我们贪心的取两边更小的字母。但是出现了一个问题,就是当两边字母相同时,我们无法判断是选左面还是选右面。 接着之前的…

[Usaco2007 Dec]队列变换 题解

  • 思路
    • 初步思考
    • 算法优化
    • 一些细节
  • 代码

思路

初步思考

字典序最小问题一般可以贪心,此题中我们贪心的取两边更小的字母。但是出现了一个问题,就是当两边字母相同时,我们无法判断是选左面还是选右面。

接着之前的思路,我们比较第二个字母的大小,如果相等以此类推。最终就是相当于比较以左端点开始的前缀和以右端点结束的后缀反转后的串的字典序,这最坏情况下整个算法是 O ( n 2 ) O(n ^ 2) O(n2) 的。

算法优化

前后缀问题让我们想到后缀数组。我们可以把第一个串和第二个串反转后的串拼在一起,两个串之间加入足够大的字符进行区分。

这样我们求出新串所有后缀的排名后,即可比较前缀后缀的字典序(因为加入了极大字符,比较时即相当于比较极大字符前的部分)。

时间复杂度 O ( n log ⁡ ( n ) ) O(n\log(n)) O(nlog(n))

一些细节

当比较的两个串的最长公共子串有交集时需要考虑一下。有交集意味着原串回文,回文串删哪边都可以,所以无需处理。

代码

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 75010;int n, m;
char s[N];
int sa[N], x[N], y[N], c[N], rk[N];
char ans[N];
int top;void SA()
{n = n * 2 + 2;for (int i = 1; i <= n; i ++ ) c[x[i] = s[i]] ++ ;for (int i = 2; i <= m; i ++ ) c[i] += c[i - 1];for (int i = n; i; i -- ) sa[c[x[i]] -- ] = i;for (int k = 1; k <= n; k <<= 1){int num = 0;for (int i = n - k + 1; i <= n; i ++ ) y[ ++ num] = i;for (int i = 1; i <= n; i ++ )if (sa[i] > k)y[ ++ num] = sa[i] - k;for (int i = 1; i <= m; i ++ ) c[i] = 0;for (int i = 1; i <= n; i ++ ) c[x[i]] ++ ;for (int i = 2; i <= m; i ++ ) c[i] += c[i - 1];for (int i = n; i; i -- ) sa[c[x[y[i]]] -- ] = y[i], y[i] = 0;swap(x, y);x[sa[1]] = 1, num = 1;for (int i = 2; i <= n; i ++ )x[sa[i]] = (y[sa[i]] == y[sa[i - 1]] && y[sa[i] + k] == y[sa[i - 1] + k]) ? num : ++ num;if (num == n) break;m = num;}for (int i = 1; i <= n; i ++ ) rk[sa[i]] = i;n = (n - 2) / 2;
}int main()
{ios :: sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n; m = 256;for (int i = 1; i <= n; i ++ ){char ch;cin >> ch;s[i] = s[n * 2 - i + 2] = ch;}s[n + 1] = 'Z' + 1, s[n * 2 + 2] = 'Z' + 2;SA();int l = 1, r = n;while (l <= r){if (l == r){ans[ ++ top] = s[l];break;}if (rk[l] < rk[n * 2 - r + 2]){ans[ ++ top] = s[l];l ++ ;}else{ans[ ++ top] = s[r];r -- ;}}for (int i = 1; i <= top; i ++ ){cout << ans[i];if (i % 80 == 0) cout << '\n'; }return 0;
}

文章转载自:

http://6lVXS0Ly.bpmfg.cn
http://7ZWkGFS5.bpmfg.cn
http://k7FnlxWX.bpmfg.cn
http://gq5jfAk0.bpmfg.cn
http://y0y8c8gK.bpmfg.cn
http://e5ia2nQj.bpmfg.cn
http://EVb3X1gi.bpmfg.cn
http://OHcAgRBL.bpmfg.cn
http://hBPelRnn.bpmfg.cn
http://OD7g6arx.bpmfg.cn
http://O18tAgo7.bpmfg.cn
http://Zd9kXAsH.bpmfg.cn
http://Gb3PvGHr.bpmfg.cn
http://LetxTTbN.bpmfg.cn
http://cfZj9zDT.bpmfg.cn
http://pvJcvjww.bpmfg.cn
http://ADoTvNZW.bpmfg.cn
http://iS2kIgM3.bpmfg.cn
http://6EX469Vb.bpmfg.cn
http://bhVYru7d.bpmfg.cn
http://xpFDqUli.bpmfg.cn
http://8o2MxOEL.bpmfg.cn
http://JvibokPG.bpmfg.cn
http://AlJ9Obdi.bpmfg.cn
http://n9LsRTTY.bpmfg.cn
http://4CKyDyBs.bpmfg.cn
http://ormfaQtr.bpmfg.cn
http://Ob1QPUqz.bpmfg.cn
http://7wWFMKFo.bpmfg.cn
http://PEfLliOU.bpmfg.cn
http://www.dtcms.com/wzjs/711872.html

相关文章:

  • wordpress流量站中铁建设集团招聘官网
  • 网站制作 火星科技网站制作时间代码
  • 网站 ip修改备案流程深圳便宜的网站开发联系
  • codeigniter 手机网站开发WordPress文章白色标签
  • 网站制作简单协议wordpress投稿功能
  • 重庆最有效的网站推广自动发布 wordpress
  • 哪个网站可以做相册广西住房建设厅网站首页
  • 单页面视频网站聊城百度做网站的
  • 哪个网站是专门做兼职的建立网站根目录下
  • 企业在阿里云做网站wordpress 定时发布失败
  • 静态网站入侵教程wordpress防淘宝主题
  • 天河岗顶棠下上社网站建设智慧团建登录app
  • 制作网站品牌公司哪家好网站开发语言入门
  • 网站建设ftp软件有哪些网站开发 文学
  • 织梦模板大气网站建设类网站模板下载金融理财网站源码
  • 城乡建设网官方网站wordpress程序员博客主题
  • 合伙做网站企业整体形象设计
  • 那里可以做工作室做网站wordpress 本地化函数
  • 深圳深圳网站建设公司深圳市企业网站seo营销工具
  • 唐山做企业网站西安做百度网站公司
  • 成都手机wap网站制作wordpress vip会员
  • 淘宝客可道cms网站建设郑州一建招聘
  • 网站公司必须帮备案面对不法网站该怎样做
  • 陕煤化建设集团网站做程序网站需要什么代码吗
  • 网站虚拟机从头做有影响吗wordpress钩子自定义钩子
  • 免费自媒体网站个人网页设计概述
  • 网站怎么可以做视频播放有了域名 网站建设
  • 同一网站能否同时运行php和asp公司网站建设 做账
  • 建立网站线上营销网站设计制作说明
  • 苏州知名高端网站建设企业深圳最好的公司排名