Cod sursa(job #2554083)

Utilizator petrisorvmyVamanu Petru Gabriel petrisorvmy Data 22 februarie 2020 16:14:31
Problema Seif Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <bits/stdc++.h>
#define FILE_NAME "seif"
#define fast ios_base :: sync_with_stdio(0); cin.tie(0);
#pragma GCC optimize("O3")
#define NMAX 1000010
using namespace std;

ifstream f(FILE_NAME ".in");
ofstream g(FILE_NAME ".out");

typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> pi;
typedef pair<ld,ld> pct;

const ll inf = 1LL << 60;
const ll mod = 1e9 + 7;
const ld eps = 1e-9;


void add(ll &a , ll b)
{
    a += b;
    a %= mod;
}

void sub(ll &a, ll b)
{
    a = (a - b + mod) % mod;
}

int n, m, pd[1100][1100],t,cate,k;
string a,b;
char sol[1100];

int main()
{
    f >> t;
    while(t--)
    {
        f >> k;
        f >> a >> b;
        a = ' '  + a;
        b = ' '  + b;
        for(int i = 1; i < a.size(); ++i)
            for(int j = 1; j < b.size(); ++j)
                if(a[i] == b[j])
                    pd[i][j] = pd[i-1][j-1] + 1;
                else
                    pd[i][j] = max(pd[i-1][j], pd[i][j-1]);
        int i = a.size() - 1;
        int j = b.size() - 1;
        cate = pd[i][j] - 1;
        while(i > 0 || j > 0)
        {
            if(a[i] == b[j])
            {
                sol[cate--] = a[i];
                i--;
                j--;
            }
            else if(pd[i - 1][j] > pd[i][j - 1])
                i--;
            else j--;
        }
        sol[ pd[a.size() - 1][b.size() - 1] ] = NULL;
        g << sol << '\n';
    }
    f.close();
    g.close();
    return 0;
}