Cod sursa(job #1733418)

Utilizator ZenusTudor Costin Razvan Zenus Data 24 iulie 2016 17:32:29
Problema Iv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <bits/stdc++.h>

using namespace std;

const int mod = 3210121;

string a , b;

int bkt(int sa , int fa , int sb , int fb)
{
    int add = 0;
    int t = 0;

    if (sa <= fa)
    {
        t = 1;

        char t = a[sa];
        bool r = 0;

        sa++;

        if (sa <= fa)
        {
            r = 1;
            if (a[fa] == t)
            {
                fa--;
                add += bkt(sa , fa , sb , fb);
                if (add >= mod) add -= mod;
                fa++;
            }
        }

        if (sb <= fb)
        {
            r = 1;
            if (b[fb] == t)
            {
                fb--;
                add += bkt(sa , fa , sb , fb);
                if (add >= mod) add -= mod;
                fb++;
            }
        }

        if (r == 0) add += 1;
        if (add >= mod) add -= mod;

        sa--;
    }

    if (sb <= fb)
    {
        t = 1;

        char t = b[sb];
        int r = 0;

        sb++;

        if (sa <= fa)
        {
            r = 1;
            if (a[fa] == t)
            {
                fa--;
                add += bkt(sa , fa , sb , fb);
                if (add >= mod) add -= mod;
                fa++;
            }
        }

        if (sb <= fb)
        {
            r = 1;
            if (b[fb] == t)
            {
                fb--;
                add += bkt(sa , fa , sb , fb);
                if (add >= mod) add -= mod;
                fb++;
            }
        }

        if (r == 0) add += 1;
        if (add >= mod) add -= mod;

        sb--;
    }

    if (t == 0) add += 1;
    if (add >= mod) add -= mod;

    return add;
}

int main()
{

cin >> a;
cin >> b;

cout << bkt(0 , a.size() - 1 , 0 , b.size() - 1) << '\n';

return 0;
}