CSES - Aalto Competitive Programming 2024 - wk9 - Homework - Results
Submission details
Task:Z-array
Sender:HFalke
Submission time:2024-10-31 14:16:52 +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.09 sdetails
#9ACCEPTED0.08 sdetails
#10ACCEPTED0.09 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.09 sdetails
#13ACCEPTED0.09 sdetails

Code

#include <bits/stdc++.h>

using namespace std;

//Definitions for quicker writing
#define REP(i,a,b) for (int i = a; i < b; i++)
#define clz __builtin_clz
#define ctz __builtin_ctz
#define popct __builtin_popcount
#define PB push_back
#define MP make_pair
#define F first
#define S second

//Typedefs for quicker writing
typedef long long ll;
typedef vector<int> vi;
typedef vector<long long> vl;
typedef pair<int,int> pi;
typedef pair<long long, long long> pl;

//Max values
const long long lmx = LLONG_MAX;
const int imx = INT_MAX;

int main() {
	//IO optimization
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	//Input definition
	string s;

	//Read In
	cin >> s;

	//Main part
    int n = s.size();
    vector<int> z(n);
    int x = 0, y = 0;
    for (int i = 1; i < n; i++) {
        z[i] = max(0,min(z[i-x],y-i+1));
        while (i+z[i] < n && s[z[i]] == s[i+z[i]]) {
            x = i; y = i+z[i]; z[i]++;
        }
    }
    
	z[0] = n;

	//Write out
    REP (i,0,n) cout << z[i] << " ";
    cout << "\n";
		
	//Return
	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...

Test 7

Verdict: ACCEPTED

input
ababababababababababababababab...

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

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

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 ...

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 ...

Test 10

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1000000 99998 99997 99996 9999...

user output
1000000 99998 99997 99996 9999...

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...

Test 13

Verdict: ACCEPTED

input
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

correct output
1000000 147418 147417 147416 1...

user output
1000000 147418 147417 147416 1...