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 |