제출 #1187125

#제출 시각아이디문제언어결과실행 시간메모리
1187125tamyteNecklace (Subtask 1-3) (BOI19_necklace1)C++20
0 / 85
1592 ms320 KiB
#include <bits/stdc++.h> using namespace std; void prepare(string s, vector<int>& p) { p = vector<int>(s.size()); for (int i = 1, j = 0; i < (int)s.size(); ++i) { while (j != 0 && s[i] != s[j]) { j = p[j]; } if (s[i] == s[j]) j++; p[i] = j; } } array<int, 3> solve(string& s, string& t, bool revers) { int n = s.size(); int m = t.size(); vector<int> p1, p2; array<int, 3> res = {0, 0, 0}; for (int i = 0; i < n; ++i) { string s1 = s.substr(0, i + 1); string s2 = s.substr(i + 1); reverse(begin(s1), end(s1)); string t1 = t, t2 = t; reverse(begin(t2), end(t2)); prepare(s1 + "#" + t1, p1); prepare(s2 + "#" + t2, p2); for (int j = 1; j <= m; ++j) { array<int, 3> now; now[0] = p1[i + j] + p2[n + m - i - j]; now[1] = i - p1[i + j]; now[2] = (revers ? m - j - p2[n + m - i - j] : j - p1[i + j]); res = max(res, now); } } return res; } int main() { string s,t ; cin >> s >> t; array<int, 3> res = solve(s, t, false); reverse(begin(t), end(t)); res = max(res, solve(s, t, true)); cout << res[0] << endl; cout << res[2] << " " << res[1] << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...