QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#552485#9244. Counting Stringsucup-team1198#AC ✓5066ms143156kbC++204.6kb2024-09-07 23:10:542024-09-07 23:10:55

Judging History

你现在查看的是最新测评结果

  • [2024-09-07 23:10:55]
  • 评测
  • 测评结果:AC
  • 用时:5066ms
  • 内存:143156kb
  • [2024-09-07 23:10:54]
  • 提交

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,我给组数据试试?

詳細信息

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