제출 #1318635

#제출 시각아이디문제언어결과실행 시간메모리
1318635a.pendovNecklace (Subtask 1-3) (BOI19_necklace1)C++20
0 / 85
1 ms332 KiB
#include<bits/stdc++.h> using namespace std; const short MAXN=6099; short pi1[MAXN],pi2[MAXN]; short ans=0,ansP1,ansP2,M,N; string a,b,currStr; signed main () { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); short curr=0; cin>>a>>b; N=a.size(); M=b.size(); for(short i=0;i<=M;i++) { currStr=""; for(short j=i;j<M;j++)currStr.push_back(b[j]); currStr+="#"+a+"&"; for(short j=0;j<i;j++)currStr.push_back(b[j]); memset(pi1,0,sizeof(pi1)); memset(pi2,0,sizeof(pi2)); curr=0; for(short 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()); curr=0; for(short 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(short j=M-i;j<=M+N-i+1;j++) { if(pi1[j]+pi2[M+N-j]>ans) { ans=pi1[j]+pi2[M+N-j]; ansP1=j-(M-i)-pi1[j]; ansP2=M-(M-i)-pi2[M+N-j]; } } } reverse(b.begin(),b.end()); for(short i=0;i<=M;i++) { currStr=""; for(short j=i;j<M;j++)currStr.push_back(b[j]); currStr+="#"+a+"&"; for(short j=0;j<i;j++)currStr.push_back(b[j]); memset(pi1,0,sizeof(pi1)); memset(pi2,0,sizeof(pi2)); curr=0; for(short 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()); curr=0; for(short 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(short j=M-i;j<=N+M-i+1;j++) { if(pi1[j]+pi2[M+N-j]>ans) { ans=pi1[j]+pi2[M+N-j]; ansP1=j-(M-i)-pi1[j]; ansP2=M-(M-(M-i)-pi2[M+N-j])-ans; } } } cout<<ans<<endl<<ansP1<<" "<<ansP2<<endl; reverse(b.begin(),b.end()); for(short i=ansP1;i<ans+ansP1;i++)cout<<a[i]; cout<<endl; for(short i=ansP2;i<ans+ansP2;i++)cout<<b[i]; cout<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...