QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#552485 | #9244. Counting Strings | ucup-team1198# | AC ✓ | 5066ms | 143156kb | C++20 | 4.6kb | 2024-09-07 23:10:54 | 2024-09-07 23:10:55 |
Judging History
answer
#include <map>
#include <set>
#include <array>
#include <cmath>
#include <deque>
#include <bitset>
#include <random>
#include <string>
#include <vector>
#include <cassert>
#include <complex>
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>
using namespace std;
const int MAXN = 100100;
const int W = 25;
int sums[(1 << W) + 228];
struct Btst {
int vals[MAXN / W];
Btst() {
fill(vals, vals + MAXN / W, 0);
}
Btst(int len) {
fill(vals, vals + MAXN / W, 0);
for (int i = 0; i < len / W; ++i)
vals[i] = (1 << W) - 1;
int b = len / W;
for (int i = 0; i < len - b * W; ++i) {
vals[b] |= 1 << i;
}
}
void set(int i, int x) {
if (x == 1) {
vals[i / W] |= 1 << (i % W);
} else {
vals[i / W] &= ~(1 << (i % W));
}
}
Btst& operator&=(const Btst& other) {
for (int i = 0; i < MAXN / W; ++i)
vals[i] &= other.vals[i];
return *this;
}
Btst& operator|=(const Btst& other) {
for (int i = 0; i < MAXN / W; ++i)
vals[i] |= other.vals[i];
return *this;
}
long long get_sum() const {
long long ans = 0;
for (int i = 0; i < MAXN / W; ++i) {
ans += (i * W) * __builtin_popcount(vals[i]);
ans += sums[vals[i]];
}
return ans;
}
bool get(int i) const {
return 1 & (vals[i / W] >> (i % W));
}
};
const int K = 337;
Btst precalc[K];
vector<int> primes;
int min_prime[MAXN];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
for (int x = 0; x < (1 << W); ++x) {
for (int i = 0; i < W; ++i) {
if (x & (1 << i))
sums[x] += i + 1;
}
}
for (int i = 2; i < MAXN; ++i) {
if (min_prime[i] == 0) {
min_prime[i] = i;
primes.emplace_back(i);
}
for (int j = 0; j < primes.size() && primes[j] <= min_prime[i] && primes[j] * i < MAXN; ++j)
min_prime[primes[j] * i] = primes[j];
}
for (int i = 0; i < MAXN; ++i)
precalc[0].set(i, 1);
precalc[1] = precalc[0];
for (int i = 2; i < K; ++i) {
if (min_prime[i] == i) {
precalc[i] = precalc[0];
for (int j = 0; j < MAXN; j += i)
precalc[i].set(j, 0);
} else {
precalc[i] = precalc[i / min_prime[i]];
precalc[i] &= precalc[min_prime[i]];
}
}
int m;
cin >> m;
string s;
//for (int j = 0; j < m; ++j)
// s += char('a' + rand() % 3);
cin >> s;
s += '$';
int N = s.size();
auto safe = [&](int i) {
if (i >= N)
return i - N;
return i;
};
vector<int> order(N);
iota(order.begin(), order.end(), 0);
sort(order.begin(), order.end(), [&](int a, int b) {
return s[a] < s[b];
});
vector<int> classes(N);
classes[order[0]] = 0;
for (int i = 1; i < N; ++i)
classes[order[i]] = classes[order[i - 1]] + (s[order[i]] != s[order[i - 1]]);
vector<int> new_order(N);
vector<int> new_classes(N);
vector<int> cnt(N);
for (int l = 1; l < N; l *= 2) {
fill(cnt.begin(), cnt.end(), 0);
for (int i = 0; i < N; ++i)
++cnt[classes[i]];
for (int i = 1; i < N; ++i)
cnt[i] += cnt[i - 1];
for (int i = N - 1; i >= 0; --i) {
int j = order[i] - l;
if (j < 0)
j += N;
--cnt[classes[j]];
new_order[cnt[classes[j]]] = j;
}
new_classes[new_order[0]] = 0;
for (int i = 1; i < N; ++i)
new_classes[new_order[i]] = new_classes[new_order[i - 1]] + (make_pair(classes[new_order[i]], classes[safe(new_order[i] + l)]) !=
make_pair(classes[new_order[i - 1]], classes[safe(new_order[i - 1] + l)]));
swap(classes, new_classes);
swap(order, new_order);
}
vector<int> lcp(N);
int tmp = 0;
vector<int> id(N);
for (int i = 0; i < N; ++i)
id[order[i]] = i;
for (int i = 0; i < N; ++i) {
if (id[i] == N - 1) {
tmp = 0;
continue;
}
int j = id[i];
while (s[i + tmp] == s[order[j + 1] + tmp])
++tmp;
lcp[j] = tmp;
tmp = max(tmp - 1, 0);
}
Btst alive;
Btst cur;
long long ans = 0;
for (int i = 0; i < N; ++i) {
int l = order[i] + 1;
int len = N - l;
cur = precalc[0];
for (int j = K - 1; j > 1; --j) {
if (l % j == 0) {
cur &= precalc[j];
l /= j;
}
}
if (l > 1) {
for (int j = 0; j < MAXN; j += l)
cur.set(j, 0);
}
alive |= cur;
alive &= Btst(len);
ans += alive.get_sum();
alive &= Btst(lcp[i]);
ans -= alive.get_sum();
}
cout << ans << '\n';
return 0;
}
这程序好像有点Bug,我给组数据试试?
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2307ms
memory: 140708kb
input:
4 abca
output:
14
result:
ok answer is '14'
Test #2:
score: 0
Accepted
time: 2317ms
memory: 140632kb
input:
1 a
output:
1
result:
ok answer is '1'
Test #3:
score: 0
Accepted
time: 2311ms
memory: 140472kb
input:
2 aa
output:
3
result:
ok answer is '3'
Test #4:
score: 0
Accepted
time: 2299ms
memory: 140668kb
input:
2 ab
output:
3
result:
ok answer is '3'
Test #5:
score: 0
Accepted
time: 2312ms
memory: 140476kb
input:
100 xgljgljgljjljjjjljtjljtgljgljgljjljjjjljtjljtjljgljljgljgljjljjjjljtjljtjljgljllljgllgljgljjglljgljl
output:
101808
result:
ok answer is '101808'
Test #6:
score: 0
Accepted
time: 2320ms
memory: 140700kb
input:
100 ilhliaiehaiehldgeieieedveldgeaeaehldgeldgeiiedeiaiehaiehldgeieieedveiaehldgeihleiaeaehldgeiaeaeeheia
output:
103718
result:
ok answer is '103718'
Test #7:
score: 0
Accepted
time: 2310ms
memory: 140500kb
input:
100 xoakgbazaclazfrmucgodlhrvazkyrqcwufonvcmqpvulhuudtmcfhsklletywchvvrxrjfgsfaoozzouzwfrtdlryfiqdtzjkcp
output:
104574
result:
ok answer is '104574'
Test #8:
score: 0
Accepted
time: 2300ms
memory: 140492kb
input:
100 aabbaabbabaaabaaaaaabababbbabaabaaabaaabaaaabbbbababbbbbbabbbaabbbaaaaababababaabababaababaabbbabaaa
output:
103589
result:
ok answer is '103589'
Test #9:
score: 0
Accepted
time: 2357ms
memory: 140416kb
input:
2000 mbrpuyrsqimuuwnmxsukdkfmhwytmfwwccfdkzljulnvlueciggqniuyocqxoiepzuzhnfwwccvmxyticsttujuzhnfwwccfwkbuuecinfwwccfwkbuueciggqniuyodfkhnfwwccfdkzljulnvlueciggqniuyocqccfwkbuueciggquyciggqniuyodfkevrpjzuzwyocqccfwkbuueciggquyciggqniuyodfkevrpjzuzhnfwwcoiynpzlqsjimovvcrzbggnciggqniuyodfkevrpjzuzhnfwy...
output:
801214345
result:
ok answer is '801214345'
Test #10:
score: 0
Accepted
time: 2360ms
memory: 140708kb
input:
2000 kqxjsrvosiglekiyqcvcuziktmldotulfsjttakesboiiuwwukcuytllrixkibipmcfkibipmcfchmczrunxluomocoaltfiknghuglwiychueqazfcalzqgwoqeyifsawnaennubfacviqcwhstxgvjfggcluomocuomocoareueqazfcalzqgwoaxfchmczrunxecifuecidmpavuecidmpavxzysvebqavozoqsnnhimpjgcqnwfzhysnnaevxreouaxyykcuynghuglygfjcvyggcluomocuomo...
output:
806947518
result:
ok answer is '806947518'
Test #11:
score: 0
Accepted
time: 2343ms
memory: 140500kb
input:
2000 uwgwftwgqszqrzzokbabeqpmnhlthazkxhncmmrkbhueafpsncvtpvxoxaatarvrmnpnkkrafkwzchacxcuphbwkmbtrxtydpsjzsvkskprttbyonkhwdsckvgtqvtjixayxggktqbwkhrcujsxfwiahxexnbjnzulzmpmubiqzbphrbpmvjjikcqftgnvzxzpzimpmidcmeescxhtqbukkwppipuumhpbyywdooxblckfuartpvrehkjspsscztazgtmpvqjpmjmezhroympynptcjcpvtzesfmair...
output:
812517617
result:
ok answer is '812517617'
Test #12:
score: 0
Accepted
time: 2360ms
memory: 140708kb
input:
2000 aaababaaabaaaabbbaaabbaabaabbababaababbababbbbbbabaaaabbbbbbbabbbaabbababbaaabaababbababbbaaabbbabbaabbbaaabbabbabbbbabbbababaaaabbabbababaaabbbbbbababbbbabbbaababbabaabbbbababaaaababaaabbbabbaabaaabababaaababbbaabaaabbbbbabbaaaabbaabababbaaabbbbbaababbabaaaaaabababbaaabbbbabbbaaaababbabbbaaaba...
output:
812460124
result:
ok answer is '812460124'
Test #13:
score: 0
Accepted
time: 5066ms
memory: 142896kb
input:
100000 mglkvngcyzmvyrpxumiusfvkzutlgexoiyjezqsdudzbjxyovuhocbjeyhgjlncvsihuopxevcrvlmphgtmibfvqaffrgrpshxprppojmhvhfxffnscxprhrckqjefohfjadbasuksrljfonckgvvynyyhwtktgonksetyjxftgxhfyplekgmgtinfhslcmgxiiorcgndimffpvolzfrqnpdaijdkujoaqgwoowxkivrtboylhdvenwiqxbfovydkidseplcyqhheinoqrghnqilwrgkcxpkdzjrx...
output:
101324985069108
result:
ok answer is '101324985069108'
Test #14:
score: 0
Accepted
time: 5046ms
memory: 143020kb
input:
100000 knrammmidsuxwygkfulairkwldjfxyovcnfgxtajosuafyjflkjmzjfniohxucagrmthceicngqrasgcskanqrfkuqxeggafhlpxkicokvuatkxlduldrxkmhdiwxrjukqcpfbiuskbfejjxfafxpibpjzfycuaaoaerajqspchthdgnmhqwdqvkqfubyoibcflddbwbpvbtmomopuovdcbgdnifkkewxixmtcagsfifbnlrajtuccsxrjuqrphuoldurcnjwqwraoulyxsqsjkaxacouwujpyqfe...
output:
101324985069554
result:
ok answer is '101324985069554'
Test #15:
score: 0
Accepted
time: 3339ms
memory: 141156kb
input:
40000 mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm...
output:
6463823387870
result:
ok answer is '6463823387870'
Test #16:
score: 0
Accepted
time: 3385ms
memory: 141160kb
input:
40000 wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...
output:
6382800423488
result:
ok answer is '6382800423488'
Test #17:
score: 0
Accepted
time: 3350ms
memory: 141236kb
input:
40000 bbbabbbbbbaabbaabaaaababaabaaabbbaaabaabbaaababbabbbbaabbaaababbbaababbaaabbabaaabbabbbbbbbbabaaaaaaabbabaababaabababaaaabaabaabbbbbbbaaaabaababbbbbaabbaabbaababbbbaaabaabbabbabbbaabaabbbbaabbabbbabababbbaaabbbaaababaaaaabbaaabaabaaabbabaaabbaabbaaabababaaabaabaaabaabbaabaabaabaabaababbaabbaaa...
output:
6485120267266
result:
ok answer is '6485120267266'
Test #18:
score: 0
Accepted
time: 3359ms
memory: 141236kb
input:
40000 tttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt...
output:
800020000
result:
ok answer is '800020000'
Test #19:
score: 0
Accepted
time: 5040ms
memory: 143016kb
input:
100000 ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...
output:
101137073335748
result:
ok answer is '101137073335748'
Test #20:
score: 0
Accepted
time: 5062ms
memory: 143024kb
input:
100000 nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn...
output:
100461213430599
result:
ok answer is '100461213430599'
Test #21:
score: 0
Accepted
time: 5029ms
memory: 142800kb
input:
100000 bslghenpredjtkgndijltrmysucihsrsnselcsrumqotigyzviasrrickbbtxylubpeqjkcbzerviihnnfymdhgpongdqkpfqwrblqzxdbecktaezedfndyncabehsgoxashszbyqbfnolnbcmsdaulgdyvhfpctmhdbfycfqgfoprbnsqosocnqxiwhvtmfrvxydutmasdmbshbknusybepunclxtynonodldbrgvcatizjscrifzbjfmwrbfedntreoumkuacuszsulqebqfloydlhabbhbtjnw...
output:
101324985069047
result:
ok answer is '101324985069047'
Test #22:
score: 0
Accepted
time: 5034ms
memory: 142828kb
input:
100000 owalzrsepmooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...
output:
66609812613
result:
ok answer is '66609812613'
Test #23:
score: 0
Accepted
time: 5048ms
memory: 142848kb
input:
100000 swtpnyrtrjjvecymbvpjkcraazjzwjnawoihpmfnjkrhbnqbpgnfldgjuuesdtwipkvxqhfcjgyurqxsbnsfquesnjpyisnvjleuflxcovfiblfkixliqflqvswyvxrfjfoopdjsdowjsrwkokguvlqrrdfxfakqdnjrmtdxvzczvovsjhvelaizfasgyjvyudsyjkrassxoheuhfbbxdorxivdzgztosybvbaffyibkvjxdnluowqyyknsicqmvqjfnvhxqriftehsugfabpbszfvqyehuekphxi...
output:
101130039817037
result:
ok answer is '101130039817037'
Test #24:
score: 0
Accepted
time: 5060ms
memory: 142808kb
input:
100000 whogzkfhreoscnrbfzczzmpapeieazzzzzagazzayapzzzzaqfoacfffitsithrtnytiegycwzczzaytsxivfiiiveeezzaqfoaqfoacdtitfffiiiqchietnypeieafzaucwqfoacdttsithrtnyiiiqfuxiveeeuuaslaazzwzzaazzwzzzzzagazzayapzzzzaqfoacfffitsithrtnytiegycwzczzaytszztsitqfoacdttsithrtndiitfffiiiqcyapecdttsithaazoatazzayaaqfoac...
output:
100955554850350
result:
ok answer is '100955554850350'
Test #25:
score: 0
Accepted
time: 5013ms
memory: 142832kb
input:
100000 qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq...
output:
5000050000
result:
ok answer is '5000050000'
Test #26:
score: 0
Accepted
time: 4999ms
memory: 142824kb
input:
99996 hfaeeqetfftvwktktfftaettttutjetjtjetjetktfftvatfjeljtakttttktfftvwklaettftvftjetjetktklftvjutjetjtjetjetvwklaettftvjutjetjjtftjetjtttttktjttljfftvwklaettfttftvjutjetjjtftjetjetktklfttvjutjetjettjeftfjeljtakttttktfftvwklaettftvftjetjetktklftvjutjetjtjetjetvwklaettftvjutjetjjtftjetjtttttktjttljf...
output:
97148038053410
result:
ok answer is '97148038053410'
Test #27:
score: 0
Accepted
time: 4999ms
memory: 143156kb
input:
99997 hazaorzbkzqhymcexwahmkkexwackcokahrzcexwahmcokazaorwahmcookxccokahrzcexwahcokahrskehmcorclclmkahrzcexwahmcokazaorwahmcookwcexwakokacoahmcookwahmcookxccokahrzcexwahmcokazaorwahxccokahrzcexwahmcokazaocokwamluorwahmcookwcexwahrzcxwahmcokwamlurclclskkxccokahrzcxhrzcexwahmcokazaorwahmzcexwaaorwahma...
output:
89901430986589
result:
ok answer is '89901430986589'
Test #28:
score: 0
Accepted
time: 5046ms
memory: 142996kb
input:
99998 ptkbpqxysqlmgpoyfjxysogysqlmgxgpogsystgmqysosgposqggtlmgxmgtgsqlmgysqggqxqlbsttsgposqlssysgytposgsqlmmqxmgpogsystgysmqxmmsgtggtpoyggtggtpospogjxysmqxysqlmgxmgtggpogsystgmqysosgposqlssgtmgxmgxmgtggtpospogjxysmqxysqlmgxmgtggtpostggtpogysqlmgysqggqxggtlmfjtgggslbsgtmgxmgxmgtggtpospogjxysmogtggtlm...
output:
93788469111158
result:
ok answer is '93788469111158'
Test #29:
score: 0
Accepted
time: 5038ms
memory: 143076kb
input:
99998 iddudaoqdudakrdanwwakrwdnoqduddanpakrwuuqakrdnpugaanpakrwuuqakrddanwwakrwdnoqduddanpaugaanpakrwuuqakrddanwwakrwdnoqduddakrddanwwakrwdnoqduddanpakrqduddanpaugaanpakrwuuqakrddanwwakrwdnduddanpakrwuuqakrdnpnpugakrwdnoqduddanpakrwuuqakrdnpnpunanwwakrwdnoqduddauoquoqnnwwwuuopurwuupuddakrddanwwakrwd...
output:
97357749831441
result:
ok answer is '97357749831441'
Extra Test:
score: 0
Extra Test Passed