QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#559960#8223. 字符串游戏Fido_Puppy15 805ms323640kbC++233.8kb2024-09-12 10:57:012024-09-12 10:57:01

Judging History

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

  • [2024-09-12 10:57:01]
  • 评测
  • 测评结果:15
  • 用时:805ms
  • 内存:323640kb
  • [2024-09-12 10:57:01]
  • 提交

answer

#include <bits/stdc++.h>
#define all(x) x.begin(), x.end()
#define pb push_back
#define eb emplace_back
#define rz resize
#define MP make_pair
#define MT make_tuple
#define IT iterator
#define fi first
#define se second
#define For(i, a, b) for (int i = (int)(a); i <= (int)(b); ++i)
#define Rep(i, a, b) for (int i = (int)(a); i >= (int)(b); --i)
#define CLR(a, v) memset(a, v, sizeof(a))
#define CPY(a, b) memcpy(a, b, sizeof(a))
#define debug cerr << "ztxakking\n"
#define y0 ztxaknoi
#define y1 ztxakioi
using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
using uint = unsigned int;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pli = pair<ll, int>;
using pil = pair<int, ll>;
using vi = vector<int>;
template<typename T>
using V = vector<T>;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
const int N = 2e6 + 7;
int n, f[N];
string s;
struct FenwickTree {
  int t[N];
  void add(int x, int k) {
    for (; x < N; x += x & -x) t[x] += k;
  }
  int qry(int x) {
    int ans = 0;
    for (; x; x -= x & -x) ans += t[x];
    return ans;
  }
} T;
struct Graph {
  struct edge {
    int to, nxt;
  } e[N];
  int hd[N], tot;
  void add(int u, int v) {
    e[++tot] = (edge){v, hd[u]}, hd[u] = tot;
  }
};
struct SAM {
  Graph G;
  int dfn[N], hson[N], sz[N], dep[N], top[N], seg[N], rev[N], timer, tot;
  int nxt[N][26], lnk[N], len[N], pos[N], cnt, lst;
  int clone(int x) { ++cnt, lnk[cnt] = lnk[x], CPY(nxt[cnt], nxt[x]); return cnt; }
  void extend(int c) {
    int cur = ++cnt, p = lst; len[cur] = len[p] + 1;
    for (; p && !nxt[p][c]; p = lnk[p]) nxt[p][c] = cur;
    if (!p) lnk[cur] = 1;
    else {
      int q = nxt[p][c];
      if (len[q] == len[p] + 1) lnk[cur] = q;
      else {
        int r = clone(q); len[r] = len[p] + 1;
        for (; p && nxt[p][c] == q; p = lnk[p]) nxt[p][c] = r;
        lnk[cur] = lnk[q] = r;
      }
    }
    lst = cur;
  }
  void dfs1(int u) {
    sz[u] = 1, dfn[u] = ++timer, dep[u] = dep[lnk[u]] + 1;
    for (int i = G.hd[u]; i; i = G.e[i].nxt) {
      int v = G.e[i].to;
      dfs1(v), sz[u] += sz[v];
      if (sz[hson[u]] < sz[v]) hson[u] = v;
    }
  }
  void dfs2(int u) {
    seg[u] = ++tot, rev[tot] = u;
    if (hson[u]) {
      top[hson[u]] = top[u];
      dfs2(hson[u]);
    }
    for (int i = G.hd[u]; i; i = G.e[i].nxt) {
      int v = G.e[i].to;
      if (v == hson[u]) continue;
      top[v] = v, dfs2(v);
    }
  }
  int find(int l, int r) {
    int L = r - l + 1, u = pos[r], ans = u;
    while (u) {
      if (len[top[u]] >= L) ans = top[u], u = lnk[top[u]];
      else {
        int l = seg[top[u]], r = seg[u];
        while (l <= r) {
          int mid = l + r >> 1;
          if (len[rev[mid]] >= L) ans = rev[mid], r = mid - 1; else l = mid + 1;
        }
        break;
      }
    }
    return ans;
  }
  void ins(int r) {
    int u = pos[r];
    T.add(dfn[u], 1);
  }
  int occ(int l, int r) {
    int u = find(l, r);
    return T.qry(dfn[u] + sz[u] - 1) - T.qry(dfn[u] - 1);
  }
  void init(string s) {
    lst = cnt = 1;
    For(i, 1, n) extend(s[i] - 'a'), pos[i] = lst;
    For(i, 2, cnt) G.add(lnk[i], i);
    dfs1(1), top[1] = 1, dfs2(1);
  }
} S;
int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  cin >> s, n = s.size(), reverse(all(s)), s = '@' + s, S.init(s);
  vi stk = {0};
  For(i, 1, n) {
    S.ins(i);
    while (stk.size() > 1) {
      int x = stk.back(), y = stk[stk.size() - 2];
      if (S.occ(x + 1, i) - f[x] <= S.occ(y + 1, i) - f[y]) stk.pop_back();
      else break;
    }
    int u = stk.back();
    f[i] = S.occ(u + 1, i) - f[u];
    stk.pb(i);
  }
  cout << f[n] << '\n';
  cerr << (double)(clock()) / CLOCKS_PER_SEC << '\n';
  return 0;
}

