校內測 11 26 T1 詢問 字母串

2021-10-10 21:27:56 字數 1726 閱讀 2264

傳送門

定義兩個字串等價,當且僅當乙個串中的26

2626

中字母在對應各不相同的26

2626

中字母後和另乙個串相同

給出乙個原串s

ss,有m

mm組形如(x,

y,z)

(x,y,z)

(x,y,z

)的詢問,表示從x

xx和y

yy開始,長度為z

zz的s

ss的兩個子串是否等價

對於兩個串是否等價,我們不難發現,只有當字母的排列相同時才有可能,還要保證每種字母對應的是不同的字母

所以我們可以想想如何去記錄這樣的東西,這,似乎是一種狀態,那我們對於字串每個字母單獨記錄

乙個位置上是不是這種字母,用1/0

1/01/

0來表示,隨便給個進製,狀態就是把整個串的1/0

1/01/

0乘在一起,形如10010011

10010011

100100

11,當然具體的情況還是要看進製的(十進位制被卡了我也不曉得為什麼)

對於兩個子串等價的判定,我們根據每種字母的狀態,因為我們只關心這種字母的排列情況,而變成了什麼字母並不影響答案的判定,所以把所有狀態排個序,逐個比較

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define bace 200005

#define u unsigned

using

namespace std;

inline ll read()

while

(c>=

'0'&&c<=

'9')

return s*f;

}char s[

200005];

int t[

200005][

30];u ll m[

200005];

u ll ksm

(u ll x,u ll y)

return s;

}int q1[30]

,q2[30]

;int

main()

for(

int i=

1;i<=n;i++)}

for(

int i=

1;i<=m;i++

)sort

(q1+

1,q1+27)

;sort

(q2+

1,q2+27)

;int tf=0;

for(

int k=

1;k<=

26;k++)if

(q1[k]

!=q2[k])if

(tf)

u ll bc=

ksm(bace,z)

; u ll s1=m[a]

-m[x-1]

*bc,s2=m[b]

-m[y-1]

*bc;

if(s1==s2)

printf

("yes\n");

else

printf

("no\n");

}return0;

}

題解 模擬賽11 26 T1

很容易就能得到每跳一步就是從黑到白或白到黑 所以如果起點和終點全白或全黑,肯定no 如果起點和終點一黑一白,肯定yes 然後我就錯掉了,因為我沒有注意到有可能起點到不了終點 這種情況只會在棋盤較小的情況下出現 所以我用寬搜判斷了一下 code include define maxn 100010 u...

兒童節校內測T1 逃亡

題目描述 逃亡 escape.cpp c pas 邪狼緊張地說 老大,警察快追過來了,我們快逃跑吧!修羅王傲然道 在我的字典裡沒有逃跑 邪狼內心崇敬地想 老大實在是太有領袖範了 修羅王接著說 只有戰略轉移。邪狼 現在,修羅王和邪狼兩人需要從a地出發盡快到達b地。出發時a地有一輛可帶一人的自動駕駛懸浮...

校內測 11 3 T1 選數字 容斥

傳送門 給定乙個序列a aa,有m mm組詢問,各有l,r x l,r,x l,r,x,表示從l r l sim r l r中選出3 33個數能否按位或結果恰好為xxx 通過預處理出來整個序列有多少個數orx x or x x orx x,然後用字首和存下,我們就可以知道在l r l sim r l...