Submission #223260

#TimeUsernameProblemLanguageResultExecution timeMemory
223260cheehengLampice (COCI19_lampice)C++14
0 / 110
5099 ms72192 KiB
#include <bits/stdc++.h> using namespace std; char S[50005]; vector<int> AdjList[50005]; const long long MOD = 2147483647LL; long long pow26[50005]; long long dist[3005][3005]; int main(){ int N; scanf("%d", &N); 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 <= 3000){ int ans = 0; memset(dist, -1, sizeof(dist)); for(int i = 1; i <= N; i ++){ queue<int> q; q.push(i); dist[i][i] = S[i]-'0'; while(!q.empty()){ int u = q.front(); q.pop(); for(int v: AdjList[u]){ if(dist[i][v] == -1){ dist[i][v] = (26*dist[i][u] + (S[v]-'0'))%MOD; q.push(v); } } } } for(int i = 1; i <= N; i ++){ for(int j = i; j <= N; j ++){ //printf("%d %d %lld %lld\n", i, j, dist[i][j], dist[j][i]); if(dist[i][j] == dist[j][i]){ ans = max(ans, j-i+1); } } } 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)

lampice.cpp: In function 'int main()':
lampice.cpp:33:19: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
         if(a == i && b == i+1 || b == i && a == i+1){
            ~~~~~~~^~~~~~~~~~~
lampice.cpp:16:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &N);
     ~~~~~^~~~~~~~~~
lampice.cpp:24:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf(" %c", &S[i]);
         ~~~~~^~~~~~~~~~~~~~
lampice.cpp:30:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &a, &b);
         ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...