看到題目,資料範圍有點怪異。
對於95%的資料,
對於100%的資料,
意思是只有5分是正解。
好吧,95pts的
很明顯,答案就是
而如何才能拿到100pts呢?我們可以先列舉a段的長度,很明顯每個長度為lcp,與往後求lcs,若
這樣就可以通過
#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
#define int ll
#define maxn 30005
const int mo=3e7+7;
#define gc() getchar()
templateinline void read(_t &x)
while(s>='0'&&s<='9')
x*=f;
}int t,a[maxn],b[maxn],n;
int powm[maxn],hash[maxn];
char ns[maxn];
int gethash(int l,int r)
signed main()
int head=i-ans+1;l=1;r=len;ans=0;
while(l<=r)
int tail=i+ans-1;
head=max(head+len-1,i);tail=min(tail,i+len-1);
if(head<=tail)
}int res=0;
for(int i=1;i<=n;i++)a[i]+=a[i-1],b[i]+=b[i-1];
for(int i=1;i
printf("%lld\n",res);
} return 0;
}
NOI2016 優秀的拆分
題目實際上要求我們求從每個點出發的aa串的數量 考慮點i的答案,發現如果字首i與字首j j i 的最長公共字尾 i j,那麼i點出發向前就存在乙個長度為i j的aa串,題目即求對於每個字首,有多少個在他之前的字首滿足條件 考慮字尾自動機,由於每個字首都是字尾自動機parent樹上的一點,即兩個字首的...
NOI2016 優秀的拆分
點此看題 首先轉化問題,我們可以求出a i b i a i b i a i b i 即以i ii結束 開始的aaaa aa串的數量,這樣答案就可以表示為 a i b i 1 sum a i times b i 1 a i b i 1 求這兩個陣列,可以隔距離len lenle n設定乙個點,這樣乙個...
NOI2016 優秀的拆分
如果乙個字串可以被拆分為 aabb 的形式,其中 a 和 b 是任意非空字串,則我們稱該字串的這種拆分是優秀的。例如,對於字串 aabaabaa,如果令 a mathrm b mathrm 我們就找到了這個字串拆分成 aabb 的一種方式。乙個字串可能沒有優秀的拆分,也可能存在不止一種優秀的拆分。比...