Pagini recente » Cod sursa (job #2838432) | Cod sursa (job #294001) | Cod sursa (job #796886) | Cod sursa (job #2353882) | Cod sursa (job #421230)
Cod sursa(job #421230)
#include <fstream>
using namespace std;
short int v[1<<4][1<<4],q[1<<4];
int n,k=1<<4;
long long cou;
void check(int x)
{
bool y[1<<4][1<<4];
int i,j,nr=0;
for (i=1;i<=x;i++)
for (j=1;j<=x;j++)
y[i][j]=false;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (v[i][j] && q[i]!=q[j])
y[q[i]][q[j]]=true;
for (i=1;i<=x;i++)
for (j=1;j<=x;j++)
nr+=y[i][j];
if (nr==x*(x-1))
cou++;
}
long long pow(long long n,int x)
{
if (x==1)
return n;
return pow(n,x%2)*pow(n*n,x/2);
}
void teams(int p,int x)
{
if (p==n+1)
{
check(x);
return;
}
for (int i=1;i<=x;i++)
{
q[p]=i;
teams(p+1,x);
}
}
int main()
{
int i,j;
char s[10];
long long rezultat=0;
ifstream in("copii.in");
ofstream out("copii.out");
in>>n;
in.get();
for (i=1;i<=n;i++)
{
in.getline(s,n+1);
for (j=1;j<=n;j++)
{
v[i][j]=s[j-1]-'0';
v[i][0]+=v[i][j];
}
if (v[i][0]<k)
k=v[i][0];
}
k++;
if (n==2 && k==1)
{
out<<"1";
return 0;
}
if (k==n)
{
cou=n;
out<<pow(cou,n);
return 0;
}
for (i=2;i<=n;i++)
{
teams(1,i);
rezultat+=cou/i;
cou=0;
}
out<<rezultat;
return 0;
}