1. 程式人生 > >BZOJ 3238 差異

BZOJ 3238 差異

題意

給出一個長度為n的字串S,令 T i T_i 表示它從第i個字元開始的字尾。求
(其中 l e n

( a ) len(a) 表示字串a的長度,lcp(a,b)表示字串a和字串b的最長公共字首)
a n s
= 1 i < j
n
l e n ( T i ) + l e n ( T j ) 2 l c p ( T i , T j ) ans=\sum_{1\leq i<j \leq n}len(T_i)+len(T_j)-2*lcp(T_i,T_j)

題解

我們試圖轉化要求和的那一坨,然而似乎並不能轉化出什麼?
我們可以分成兩部分
a n s 1 = 1 i < j n l e n ( T i ) + l e n ( T j ) = 1 i < j n ( n i + 1 ) + ( n j + 1 ) = 1 i < j n i + j = i = 1 n ( ( n i ) i + j = i + 1 n j ) = i = 1 n ( ( n i ) i + n 2 + n i 2 i 2 ) = i = 1 n ( n i ) i + n ( n + 1 ) 2 i 2 + i 2 = n 2 ( n + 1 ) 2 + i = 1 n n i + 3 i 2 i 2 = n 2 ( n + 1 ) 2 + n i = 1 n i 3 2 i = 1 n i 2 1 2 i = 1 n i = n 2 ( n + 1 ) n ( n + 1 ) ( 2 n + 1 ) 4 n ( n + 1 ) 4 = n 2 ( n + 1 ) n ( n + 1 ) 2 2 = n ( n 1 ) ( n + 1 ) 2 ans_1=\sum_{1\leq i<j \leq n}len(T_i)+len(T_j)=\sum_{1\leq i<j \leq n}(n-i+1)+(n-j+1)=\sum_{1\leq i<j \leq n}i+j\\ =\sum_{i=1}^n((n-i)i+\sum_{j=i+1}^nj)=\sum_{i=1}^n((n-i)i+\frac{n^2+n-i^2-i}{2})\\ =\sum_{i=1}^n(n-i)i+\frac{n(n+1)}{2}-\frac{i^2+i}{2}\\ =\frac{n^2(n+1)}{2}+\sum_{i=1}^nn_i+\frac{-3i^2-i}{2}\\ =\frac{n^2(n+1)}{2}+n\sum_{i=1}^ni-\frac{3}{2}\sum_{i=1}^ni^2-\frac{1}{2}\sum_{i=1}^ni\\ =n^2(n+1)-\frac{n(n+1)(2n+1)}{4}-\frac{n(n+1)}{4}=n^2(n+1)-\frac{n(n+1)^2}{2}\\ =\frac{n(n-1)(n+1)}{2}

相關推薦

BZOJ 3238 差異

題意 給出一個長度為n的字串S,令 T i

bzoj 3238: [Ahoi2013]差異

ade 英文 algorithm ans rip break input += || Description Input 一行,一個字符串S Output 一行,一個整數,表示所求值 Sample Input cacao Sample Output 54

BZOJ 3238 [Ahoi2013]差異

單調棧 一點 和我 face http i++ main printf [] 題鏈: http://www.lydsy.com/JudgeOnline/problem.php?id=3238 題解: 後綴數組套路深。 問題轉化為求出任意兩個後綴的LCP之和 在計算貢獻時,各

bzoj 3238 [Ahoi2013]差異 後綴數組 + 單調棧

