【SPOJ 694】Distinct Substrings (更直接的求法)

【链接】h在这里写链接


【题意】


接上一篇文章

【题解】


一个字符串所有不同的子串的个数=∑(len-sa[i]-height[i])

【错的次数】


0

【反思】


在这了写反思

【代码】

#include<bits/stdc++.h>  
using namespace std;const int N = 2e3;
const int MAX_CHAR = 300;//每个数字的最大值。  
char s[N + 10];//如果是数字,就写成int s[N+10]就好,从0开始存  
int Sa[N + 10], T1[N + 10], T2[N + 10], C[N + 10];
int Height[N + 10], Rank[N + 10];void build_Sa(int n, int m) {int i, *x = T1, *y = T2;for (i = 0; i<m; i++) C[i] = 0;for (i = 0; i<n; i++) C[x[i] = s[i]]++;for (i = 1; i<m; i++) C[i] += C[i - 1];for (i = n - 1; i >= 0; i--) Sa[--C[x[i]]] = i;for (int k = 1; k <= n; k <<= 1){int p = 0;for (i = n - k; i<n; i++) y[p++] = i;for (i = 0; i<n; i++) if (Sa[i] >= k) y[p++] = Sa[i] - k;for (i = 0; i<m; i++) C[i] = 0;for (i = 0; i<n; i++) C[x[y[i]]]++;for (i = 1; i<m; i++) C[i] += C[i - 1];for (i = n - 1; i >= 0; i--) Sa[--C[x[y[i]]]] = y[i];swap(x, y);p = 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] + k] == y[Sa[i] + k] ? p - 1 : p++;if (p >= n) break;m = p;}
}void getHeight(int n)
{int i, j, k = 0;for (i = 1; i <= n; i++) Rank[Sa[i]] = i;for (i = 0; i<n; i++) {if (k) k--;j = Sa[Rank[i] - 1];while (s[i + k] == s[j + k]) k++;Height[Rank[i]] = k;}
}int bo[300];int main() {//freopen("F:\\rush.txt", "r", stdin);  int T;scanf("%d", &T);while (T--){scanf("%s", s);int n = strlen(s), tn = n;s[n] = 0;build_Sa(n + 1, MAX_CHAR);//注意调用n+1  getHeight(n);int ans = 0;for (int i = 1; i <= n; i++)ans += (n - Height[i] - Sa[i]);printf("%d\n", ans);}return 0;
}


转载于:https://www.cnblogs.com/AWCXV/p/7625984.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML-锚点

<!DOCTYPE html> <html> <head lang"en"> <meta charset"UTF-8"> <title>锚点</title> <style> .box1,.box2{ height: 600px; border:1px solid; } </style> </head> <body> <a h…

/dev/mtdN和/dev/mtdblockN的区别

1、/dev/mtdn是linux中的MTD架构中&#xff0c;系统自己实现的mtd分区所对应的字符设备&#xff0c;其里面添加了一些ioctl&#xff0c;支持很多命令&#xff0c;如MEMGETINFO&#xff0c;MEMERASE等。 而mtd-util中的flash_eraseall等工具&#xff0c;就是以这些ioctl为基础而…

#define GPBCON (*(volatile unsigned *)0x56000010) 的理解

2019独角兽企业重金招聘Python工程师标准>>> 对于不同的计算机体系结构&#xff0c;设备可能是端口映射&#xff0c;也可能是内存映射的。如果系统结构支持独立的IO地址空间&#xff0c;并且是端口映射&#xff0c;就必须使用汇编语言完成实际对设备的控制&#xff…

三极管基本参数介绍与放大电路分析

全称为半导体三极管&#xff0c;也称双极型晶体管、晶体三极管&#xff0c;是一种电流控制电流的半导器件&#xff0c;作用是把微弱信号放大成幅度值较大的电信号&#xff0c; 也用作无触点开关。 两个PN结的排列方式有两种&#xff1a;PNP和NPN。 三个端点依序称为射极&#…

Nand分区及nand erase简解

我的nand flash 32M&#xff0c;kernel 2.6.18, rootfs is emb linux, cramfs.nand flash分区如下&#xff1a;static struct mtd_partition nand_partitions[] {/* bootloader (UBL, U-Boot, BBT) in sectors: 0 - 14 */{.name "bootloader",.offset 0,.size 32…

eclipse启动了tomcat,但是浏览器打不开欢迎页

tomcat在eclipse中启动成功&#xff0c;主页却打不开 症状&#xff1a; tomcat在eclipse里面能正常启动&#xff0c;而在浏览器中访问http://localhost:8080/不能访问&#xff0c;且报404错误。同时其他项目页面也不能访问。 关闭eclipse里面的tomcat&#xff0c;在tomcat安装目…

