【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.pswp.cn/news/253236.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253236.shtml
英文地址,請注明出處:http://en.pswp.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 對系統進行初始…