zzt 得到了乙個字串 s 以及乙個整數 k。
wzh 在 1995 年提出了「優雅 k 串」的定義:這個字串每一種字元的個數都是 k 的倍數。
現在 zzt 想要對字串進行 q 次詢問,第 i 次詢問給出乙個區間 [li, ri],他想計算 [li, ri] 中有多少個子串是「優雅 k 串」。
由於 zzt 忙於工作,所以他把這個問題交給了你,請你幫忙解決。
第一行輸入乙個正整數 k。接下來 q 行,每行輸入兩個正整數 li 和 ri,表示第 i 次詢問。第二行輸入乙個字串 s。
第三行輸入乙個正整數 q,表示有 q 次詢問。
1 ≤ k ≤ 50.
1≤ | s | ≤ 3 x 104 且 s 僅包含小寫英文本母.
1≤ q ≤ 3 x 104.
1 ≤ xi ≤ yi ≤ n.
每次詢問,輸出乙個正整數,表示滿足條件的「優雅 k 串」的數量。莫隊即可。
#include #ifdef local
#define debug(x) cout<<#x<<" = "<<(x)const int mod = 1e9 + 7;
const double pi = acos (-1.);
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const ll infll = 0x3f3f3f3f3f3f3f3f;
const int maxn = 5e5 + 5;
int k, q, n;
char s[maxn];
int block;
ull val[maxn];
int pre[maxn][26];
unordered_map vis;
struct query
} qr[maxn];
ll res[maxn];
int main()
}block = sqrt (n + 0.5);
sort (qr + 1, qr + 1 + q);
int l = 1, r = 0;
ll ans = 0;
for (int i = 1; i <= q; i++)
while (r > qr[i].r)
while (l < qr[i].l)
while (l > qr[i].l)
res[qr[i].id] = ans;
}for (int i = 1; i <= q; i++) printf ("%lld\n", res[i]);
return 0;
}
Wannafly 挑戰賽 19 參考題解
這一次的 wannafly 挑戰賽題目是我出的,除了第一題,剩餘的題目好像對大部分演算法競賽者來說好像都不是特別友好,但是個人感覺題目質量還是過得去的,下面是題目鏈結以及題解。題目鏈結 wannafly 挑戰賽 19 參考題解 problem a.佇列 q 將操作離線倒序處理,可以線性效率解決這個問...
Wannafly挑戰賽 19 A 佇列Q 思維
這道題剛開始我的想法是用兩個棧分別去存first和last所操作的數,用map標記入棧的數,然後先將first棧中的數輸出,然後再遍歷陣列輸出沒有被標記的數,最後再輸出last棧中的數,雖然我覺得沒什麼問題吧,但是只過了5 的樣例。能ac的方法就是首先我們要從100000開始輸入資料 至於為什麼等會...
牛客 wannafly挑戰賽19 A 佇列
zzt 創造了乙個佇列 q。這個佇列包含了 n 個元素,佇列中的第 i 個元素用 qi 表示。q1 表示隊頭元素,qn 表示隊尾元素。佇列中的元素是 n 的乙個全排列。zzt 需要在這個佇列上執行 p 次操作,操作分兩種 first x 將元素 x 移到隊頭。last x 將元素 x 移到隊尾。在 ...