Loading

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;
}
posted @ 2022-10-31 18:58  ShG1211  阅读(23)  评论(0)    收藏  举报