詳細信息

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 10
Accepted
time: 0ms
memory: 21604kb

input:

abbabbbbabbaaaaabbbaabaaaaaabbbaabbabababaabababaababaaaaaabaaabaaabbbbababaaabbbabababbbabbbaabaaababbbaabaabbaaabbababaaaaabbbaabaaabbaabaabaaabaaabaababaabbbbbbbbabbbbbabbbaabababbaababbbbbabbbbaaabbaabaabaaabbabbaaabbaaababaabbbaabbbaaaabbababbabaababababaaaabbaaaabaabaaaababaaabababbbaaabababbb...

output:

1281

result:

ok single line: '1281'

Test #2:

score: 10
Accepted
time: 2ms
memory: 21916kb

input:

aaaabababbabbbbbabbbbbbbbbbbabbbbbabbbaaabbbbaababaabbbbbbbbbbbbbabaabbaaabaababaabaaabbabbbabbbabaabbaabaababbbbbbaaabbbbaaabaabbbabbbabbabaabbbbabbbaabaaaabbbbbabaaaabaabbabaaabbaabbabbaaabbabaaababbababababaabaaaabaabaabaaabaabbbabbbbbaababbabbbabbbbababaaabbabbaaaabbbaaabaabbbaaaaaababaababbbbba...

output:

1483

result:

ok single line: '1483'

Test #3:

score: 0
Wrong Answer
time: 5ms
memory: 22856kb

input:

bbaaababbbabbbaabbbbbbababbbabbbbbbbbaabbbbbbbbbbaaabbbbbbbbbbbbbbbabbabbbabaababbbabbbbabbabbabbbbabbbbbbbbbaaababbaaabbbaabbabbbbbbbbbbbbbbbbbbbbabbbbbbababababbbbbbbbbabababaabbbbbbabbbbaabbababbaaababbbbabbbbabbbabbbbbabbbbbabbbbbbbbbbabbaabbbabababbbbaababbbababbbbabbabbaabbbbbbabbbbbababbbbaba...

output:

2214

result:

wrong answer 1st lines differ - expected: '2310', found: '2214'

Subtask #2:

score: 10
Accepted

Test #11:

score: 10
Accepted
time: 716ms
memory: 322392kb

input:

aaaaaaabbaaabbbbabbabbbababaabaaabaabbaaababaaaaaabbbbbaabbbabbbaabbabaababaababaabbbababbbabaaaaaaaaabaaaaabbbabbbbbabaaabaaaababbabbbbbbaabbbbbaababbbbababbbbbbbbbbbaaabbabbaababbaaaabbabaaabbaaabbbbaaababbbbbabbaababbaaababaaabbabaabbbbabbaaabbababbaabbaaaaaaaaaabababbbaaaababbabbbabbababbabbabbb...

output:

234567

result:

ok single line: '234567'

Test #12:

score: 10
Accepted
time: 765ms
memory: 322204kb

input:

