Submission #168375

#TimeUsernameProblemLanguageResultExecution timeMemory
168375ThuleanxPeriodicity (POI11_okr)C++14
66 / 100
1082 ms4492 KiB
#include <bits/stdc++.h> using namespace std; const int N = 2e5+7; vector<int> extract(string &s) { int n = s.length(); 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 buffer[N]; while (t--) { scanf("%s", buffer); string s(buffer); vector<int> p = extract(s); // all borders are here // get seed string ans; if (p[0] == 1) ans.push_back('0'); else for (int i = 0; i < p[0]; i++) ans.push_back('0'+(i==p[0]-1)); for (int i = 1; i < p.size(); i++) { if (p[i] - 2*p[i-1] <= 0) { ans = ans.substr(0, p[i]-p[i-1]) + ans; } else { for (int j = 0; j < p[i]-2*p[i-1]; j++) ans.push_back('0'); ans = ans + ans.substr(0,p[i-1]); vector<int> border_now = extract(ans); // 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'; } } ss << ans << endl; } cout << ss.str(); return 0; }

Compilation message (stderr)

okr.cpp: In function 'int main()':
okr.cpp:48:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 1; i < p.size(); i++) {
                   ~~^~~~~~~~~~
okr.cpp:33:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &t);
  ~~~~~^~~~~~~~~~
okr.cpp:37:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%s", buffer);
   ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...