洛谷1011 车站

水题。题目描述有坑&#xff0c;可以先根据样例手算试一试//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn50; int f[50],…

三极管放大电路三种类型

根据三极管三个电极与输入输出端子的连接方式&#xff0c;可归纳为三种&#xff1a;共发射极电路、共基极电路和共集电极电路&#xff1b; 三种电路的共同点&#xff1a;各有两个回路&#xff0c;一个输入回路一个输出回路&#xff0c;两个回路有一个公共 端&#xff0c;而公…

ImportError: No module named 'chardet'

1.使用requsets出现这个错误&#xff0c;ImportError: No module named chardet 原因&#xff1a;requests依赖其他一些模块 解决&#xff1a;依次使用pip安装即可 pip install certifi pip install chardet pip install idna pip install urllib3转载于:https://www.cnblogs.c…

各种组件的js 获取值 / js动态赋值

jQuery获取Select选择的Text和Value:语法解释&#xff1a;1. $("#select_id").change(function(){//code...}); //为Select添加事件&#xff0c;当选择其中一项时触发2. var checkText$("#select_id").find("option:selected").text(); //获取…

Linux下/proc目录简介

1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统&#xff0c;在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统&#xff0c;它只存在内存当中&#xff0c;而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。 用户…

Mysql带返回值与不带返回值的2种存储过程

过程1&#xff1a;带返回值&#xff1a; 1 drop procedure if exists proc_addNum; 2 create procedure proc_addNum (in x int,in y int,out sum int) 3 BEGIN 4 SET sum x y; 5 end 然后&#xff0c;执行过程&#xff0c;out输出返回值&#xff1a; 1 call proc_addNum(2,3,…

MOS管的米勒效应简介

一、米勒平台介绍 Mos管的三极都会存在以下 的三个电容,分别是:Cgs,Cgd,Cds。 米勒电容指的是Cgd。米勒效应在MOS驱动中臭名昭著,他是由MOS管的米勒电容引发的米勒效应,在MOS管开通过程 中,GS电压上升到某一电压值后GS电压有一段稳定值(图中t2~t3阶段),过后Vgs电压…

PopupWindow 使用详解(二) Popwindow 制作常见花哨效果

帝都几日降温&#xff0c;终于被撂倒了。but 只要一息尚存就得不断进步&#xff01;于是&#xff0c;写出 《PopupWindow 使用详解》的第二篇 笔记&#xff0c;先奉上 第一篇链接: 《PopupWindow 使用详解&#xff08;一&#xff09; 中文API 文档 赠送 ListPopupWindow 中文 A…

hbase replication原理分析

本文只是从总体流程来分析replication过程&#xff0c;很多细节没有提及&#xff0c;下一篇文章准备多分析分析细节。replicationSource启动过程org.apache.hadoop.hbase.regionserver.HRegionServer#startServiceThreads ->org.apache.hadoop.hbase.replication.regionserv…

8168

http://blog.csdn.net/crushonme/article/details/10287693 http://blog.csdn.net/yangxueble/article/details/10138763

Mysql查询结果只有一条的情况下把值赋值给变量,再用if else 流程判断

1 BEGIN 2 set n(SELECT count(day) from log where dayCURDATE()); 3 IF n0 THEN 4 call m_LogInsert(); 5 ELSE 6 call m_LoginCheck(); 7 end if; 8 end 转载于:https://www.cnblogs.com/mengms/p/7629486.html

近距离无线通信技术对比

定义&#xff1a;无线通信是利用电磁波信号在自由空间中传播的特性进行信息交换的一种通信方式。 优点&#xff1a;成本低、无物理线路&#xff0c;不受工业环境限制&#xff0c;环境适应能力强&#xff1b; 故障诊断简单&#xff0c;可远程诊断&#xff0c;扩展性强&#xff…

看不清的融资迷局 二线玩家字节跳动在打什么主意?

互联网似乎对离经叛道者总是多一分关注&#xff0c;吃瓜心态随着时间的推进越来越浓烈。 其中&#xff0c;今日头条成了“看热闹”时代最佳的“演员”之一&#xff0c;供看客消遣&#xff1a;其母公司字节跳动一个融资传闻从8月炒到了10月&#xff0c;即便是媒体通过信源确认这…

第3章-动态基础分析实验

Lab 3-1 Question: 1.先对文件使用PEID进行查壳,显示文件被加壳处理过 2.使用Dependency Walker查看文件导入函数&#xff0c;文件只有一个DLL而且只有一个导入函数Exitprocess 3.使用Strings程序查看字符串&#xff0c;发现可疑字符串。 4.动态分析前期准备 4.1 对系统进行初始…