ron rac ++i 表示 names 最小 貢獻 cpp pro 題目鏈接 Description 一個長度為\(n\)的字符串\(S\),令\(T_i\)表示它從第\(i\)個字符開始的後綴。求\[\sum_{1\leq i\leq j\leq n}len(T_i)+

bzoj 3238: [Ahoi2013]差異【SAM+樹形dp】

首先只有lcp(i,j)需要考慮 因為SAM的parent樹是字尾的字首的最長公共字尾(……),所以把這個串倒過來建SAM,這樣就變成了求兩個字首的最長公共字尾,長度就是這兩個字首在parent樹上的lcs對應的最大長度dis 這裡用treedp解決即可,就是合併一下size #include<ios

BZOJ 3238 [Ahoi2013]差異 (字尾陣列+單調棧)

題目大意:求$\sum_{1\leq i<j \leq N} suf_{i}+suf_{j}-2\cdot lcp(suf_{i},suf_{j})$ 先是字尾陣列打錯了,又是把+=打成了=,我是zz 轉化式子,原式=$\sum_{i=1}^{n-1}(i+1)\cdot i-\sum_{1\leq

[Luogu P4248] [BZOJ 3238] [AHOI2013]差異

洛谷傳送門 題目描述 給定一個長度為 nn 的字串 SS,令 TiTi 表示它從第 ii 個字元開始的字尾。求 ∑1⩽i<j⩽nlen(Ti)+len(Tj)−2×lcp(Ti,

洛谷 P4248: bzoj 3238: [AHOI2013]差異

題目傳送門:洛谷 P4248。 題意簡述: 定義兩個字串 \(S\) 和 \(T\) 的差異 \(\operatorname{diff}(S,T)\) 為這兩個串的長度之和減去兩倍的這兩個串的最長公共字首的長度。 給定一個字串,定義從第 \(i\) 個字元開始的字尾為 \(Suf_i\)。 求 \(\

@bzoj - [email protected] [Ahoi2013]差異

目錄 @[email protected] @[email protected] @accepted [email protected] @[email protected] @[email protected] 給定一個長度為

bzoj千題計劃314:bzoj3238: [Ahoi2013]差異(字尾陣列+st表+單調棧)

#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define N 500001 int n

51nod 1275 連續子段的差異

dash 什麽 splay display 最小值 當我 ace gif isp 分析: 1、首先是尺取,尺取到每一個區間,區間滿足這個條件,最大-最小<=k; 2、對於一個動態區間,怎麽維護他的最大值,最小值(的下標);——單調

bzoj - 1007

namespace ans operator using str pac bitset top 技術 1 #include <algorithm> 2 #include <cstring> 3 #include <cstdio>

完全備份數據和差異備份數據的shell腳本

完全備份數據和差異備份數據的shell腳本#!/bin/bash # # Description: 該腳本功能,以周為單位循環;周五實行完全備份,周六不備份,周日至周四實行差異備份; # 因工作需要,不實行壓縮打包的方式,采用cp完全備份,rsync差異備份; #

BZOJ 1411 ZJOI2009 硬幣遊戲

ret dea 遊戲 true 硬幣 air 技術 i++ include 遞推; 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using n

BZOJ 3122 SDOI2013 隨機數生成器

color false std ros == d+ eal eof close 公式就不推了.hzwer上的很清楚. 值得註意的一點是,如果最後答案成0,需要加上mod.否則400ms wa. 1 #include<cstdio> 2 #incl

BZOJ 4827 [Hnoi2017]禮物 ——FFT

最小 sharp scan con 禮物 struct swa 1.0 -i 題目上要求一個循環卷積的最小值,直接破環成鏈然後FFT就可以了。 然後考慮計算的式子,可以分成兩個部分分開計算。 前半部分FFT,後半部分掃一遍。 #include <map> #i

BZOJ 4569 [Scoi2016]萌萌噠 ——ST表 並查集

oid include long long amp else n) div 每一個 並查集 好題。 ST表又叫做稀疏表,這裏利用了他的性質。 顯然每一個條件可以分成n個條件,顯然過不了。 然後發現有許多狀態是重復的,首先考慮線段樹,沒什麽卵用。 然後ST表,可以每一層表示對

bzoj 1787: [Ahoi2008]Meet 緊急集合

點擊 緊急 ring input ahoi2008 nbsp mage swa problems 1787: [Ahoi2008]Meet 緊急集合 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3016 Solve

BZOJ 2288 【POJ Challenge】生日禮物(貪心+優先隊列)

ace urn ons target challenge pri 最大 font return 【題目鏈接】 http://www.lydsy.com/JudgeOnline/problem.php?id=2288 【題目大意】   給出一列數,求最多取m段

BZOJ 4884 [Lydsy2017年5月月賽]太空貓(單調DP)

return 畫面 int pac logs name 左右 ring size 【題目鏈接】 http://www.lydsy.com/JudgeOnline/problem.php?id=4884 【題目大意】   太空貓(SpaceCat)是一款畫面精