# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
223443 | dantoh000 | Lampice (COCI19_lampice) | C++14 | 5075 ms | 86160 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> adjlist[50005];
int ans = 0;
string s;
void maxlpalindrome(vector<char> s){
for (auto x : s) printf("%c",x);
printf(" processing\n");
int n = s.size();
///For odd-length palindrome
vector<int> d1(n,0);
for (int i = 0, l = 0, r = -1; i < n; i++) {
int k = (i > r) ? 1 : min(d1[l + r - i], r - i + 1);
while (0 <= i - k && i + k < n && s[i - k] == s[i + k]) {
k++;
}
d1[i] = k--;
if (i + k > r) {
l = i - k;
r = i + k;
}
}
///For even-length palindromes
vector<int> d2(n,0);
for (int i = 0, l = 0, r = -1; i < n; i++) {
int k = (i > r) ? 0 : min(d2[l + r - i + 1], r - i + 1);
while (0 <= i - k - 1 && i + k < n && s[i - k - 1] == s[i + k]) {
k++;
}
d2[i] = k--;
if (i + k > r) {
l = i - k - 1;
r = i + k ;
}
}
for (int i = 0; i < n; i++){
ans = max(ans,max(2*d1[i]-1,2*d2[i]));
}
}
vector<char> st;
void dfs(int u, int p){
st.push_back(s[u-1]);
for (auto v : adjlist[u]){
if (v == p) continue;
dfs(v,u);
}
maxlpalindrome(st);
st.pop_back();
}
int main(){
scanf("%d",&n);
cin >> s;
for (int i = 0; i < n-1; i++){
int a,b;
scanf("%d%d",&a,&b);
adjlist[a].push_back(b);
adjlist[b].push_back(a);
}
for (int i = 1; i <= n; i++){
st.clear();
dfs(i,-1);
}
printf("%d",ans);
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |