| Task: | Period |
| Sender: | sfjiang |
| Submission time: | 2020-09-26 15:03:27 +0300 |
| Language: | C++ (C++11) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.01 s | details |
| #2 | ACCEPTED | 0.01 s | details |
| #3 | ACCEPTED | 0.01 s | details |
| #4 | ACCEPTED | 0.01 s | details |
| #5 | ACCEPTED | 0.01 s | details |
| #6 | ACCEPTED | 0.01 s | details |
| #7 | ACCEPTED | 0.01 s | details |
| #8 | ACCEPTED | 0.03 s | details |
| #9 | ACCEPTED | 0.05 s | details |
| #10 | ACCEPTED | 0.03 s | details |
| #11 | ACCEPTED | 0.03 s | details |
| #12 | ACCEPTED | 0.04 s | details |
| #13 | ACCEPTED | 0.04 s | details |
| #14 | ACCEPTED | 0.04 s | details |
| #15 | ACCEPTED | 0.04 s | details |
| #16 | ACCEPTED | 0.04 s | details |
| #17 | ACCEPTED | 0.04 s | details |
| #18 | ACCEPTED | 0.04 s | details |
| #19 | ACCEPTED | 0.02 s | details |
| #20 | ACCEPTED | 0.02 s | details |
| #21 | ACCEPTED | 0.02 s | details |
Compiler report
input/code.cpp: In function 'int main()':
input/code.cpp:70:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%s", input);
~~~~~^~~~~~~~~~~~~Code
#include <cstdio>
#include <cstring>
#include <algorithm>
const int maxn = 100010;
int A[maxn], B[maxn], C[maxn], D[maxn], *sa = D + 1, *rank, *height;
void sortAndRank(int *a1, int *a2, int n, int &m, int j) {
int i; memset(C, 0, sizeof(C));
for(i = 0; i < n; i ++) C[a1[i]] ++;
for(i = 1; i <=m; i ++) C[i] += C[i-1];
for(i = n-1; i >= 0; i --) sa[--C[a1[a2[i]]]] = a2[i];
a2[sa[0]] = m = 0;
for(i = 1; i < n; i ++)
a2[sa[i]] = a1[sa[i-1]]==a1[sa[i]] && a1[sa[i-1]+j]==a1[sa[i]+j] ? m : ++ m;
}
void da(char*str, int n, int m) {
int *a1 = A, *a2 = B, *tmp; int i, j, p;
for(i = 0; i < n; i ++) { a1[i] = i; a2[i] = str[i]; }
a1[n] = a2[n] = -1;
sortAndRank(a2, a1, n, m, 0);
for(j = 1; m < n-1; j <<= 1) {
p = 0;
for(i = n-j; i < n; i ++) a2[p ++] = i;
for(i= 0; i < n; i ++) if(sa[i]>=j) a2[p ++] = sa[i]-j;
sortAndRank(a1, a2, n, m, j);
tmp = a1; a1 = a2; a2 = tmp;
} rank = a1; height = a2;
}
void calHeight(char *str, int n) {
int i, j, k;
sa[-1] = n;
for(height[0] = k = i = 0; i < n; i ++) {
for(k ? k-- : 0, j = sa[rank[i]-1]; str[i+k]==str[j+k]; k++);
height[rank[i]] = k;
}
}
int mm[maxn],*rmq;//让rmq=height
int best[20][maxn];
void Init(int n) {
int i,j,a,b;
rmq[0] = -999999999;//让rmq[0]取最反向值
mm[0]=-1;
for(i=1; i<=n; i++) {
mm[i]=((i&(i-1))==0)?mm[i-1]+1:mm[i-1];
best[0][i]=i;
}
for(i=1; i<=mm[n]; i++) {
for(j=1; j<=n+1-(1<<i); j++) {
a=best[i-1][j]; b=best[i-1][j+(1<<(i-1))];
best[i][j]=rmq[a] < rmq[b]?a:b;
} }}
int query(int a, int b) {
if(a > b) return 0;
int t;
t=mm[b-a+1]; a=best[t][a]; b=best[t][b-(1<<t)+1];
return rmq[a] < rmq[b] ? a : b;
}
int getLCP(int p,int q) {
if (p>q) return getLCP(q,p);
return rmq[query(p + 1, q)];
}
char input[maxn];
int main()
{
scanf("%s", input);
int n = strlen(input);
da(input, n, 300);
calHeight(input, n);
rmq = height;
Init(n);
for (int p = 1; p <= n; p++)
{
int found = 1;
for (int j = p; j < n; j += p)
{
//printf("%d, %d, %d\n", rank[0], rank[j], getLCP(rank[0], rank[j]));
if (getLCP(rank[0], rank[j]) < std::min(p, n - j))
{
found = 0;
break;
}
}
if (found)
{
input[p] = 0;
printf("%s\n", input);
break;
}
}
return 0;
}Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| acbacbac |
| correct output |
|---|
| acb |
| user output |
|---|
| acb |
Test 2
Verdict: ACCEPTED
| input |
|---|
| a |
| correct output |
|---|
| a |
| user output |
|---|
| a |
Test 3
Verdict: ACCEPTED
| input |
|---|
| z |
| correct output |
|---|
| z |
| user output |
|---|
| z |
Test 4
Verdict: ACCEPTED
| input |
|---|
| aa |
| correct output |
|---|
| a |
| user output |
|---|
| a |
Test 5
Verdict: ACCEPTED
| input |
|---|
| az |
| correct output |
|---|
| az |
| user output |
|---|
| az |
Test 6
Verdict: ACCEPTED
| input |
|---|
| aba |
| correct output |
|---|
| ab |
| user output |
|---|
| ab |
Test 7
Verdict: ACCEPTED
| input |
|---|
| abab |
| correct output |
|---|
| ab |
| user output |
|---|
| ab |
Test 8
Verdict: ACCEPTED
| input |
|---|
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
| correct output |
|---|
| a |
| user output |
|---|
| a |
Test 9
Verdict: ACCEPTED
| input |
|---|
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
| correct output |
|---|
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... |
| user output |
|---|
| aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa... Truncated |
Test 10
Verdict: ACCEPTED
| input |
|---|
| ababababababababababababababab... |
| correct output |
|---|
| ab |
| user output |
|---|
| ab |
Test 11
Verdict: ACCEPTED
| input |
|---|
| tgainzxtgainzxtgainzxtgainzxtg... |
| correct output |
|---|
| tgainzx |
| user output |
|---|
| tgainzx |
Test 12
Verdict: ACCEPTED
| input |
|---|
| qmuflfcbqweunsjsodgspftyvikiwk... |
| correct output |
|---|
| qmuflfcbqweunsjsodgspftyvikiwk... |
| user output |
|---|
| qmuflfcbqweunsjsodgspftyvikiwk... |
Test 13
Verdict: ACCEPTED
| input |
|---|
| ohbsbconrkytyhtmibzrwwqdsqojoe... |
| correct output |
|---|
| ohbsbconrkytyhtmibzrwwqdsqojoe... |
| user output |
|---|
| ohbsbconrkytyhtmibzrwwqdsqojoe... Truncated |
Test 14
Verdict: ACCEPTED
| input |
|---|
| hxkuxccasglgpvnfnhdoqelpvxughq... |
| correct output |
|---|
| hxkuxccasglgpvnfnhdoqelpvxughq... |
| user output |
|---|
| hxkuxccasglgpvnfnhdoqelpvxughq... Truncated |
Test 15
Verdict: ACCEPTED
| input |
|---|
| mhwvddomkxrzuziwbfoaqxzjmfevla... |
| correct output |
|---|
| mhwvddomkxrzuziwbfoaqxzjmfevla... |
| user output |
|---|
| mhwvddomkxrzuziwbfoaqxzjmfevla... Truncated |
Test 16
Verdict: ACCEPTED
| input |
|---|
| gnruvsfdjemxstfuysiqkrtwbgtono... |
| correct output |
|---|
| gnruvsfdjemxstfuysiqkrtwbgtono... |
| user output |
|---|
| gnruvsfdjemxstfuysiqkrtwbgtono... Truncated |
Test 17
Verdict: ACCEPTED
| input |
|---|
| xqiwjzftugyurtwsziffnqaeozescu... |
| correct output |
|---|
| xqiwjzftugyurtwsziffnqaeozescu... |
| user output |
|---|
| xqiwjzftugyurtwsziffnqaeozescu... Truncated |
Test 18
Verdict: ACCEPTED
| input |
|---|
| vgygtamnegxyxvjbuceoliipbkggyw... |
| correct output |
|---|
| vgygtamnegxyxvjbuceoliipbkggyw... |
| user output |
|---|
| vgygtamnegxyxvjbuceoliipbkggyw... Truncated |
Test 19
Verdict: ACCEPTED
| input |
|---|
| qvjhmaafzlugwwaygdojysrjoydnnj... |
| correct output |
|---|
| qvjhmaafzlugwwaygdojysrjoydnnj... |
| user output |
|---|
| qvjhmaafzlugwwaygdojysrjoydnnj... Truncated |
Test 20
Verdict: ACCEPTED
| input |
|---|
| tusmizkjfdazyohorfcumwmalodvnc... |
| correct output |
|---|
| tusmizkjfdazyohorfcumwmalodvnc... |
| user output |
|---|
| tusmizkjfdazyohorfcumwmalodvnc... Truncated |
Test 21
Verdict: ACCEPTED
| input |
|---|
| zqikxaoeizncpvlpcvomrdkstackqq... |
| correct output |
|---|
| zqikxaoeizncpvlpcvomrdkstackqq... |
| user output |
|---|
| zqikxaoeizncpvlpcvomrdkstackqq... Truncated |
