Codeforces 985F 字串雜湊

2021-08-20 05:13:01 字數 714 閱讀 4782

題目鏈結

題意簡述:給定乙個長度為n(n<=2e5)的字串s(僅含有小寫字母),有m(m<=2e5)次查詢。每次查詢給三個數,x,y,len,求在s[x]~s[x+len-1]和s[y]~s[y+len-1]是否存在相應位置唯一對應關係。(例如aba和brb,aaa和kkk,abs和ert是唯一對應。aab和abc,test和best則不是唯一對應)

分析:此題比較次數比較多,可採用雜湊字串來解決。由於比較的是字元相應位置,可對s串中每個字元分別雜湊。然後對於兩個字串,就可以逐一求出每個字元的雜湊值,然後就是求26個字元的逐一對應關係,排個序就解決啦。

#includeusing namespace std;

typedef unsigned long long ll;

const int n=2e5+10;

ll h[26][n],p[n];

int a[30],b[30];

char s[n+10];

ll get(int i,int l,int r)

int main()

sort(a,a+26);

sort(b,b+26);

bool flag=true;

for(int i=0;i<26;i++)

if(a[i]!=b[i])

printf("%s\n",flag?"yes":"no");}}

}

codeforces 1194F 組合數學

傳送門 你有n個事件,你需要按照1 n的順序完成這些事件,每個事件需要 t i 的時間完成,你現在一共有t的時間去做這些事情,每做一件事情的時候,你有0.5的概率花費 t i 的時間完成他,也有0.5的概率花費 t i 1 的時間去完成他,如果在做這個事件的時候時間花完了,你就相當於沒有做成這個事件...

codeforces 1114F 線段樹練習

這是一道用線段樹維區間值的一道題,題意很簡單,就是對於給定的乙個序列,初始時每個數的值不大於300,然後有兩中操作,乙個是對區間 l,r 的每個數乘上以個數x,乙個是詢問區間的乘積的尤拉函式值,首先對於第乙個操作顯然可以用線段樹的延遲更新來完成,對於第二個操作,我最先沒考慮資料,就想著直接維護區間的...

codeforces 1108F 最小生成樹並查集

讓我想起了徐州的第一題。還以為比那題更難 第二天早上隊友跟我聊了下這題,然後我發現這題就可以用我徐州第一題的錯誤的思路做 雖然那題因為資料特殊性a了。我們開兩個並查集,對於一段相同的邊,f1表示這段相同的邊之前的連線情況,然後從前向後列舉這段邊,如果能連就連,只更新f2,如果不能連,去f1中看看是不...