Cod sursa(job #2483001)

Utilizator gheorghe_cristiGheorghe Florin Cristi gheorghe_cristi Data 29 octombrie 2019 09:56:38
Problema Iv Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <set>

using namespace std;

ifstream fin("iv.in");
ofstream fout("iv.out");

char a[510],b[510];
set<int> litere;
int n, sol[1000], fr[122], total;

bool palindrom(int v[], int l) {
    for(int i=1;i<=l/2;++i)
        if(v[i]!=v[l-i+1]) return false;
    return true;
}

bool verificare(int pas, int litera) {
    int c=0;
    for(int i=1;i<pas;++i)
        if(sol[i]==litera)
            c++;
    if(c<fr[litera])
        return true;
    return false;
}

void backtrack(int pas) {
    if(pas == n+1 && palindrom(sol, n))
        total++;
    else {
        for(set<int>::iterator i=litere.begin();i!=litere.end();++i) {
            sol[pas] = *i;
            if(verificare(pas, *i)) backtrack(pas+1);
        }
    }
}

int main()
{
    fin.getline(a,510);
    fin.getline(b,510);
    n = strlen(a)+strlen(b);
    for(int i=0;a[i];++i) {
        litere.insert(a[i]);
        fr[a[i]]++;
    }
    for(int i=0;b[i];++i) {
        litere.insert(b[i]);
        fr[b[i]]++;
    }
    backtrack(1);
    fout<<total%3210121*2;
}