Team Weekly Contest 2022-10-23
2019 ICPC Universidad Nacional de Colombia Programming Contest
C. Common Subsequence
DP+思维
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr)
#define rep(a, b, c) for(int (a)=(b);(a)<=(c);(a)++)
#define per(a, b, c) for(int (a)=(b);(a)>=(c);(a)--)
#define mset(var, val) memset(var,val,sizeof(var))
#define ll long long
#define int ll
#define fi first
#define se second
#define no "NO\n"
#define yes "YES\n"
#define pb push_back
#define endl "\n"
#define pii pair<int,int>
#define pll pair<ll,ll>
const int N = 1e5 + 5;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 998244353;
const double eps = 1e-8;
const double pi = acos(-1.0);
int dp[1005][1005];
void solve() {
int n;
string str1,str2;
cin >> str1 >> str2;
n = str1.size();
int ans=0;
for (int i = 0; i <= min(n,1000ll); ++i) {
for (int j = 0; j <= min(n,1000ll); ++j) {
while(i+dp[i][j]<n && j+dp[i][j]<n && str1[i+dp[i][j]] == str2[j+dp[i][j]]) dp[i][j]++;
dp[i+1][j]=max(dp[i+1][j],dp[i][j]);
dp[i][j+1]=max(dp[i][j+1],dp[i][j]);
ans=max(ans,dp[i][j]);
}
}
if(ans>=0.99*n){
cout<<"Long lost brothers D:"<<endl;
}else {
cout << "Not brothers :(" << endl;
}
}
signed main() {
IOS;
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}

浙公网安备 33010602011771号