Submission #74668256
Source Code Expand
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int MAXN = 500005;
const int MAXS = 2 * MAXN;
int n, a[MAXN];
int pir[MAXN];
bool f[MAXN];
int st[MAXN];
int nxt[MAXS][10];
int lik[MAXS];
int len[MAXS];
int tot = 1;
int insert(int lst, int c)
{
if (nxt[lst][c] && len[nxt[lst][c]] == len[lst] + 1)
return nxt[lst][c];
int cur = ++tot;
len[cur] = len[lst] + 1;
int p = lst;
while (p && !nxt[p][c])
{
nxt[p][c] = cur;
p = lik[p];
}
if (!p)
lik[cur] = 1;
else
{
int q = nxt[p][c];
if (len[p] + 1 == len[q])
lik[cur] = q;
else
{
++tot;
len[tot] = len[p] + 1;
memcpy(nxt[tot], nxt[q], sizeof(nxt[q]));
lik[tot] = lik[q];
while (p && nxt[p][c] == q)
{
nxt[p][c] = tot;
p = lik[p];
}
lik[q] = lik[cur] = tot;
}
}
return cur;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++)
{
int j = a[i];
if (i + j - 1 > n)
{
f[i] = false;
continue;
}
bool flag = true;
for (int k = 0; k < j; k++)
{
if (a[i + k] != j)
{
flag = false;
break;
}
}
f[i] = flag;
}
for (int i = 1; i <= n; i++)
{
if (!f[i])
continue;
int nxti = i + a[i];
if (nxti <= n && f[nxti] && a[i] != a[nxti])
pir[i] = nxti;
else
pir[i] = 0;
}
lik[1] = 0;
len[1] = 0;
for (int i = n; i >= 1; i--)
{
if (!f[i])
continue;
int lst = (pir[i] == 0) ? 1 : st[pir[i]];
st[i] = insert(lst, a[i] - 1);
}
long long ans = 0;
for (int i = 2; i <= tot; i++)
ans += len[i] - len[lik[i]];
cout << ans << endl;
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | G - 221 Substring |
| User | xzy404 |
| Language | C++23 (GCC 15.2.0) |
| Score | 600 |
| Code Size | 2204 Byte |
| Status | AC |
| Exec Time | 44 ms |
| Memory | 33484 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 600 / 600 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 00-sample-01.txt, 00-sample-02.txt |
| All | 00-sample-01.txt, 00-sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 01-32.txt, 01-33.txt, 01-34.txt, 01-35.txt, 01-36.txt, 01-37.txt, 01-38.txt, 01-39.txt, 01-40.txt, 01-41.txt, 01-42.txt, 01-43.txt, 01-44.txt, 01-45.txt, 01-46.txt, 01-47.txt, 01-48.txt, 01-49.txt, 01-50.txt, 01-51.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 00-sample-01.txt | AC | 1 ms | 3684 KiB |
| 00-sample-02.txt | AC | 1 ms | 3680 KiB |
| 01-01.txt | AC | 1 ms | 3724 KiB |
| 01-02.txt | AC | 1 ms | 3692 KiB |
| 01-03.txt | AC | 1 ms | 3728 KiB |
| 01-04.txt | AC | 1 ms | 3704 KiB |
| 01-05.txt | AC | 1 ms | 3644 KiB |
| 01-06.txt | AC | 1 ms | 3692 KiB |
| 01-07.txt | AC | 1 ms | 3736 KiB |
| 01-08.txt | AC | 1 ms | 3728 KiB |
| 01-09.txt | AC | 1 ms | 3704 KiB |
| 01-10.txt | AC | 1 ms | 3752 KiB |
| 01-11.txt | AC | 1 ms | 3644 KiB |
| 01-12.txt | AC | 1 ms | 3636 KiB |
| 01-13.txt | AC | 1 ms | 3692 KiB |
| 01-14.txt | AC | 1 ms | 3716 KiB |
| 01-15.txt | AC | 1 ms | 3752 KiB |
| 01-16.txt | AC | 1 ms | 3644 KiB |
| 01-17.txt | AC | 1 ms | 3644 KiB |
| 01-18.txt | AC | 1 ms | 3752 KiB |
| 01-19.txt | AC | 1 ms | 3644 KiB |
| 01-20.txt | AC | 17 ms | 10000 KiB |
| 01-21.txt | AC | 21 ms | 9908 KiB |
| 01-22.txt | AC | 18 ms | 9920 KiB |
| 01-23.txt | AC | 25 ms | 25580 KiB |
| 01-24.txt | AC | 42 ms | 33400 KiB |
| 01-25.txt | AC | 29 ms | 22732 KiB |
| 01-26.txt | AC | 24 ms | 16844 KiB |
| 01-27.txt | AC | 21 ms | 19004 KiB |
| 01-28.txt | AC | 21 ms | 17296 KiB |
| 01-29.txt | AC | 23 ms | 20728 KiB |
| 01-30.txt | AC | 17 ms | 10104 KiB |
| 01-31.txt | AC | 44 ms | 33340 KiB |
| 01-32.txt | AC | 44 ms | 33484 KiB |
| 01-33.txt | AC | 41 ms | 33348 KiB |
| 01-34.txt | AC | 33 ms | 25464 KiB |
| 01-35.txt | AC | 28 ms | 23268 KiB |
| 01-36.txt | AC | 28 ms | 22312 KiB |
| 01-37.txt | AC | 30 ms | 24592 KiB |
| 01-38.txt | AC | 30 ms | 21588 KiB |
| 01-39.txt | AC | 25 ms | 16708 KiB |
| 01-40.txt | AC | 25 ms | 16708 KiB |
| 01-41.txt | AC | 25 ms | 16832 KiB |
| 01-42.txt | AC | 24 ms | 15804 KiB |
| 01-43.txt | AC | 1 ms | 3692 KiB |
| 01-44.txt | AC | 1 ms | 3636 KiB |
| 01-45.txt | AC | 1 ms | 3704 KiB |
| 01-46.txt | AC | 2 ms | 3724 KiB |
| 01-47.txt | AC | 1 ms | 3648 KiB |
| 01-48.txt | AC | 1 ms | 3704 KiB |
| 01-49.txt | AC | 20 ms | 10812 KiB |
| 01-50.txt | AC | 21 ms | 11100 KiB |
| 01-51.txt | AC | 20 ms | 10316 KiB |