# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
223341 | cheeheng | Lampice (COCI19_lampice) | C++14 | 5083 ms | 4472 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
char S[50005];
vector<int> AdjList[50005];
const long long MOD = (1LL<<55)-3;
const int MOD2 = 80000001;
long long pow26[50005];
long long dist[50005];
long long dist2[50005];
int dist3[50005];
int main(){
int N;
scanf("%d", &N);
assert(MOD%13 != 0);
assert(MOD2%13 != 0);
pow26[0] = 1;
for(int i = 1; i <= N; i ++){
pow26[i] = (pow26[i-1]*26)%MOD;
}
for(int i = 1; i <= N; i ++){
scanf(" %c", &S[i]);
}
bool subtask2 = true;
for(int i = 1; i < N; i ++){
int a, b;
scanf("%d%d", &a, &b);
AdjList[a].push_back(b);
AdjList[b].push_back(a);
if(a == i && b == i+1 || b == i && a == i+1){
}else{
subtask2 = false;
}
}
if(subtask2){
int ans = 0;
for(int i = 1; i <= N; i ++){
int forward1 = 0;
int backward1 = 0;
for(int j = i; j <= N; j ++){
forward1 = (forward1*26+(S[j]-'0'))%MOD2;
backward1 = (backward1+pow26[j-i]*(S[j]-'0'))%MOD2;
if(forward1 == backward1){
ans = max(ans, j-i+1);
}
}
}
printf("%d", ans);
return 0;
}
if(N <= 50000){
int ans = 0;
for(int i = 1; i <= N; i ++){
memset(dist, -1, sizeof(dist));
queue<int> q;
q.push(i);
dist[i] = S[i]-'a';
dist2[i] = S[i]-'a';
dist3[i] = 0;
while(!q.empty()){
int u = q.front(); q.pop();
for(int v: AdjList[u]){
if(dist[v] == -1){
dist[v] = (26*dist[u] + (S[v]-'a'))%MOD;
dist3[v] = dist3[u]+1;
dist2[v] = (pow26[dist3[u]+1]*(S[v]-'a') + dist2[u])%MOD;
q.push(v);
}
}
}
for(int j = i; j <= N; j ++){
//printf("%d %d %lld %lld\n", i, j, dist[j], dist2[j]);
assert(dist[j] != -1);
if(dist[j] == dist2[j]){
ans = max(ans, 1+dist3[j]);
}
}
}
printf("%d", ans);
return 0;
}
return 0;
}
컴파일 시 표준 에러 (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... |