# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
223320 | cheeheng | Lampice (COCI19_lampice) | C++14 | 5063 ms | 5120 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
char S[50005];
vector<int> AdjList[50005];
const long long MOD = (1LL<<55)-3;
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);
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(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;
}
/*if(subtask2){
int ans = 0;
for(int i = 1; i <= N; i ++){
long long forward1 = 0;
long long backward1 = 0;
for(int j = i; j <= N; j ++){
forward1 = (forward1*26+(S[j]-'0'))%MOD;
backward1 += pow26[j-i]*(S[j]-'0');
backward1 %= MOD;
if(forward1 == backward1){
ans = max(ans, j-i+1);
}
}
}
printf("%d", ans);
return 0;
}*/
return 0;
}
Compilation message (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... |