隨便取乙個字母 \(a\),在字串中如果第 \(i\) 為是字母 \(a\) 我們就設為 \(1\),否則設為 \(0\)。
那麼兩個子串等價其實就是存在一種兩兩對應的方案,且在對應的區間內他們的 \(01\) 串相同。
那麼將每個字母的 \(01\) 序列 hash 一下,然後就可以 \(o(26)\) 判斷了。
時間複雜度 \(o(26n)\)。
#include using namespace std;
typedef unsigned long long ull;
const int n=200010;
const ull base1=131,base2=13331;
ull ha[3][27][n],power[3][n],h[5][27];
int n,m;
char ch;
int main()
power[1][i]=power[1][i-1]*base1;
power[2][i]=power[2][i-1]*base2;
} while (m--)
sort(h[1]+1,h[1]+27); sort(h[2]+1,h[2]+27);
sort(h[3]+1,h[3]+27); sort(h[4]+1,h[4]+27);
bool flag=1;
for (int i=1;i<=26;i++)
if (h[1][i]!=h[2][i] || h[3][i]!=h[4][i]) flag=0;
if (flag==1) printf("yes\n");
else printf("no\n");
} return 0;
}
洛谷 2709 小B的詢問
題目描述 小b有乙個序列,包含n個1 k之間的整數。他一共有m個詢問,每個詢問給定乙個區間 l r 求 c i 2 sum c i 2 c i 2 的值,其中i的值從1到k,其中c i 表示數字i在 l r 中的重複次數。小b請你幫助他回答詢問。輸入格式 第一行,三個整數n m k。第二行,n個整數...
洛谷小B的詢問(莫隊)
p2709 小b的詢問 題目描述 小b有乙個序列,包含n個1 k之間的整數。他一共有m個詢問,每個詢問給定乙個區間 l r 求sigma c i 2 的值,其中i的值從1到k,其中c i 表示數字i在 l r 中的重複次數。小b請你幫助他回答詢問。輸入輸出格式 輸入格式 第一行,三個整數n m k。...
洛谷 U6931 燈光
明天就是校園活動了,小明作為場地的負責人,將一切都布置好了。但是在活動的前幾天,校園裡的燈卻都壞掉了,無奈之下,只好再去買一批燈。但是很遺憾的是,廠家看馬上要過年了,就沒有在進貨了,現在只剩下n個發光值不同的燈,作為負責人,你需要,想辦法配出合適的燈。廠家有n盞剩下的燈,小明需要m盞燈,因為活動舉辦...