傳送門
定義兩個字串等價,當且僅當乙個串中的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...