# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
976298 | roctes7 | Necklace (Subtask 1-3) (BOI19_necklace1) | C++17 | 8 ms | 4956 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define fi first
#define se second
#define fastio \
ios_base::sync_with_stdio(false); \
cin.tie(NULL);
const double eps = 1e-6;
const int MAX = 3e3+3;
int pi[3003][3003];
int n;
string s;
void kmp(int sta){
for (int i = 1; i < n; i++) {
int j = pi[sta][i-1];
while (j > 0 && s[i] != s[j])
j = pi[sta][j-1];
if (s[i] == s[j])
j++;
pi[sta][i] = j;
}
}
string t1,t2;
pair<int,pair<int,int>> solve(){
for(int i=0;i<t1.size();i++){
s = "";
for(int j=i;j<t1.size();j++)s+=t1[j];
for(int j=0;j<i;j++)s+=t1[j];
s+="#";
s+=t2;
n = s.size();
kmp(i);
//cout<<s<<endl;
}
int l = 1;
int r = t1.size();
int ans = -1;
int ansl = -1;
int ansr = -1;
while(l<=r){
int k = (l+r)/2;
bool check = false;
for(int i=0;i<t1.size();i++){
if(check)break;
for(int j=t1.size()+1;j<n;j++){
int cur = pi[i][j];
if(cur>=k){
check = true;
if(cur>ans){
ans = cur;
ansl = i;
ansr = j-(t1.size()+1)-ans+1;
}
break;
}
int stil = k - cur;
if(cur==0||i+cur>=t1.size()||j-cur<t1.size()+1)continue;
int cur2 = pi[i+cur][j-cur];
if(cur2>=stil){
check = true;
if(cur+cur2>ans){
ans = cur+cur2;
ansl = i;
ansr = j-(t1.size()+1)-ans+1;
}
break;
}
}
}
if(check){
l = k+1;
}else r = k-1;
}
return {ans,{ansl,ansr}};
}
int main(){
fastio;
cin>>t1>>t2;
auto ans1 = solve();
reverse(t2.begin(),t2.end());
auto ans2 = solve();
ans2.se.se = ans2.se.se + ans2.fi-1;
ans2.se.se = t2.size()-ans2.se.se-1;
if(ans2.se.se<0)ans2.se.se = t2.size()-1+ans2.se.se;
pair<int,pair<int,int>> ans = max(ans1,ans2);
cout<<ans.fi<<endl<<ans.se.fi<<" "<<ans.se.se;
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... |