# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
168376 | 2019-12-12T20:23:25 Z | Thuleanx | Periodicity (POI11_okr) | C++14 | 67 ms | 16936 KB |
#include <bits/stdc++.h> using namespace std; const int N = 2e5+7; vector<int> extract(char s[], int n) { vector<int> pi(n); pi[0] = 0; for (int i = 1; i < n; i++) { int j = pi[i-1]; while (j > 0 && s[i] != s[j]) j = pi[j-1]; if (s[i] == s[j]) j++; pi[i] = j; } vector<int> borders; int j = n; while (j>0) { borders.push_back(j); j = pi[j-1]; } reverse(begin(borders), end(borders)); return borders; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int t; scanf("%d", &t); stringstream ss; char s[N]; while (t--) { scanf("%s", s); int n = string(s).length(); vector<int> p = extract(s,n); // all borders are here // get seed char ans[n+1]; if (p[0] == 1) ans[0] = '0'; else for (int i = 0; i < p[0]; i++) ans[i] = '0'+(i==p[0]-1); for (int i = 1; i < p.size(); i++) { if (p[i] - 2*p[i-1] <= 0) { memcpy(ans+p[i-1], ans, (p[i]-p[i-1])*sizeof(char)); //ans = ans + ans.substr(0, p[i]-p[i-1]); } else { for (int j = p[i-1]; j < p[i]-p[i-1]; j++) ans[j] = '0'; memcpy(ans+p[i]-p[i-1], ans, sizeof(char)*p[i-1]); vector<int> border_now = extract(ans, p[i]); // O(n) but runs only O(\log{N}) time if (!equal(begin(p), begin(p)+i+1, begin(border_now))) ans[p[i]-p[i-1]-1] = '1'; } } ans[n] = 0; ss << ans << endl; } cout << ss.str(); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 380 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 376 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 376 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 376 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2 ms | 504 KB | Output isn't correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 67 ms | 16936 KB | Output isn't correct |