CSES - Aalto Competitive Programming 2024 - wk9 - Homework - Results
Submission details
Task:Z-array
Sender:hungdojan
Submission time:2024-11-02 13:43:35 +0200
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.09 sdetails
#7ACCEPTED0.09 sdetails
#8ACCEPTED0.10 sdetails
#9ACCEPTED0.08 sdetails
#10ACCEPTED0.09 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.09 sdetails
#13ACCEPTED0.09 sdetails

Code

#include <bits/stdc++.h>
using namespace std;
#define I_2D(row, col, width) ((row) * (width) + (col))
#define PRINT_ARR(arr, n) \
do { \
for (int i = 0; i < n; i++) { \
cout << arr[i] << " "; \
} \
cout << "\n"; \
} while (0)
#define PRINT_VEC_ARR(v, n) \
do { \
for (int i = 0; i < n; i++) { \
cout << i << ": "; \
for (auto item : v[i]) { \
cout << item << " "; \
} \
cout << endl; \
} \
} while (0)
typedef long long ll;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
string s;
cin >> s;
int n = s.length();
int arr[n];
memset(arr, 0, n * sizeof(int));
arr[0] = n;
int x = 0, y = 0;
for (int i = 0; i < n; i++) {
// copy the Z-array value from the prefix
// only copy the "known" part
arr[i] = max(0, min(arr[i-x], y - i + 1));
// increase y if s[arr[i]] == s[i + arr[i]]
while (i + arr[i] < n && s[arr[i]] == s[i + arr[i]]) {
x = i;
y = i+arr[i];
arr[i]++;
}
}
PRINT_ARR(arr, n);
return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
aaaaaaaaaa

correct output
10 9 8 7 6 5 4 3 2 1 

user output
10 9 8 7 6 5 4 3 2 1 

Test 2

Verdict: ACCEPTED

input
ababababab

correct output
10 0 8 0 6 0 4 0 2 0 

user output
10 0 8 0 6 0 4 0 2 0 

Test 3

Verdict: ACCEPTED

input
aabababaaa

correct output
10 1 0 1 0 1 0 2 2 1 

user output
10 1 0 1 0 1 0 2 2 1 

Test 4

Verdict: ACCEPTED

input
ahtqqkhrrn

correct output
10 0 0 0 0 0 0 0 0 0 

user output
10 0 0 0 0 0 0 0 0 0 

Test 5

Verdict: ACCEPTED

input
mqdozmqdoz

correct output
10 0 0 0 0 5 0 0 0 0 

user output
10 0 0 0 0 5 0 0 0 0 

Test 6

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1000000 999999 999998 999997 9...

user output
1000000 999999 999998 999997 9...
Truncated

Test 7

Verdict: ACCEPTED

input
ababababababababababababababab...

correct output
1000000 0 999998 0 999996 0 99...

user output
1000000 0 999998 0 999996 0 99...
Truncated

Test 8

Verdict: ACCEPTED

input
baaaabbabaabbbbaaaabbbababaaba...

correct output
1000000 0 0 0 0 1 2 0 3 0 0 1 ...

user output
1000000 0 0 0 0 1 2 0 3 0 0 1 ...
Truncated

Test 9

Verdict: ACCEPTED

input
ltpbdybvcpychbsplyonjfmdtsnqwt...

correct output
1000000 0 0 0 0 0 0 0 0 0 0 0 ...

user output
1000000 0 0 0 0 0 0 0 0 0 0 0 ...
Truncated

Test 10

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1000000 99998 99997 99996 9999...

user output
1000000 99998 99997 99996 9999...
Truncated

Test 11

Verdict: ACCEPTED

input
abaababaab

correct output
10 0 1 3 0 5 0 1 2 0 

user output
10 0 1 3 0 5 0 1 2 0 

Test 12

Verdict: ACCEPTED

input
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz...

correct output
1000000 499999 499998 499997 4...

user output
1000000 499999 499998 499997 4...
Truncated

Test 13

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1000000 147418 147417 147416 1...

user output
1000000 147418 147417 147416 1...
Truncated