Submission #1318531

#TimeUsernameProblemLanguageResultExecution timeMemory
1318531a.pendovNecklace (Subtask 1-3) (BOI19_necklace1)C++20
0 / 85
1 ms332 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=4099; long long pi1[MAXN],pi2[MAXN]; long long ans=0,ansP1,ansP2,M,N; string a,b,currStr; signed main () { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>a>>b; N=a.size(); M=b.size(); for(int i=0;i<=M;i++) { currStr=""; for(int j=i;j<M;j++)currStr.push_back(b[j]); currStr+="#"+a+"&"; for(int j=0;j<i;j++)currStr.push_back(b[j]); memset(pi1,0,sizeof(pi1)); memset(pi2,0,sizeof(pi2)); int curr=0; for(int j=1;j<N+M+2;j++) { while(curr>0&&currStr[j]!=currStr[curr])curr=pi1[curr-1]; if(currStr[j]==currStr[curr])curr++; pi1[j]=curr; } reverse(currStr.begin(),currStr.end()); for(int j=1;j<N+M+2;j++) { while(curr>0&&currStr[j]!=currStr[curr])curr=pi2[curr-1]; if(currStr[j]==currStr[curr])curr++; pi2[j]=curr; } for(int j=i;j<=i+N;j++) { if(pi1[j]+pi2[M+N-j]>ans) { ans=pi1[j]+pi2[M+N-j]; ansP1=j-(N-i)-pi1[j]; ansP2=M-(N-i)-pi2[M+N-j]; } } } reverse(b.begin(),b.end()); for(int i=0;i<=M;i++) { currStr=""; for(int j=i;j<M;j++)currStr.push_back(b[j]); currStr+="#"+a+"&"; for(int j=0;j<i;j++)currStr.push_back(b[j]); memset(pi1,0,sizeof(pi1)); memset(pi2,0,sizeof(pi2)); int curr=0; for(int j=1;j<N+M+2;j++) { while(curr>0&&currStr[j]!=currStr[curr])curr=pi1[curr-1]; if(currStr[j]==currStr[curr])curr++; pi1[j]=curr; } reverse(currStr.begin(),currStr.end()); for(int j=1;j<N+M+2;j++) { while(curr>0&&currStr[j]!=currStr[curr])curr=pi2[curr-1]; if(currStr[j]==currStr[curr])curr++; pi2[j]=curr; } for(int j=i;j<=i+N;j++) { if(pi1[j]+pi2[M+N-j]>ans) { ans=pi1[j]+pi2[M+N-j]; ansP1=j-(N-i)-pi1[j]; ansP2=M-(M-(N-i)-pi2[M+N-j])-ans; } } } cout<<ans<<endl<<ansP1<<" "<<ansP2<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...