Pagini recente » Cod sursa (job #2706605) | Borderou de evaluare (job #1728382) | Cod sursa (job #1967658) | Cod sursa (job #2341265) | Cod sursa (job #3170611)
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
#define def void
ofstream cout("iv.out");
ifstream cin("iv.in");
int x[20], totalSize = 0, ans = 0, firstSize, secondSize;
int vf[30];
string a, b;
bool check(int pas){
string str;
for(int i = 0;i<totalSize;i++){
if(x[i] < firstSize){
str += a[i];
}else{
str += b[i - firstSize];
}
}
string aux = str;
reverse(aux.begin(), aux.end());
return aux == str;
}
def backtrack(int pas){
if(pas == totalSize + 1){
ans += check(pas);
}else{
for(int i = 0;i<totalSize;i++){
x[pas] = i;
if(!vf[i]){
vf[i] = 1;
backtrack(pas + 1);
vf[i] = 0;
}
}
}
}
int main(void){
cin >> a >> b;
totalSize = a.size() + b.size();
firstSize = a.size();
secondSize = b.size();
backtrack(1);
cout << ans / 2; /// nu numaram de doua ori aceasi permutare (1,2,3) -> (3,2,1)
}