제출 #1186540

#제출 시각아이디문제언어결과실행 시간메모리
1186540kl0989eNecklace (Subtask 1-3) (BOI19_necklace1)C++20
45 / 85
1596 ms70728 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define fi first
#define se second
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define pi pair<int, int>
#define pl pair<ll,ll>
#define all(x) (x).begin(),(x).end()

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
	string a,b;
	cin >> a >> b;
	int n=a.size(),m=b.size();
	int ans=-1,aa=-1,bb=-1;
	for (int l=0; l<2; l++) {
		int dp[n+1][m+1];
		memset(dp,0,sizeof(dp));
		for (int i=n-1; i>=0; i--) {
			for (int j=m-1; j>=0; j--) {
				if (a[i]==b[j]) {
					dp[i][j]=dp[i+1][j+1]+1;
				}
			}
		}
		int dp2[n+1][m+1];
		memset(dp2,0,sizeof(dp2));
		for (int i=0; i<n; i++) {
			for (int j=0; j<m; j++) {
				for (int k=0; k<dp[i][j]; k++) {
					dp2[i][j+k]=max(dp2[i][j+k],k+1);
				}
			}
		}
		for (int i=0; i<n; i++) {
			for (int j=0; j<m; j++) {
				int t=dp[i][j]+(j>0?dp2[i+dp[i][j]][j-1]:0);
				if (t>ans) {
					ans=t;
					aa=i;
					bb=j-(j>0?dp2[i+dp[i][j]][j-1]:0);
					if (l) {
						bb=j+dp[i][j]-1;
						bb=m-1-bb;
					}
				}
			}
		}
		reverse(all(b));
	}
	cout << ans << '\n' << aa << ' ' << bb << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...