aababbbbaaabaabababbbaabbabbaabbaababaabaabaabbbaaaabbabbbbbaaaaabbbaabbbaaaaaaaabbbabaabbbaabaaabaabbabbabbbaaabbbbbaabaabaaaaabbbabbaaaababbaaababbbbaaabaabbababbbbbaaabbaabaaaaaaabbbbbaabbaaabaababababbbbabbbbaabbababbbbbaabbabaaaaabbabbbabbaaaababababbbabaabababaaabbbbaaabbabababaabaabaaabbabaab...

output:

198433

result:

ok single line: '198433'

Test #13:

score: 10
Accepted
time: 791ms
memory: 323640kb

input:

bababbbabaaabbbaabaabaababbbaabaabaaaaaabaaaaaaaabaaabbabbaaaaababbbbbbababaabbaabbabaabaaabaaaabbbbbaaabbababbabbbabbbaaaabbbbaaabbaabbbababbbabbbbabbbbabbbbabaaaabaaaabababbaaabbaaabbaabbbbbababababbbbbbbbabaaabaaaaaaabbbabbabbbaaabbbabbababaabababaabbabbbabaaabbaabbabbbababaababaaabaabababaababbb...

output:

248857

result:

ok single line: '248857'

Test #14:

score: 10
Accepted
time: 805ms
memory: 323584kb

input:

aabababababbaaaababbaabbabaaaaaababbaabaaabbaaaaabaaabbaababbbaaaabbbaabbabbaaaabaaabbbaaaababbbbaabaabbaabaaaaaabababaabbaaabbbaaabbabababaabaaaababaaaaabbbbabbaabbbababbbbaaaaabbbabaabbbaababaabbaaababbaabababbabaaabbbabbbbabaaabaaabbbaabbbaabbbabbbbabaaabbabababbbbabababbbbbbaaababaababaabaabbbbb...

output:

257032

result:

ok single line: '257032'

Test #15:

score: 10
Accepted
time: 726ms
memory: 322328kb

input:

bbbababbaaabbaababaaababaaaababababbbbbabaaaaaabbbbbabbabbaaabaaabababbbabbbaaaaaaaaabbaaaababbbaabaaabbaaabbabbabaabbabbbaabbabaabbbbaaabbbaaabbabbbabbabbbbaabaababaaabbbbabbbbbaaaaaaabbabbbbbabbabbbbaaabbaabbbaabbbbaabbbbbbbababaabaaaabbababaaaaabbabaaabaabbaabbbaaabbbbbbaabababbbbbababbbaabbbabaa...

output:

222902

result:

ok single line: '222902'

Subtask #3:

score: 5
Accepted

Test #16:

score: 5
Accepted
time: 164ms
memory: 261476kb

input:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

493827

result:

ok single line: '493827'

Subtask #4:

score: 0
Wrong Answer

Test #17:

score: 25
Accepted
time: 49ms
memory: 67252kb

input:

bbbbbbbbbaabbbbbabaaabaabaaabaaaaabaaaabbbbbbbaaaabaabbbababbaaaabbabababbbabbbbabbabaabaaabbabbaaababaaabaaaabababbbbbbbaabbaaabbabbbbbabbbaaaaababbbaaabaabababbabbabababbabbabaaaaabaaaaaabbbabaabbbaaaabbabababaaababaabbbbbbbaaabbbabaabaaaabaabaababbaaaabababaabbbaaaababaaababbbbbbabbbbbbaabbabbaaa...

output:

43524

result:

ok single line: '43524'

Test #18:

score: 0
Wrong Answer
time: 62ms
memory: 76708kb

input:

baaaabbbabbbbabbbbabbbabbbbbabbbabbaabbbbbbabbabaabbbbbbbbbbbbaabbbbbaaabaaabbbbbaabbbbbbbbbbbbbababbbbabbbbbbbbbbbbbbbbabbbbbbbbabbbbabbbbaabaabbbabbbabbbaabbbbbabbbbbbaaabbbbbbaaabbaaabbabbabbbbbaabbbbbabbabababbbbbbbbbbbbabbbbaabbbbabbbbbbbbbbbbbbbabbbbbabbabbabababbbabbbbaabbabbbbbbbbaabbaabbbbb...

output:

127539

result:

wrong answer 1st lines differ - expected: '107148', found: '127539'

Subtask #5:

score: 0
Skipped

Dependency #1:

0%

Subtask #6:

score: 0
Skipped

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #5:

0%