分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

BZOJ 1031: [JSOI2007]字符加密Cipher

发布时间:2023-09-06 01:33责任编辑:熊小新关键词:暂无标签

二次联通门 : BZOJ 1031: [JSOI2007]字符加密Cipher

/* ???BZOJ 1031: [JSOI2007]字符加密Cipher ???把原串复制一遍 ???然后求一遍后缀数组即可*/#include <cstdio>#include <cstring>#define Max 1000008void read (int &now){ ???register char word = getchar (); ???for (now = 0; word < ‘0‘ || word > ‘9‘; word = getchar ()); ???for (; word >= ‘0‘ && word <= ‘9‘; now = now * 10 + word - ‘0‘);}inline void Swap (int *&a, int *&b){ ???int *now = a; ???a = b; ????b = now;} int sa[Max], rank[Max];int height[Max];char line[Max];int str_1[Max], str_2[Max];int N, M;void Get_Suffix (){ ???register int i; ???static int c[Max], *x = str_1, *y = str_2; ???for (i = 0; i < M; c[i ++] = 0); ???for (i = 0; i < N; c[x[i] = line[i]] ++, i ++); ???for (i = 1; i < M; c[i] += c[i - 1], i ++); ???for (i = N - 1; i >= 0; sa[-- c[x[i]]] = i --); ???register int pos; ???pos = 1; ???for (int j = 1; pos < N; j <<= 1, M = pos) ???{ ???????pos = 0; ???????for (i = N - j; i < N; y[pos ++] = i ++); ???????for (i = 0; i < N; i ++) ???????????if (sa[i] >= j) ???????????????y[pos ++] = sa[i] - j; ???????for (i = 0; i < M; c[i ++] = 0); ???????for (i = 0; i < N; c[x[y[i]]] ++, i ++); ???????for (i = 0; i < M; c[i] += c[i - 1], i ++); ???????for (i = N - 1; i >= 0; sa[-- c[x[y[i]]]] = y[i --]); ???????Swap (x, y); ???????pos = 1; ???????x[sa[0]] = 0; ???????for (i = 1; i < N; i ++) ???????????x[sa[i]] = (y[sa[i - 1]] == y[sa[i]] && y[sa[i - 1] + j] == y[sa[i] + j] && sa[i - 1] + j < N && sa[i] + j < N) ? pos - 1 : pos ++; ???}}int main (int argc, char *argv[]){ ???scanf ("%s", line); ???N = strlen (line); ???M = 256; ??????for (int i = 0; i < N; ++ i) line[i + N] = line[i]; ????line[N << 1] = 0; ??????int P = N; N = 2 * N + 1; ???Get_Suffix (); N = P; ???for (int i = 0; i < N * 2 + 1; i ++) ???????if (sa[i] < N) printf ("%c", line[N + sa[i] - 1]); ???return 0;}

BZOJ 1031: [JSOI2007]字符加密Cipher

原文地址:https://www.cnblogs.com/ZlycerQan/p/8137654.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved