Pagini recente » Cod sursa (job #1557653) | Cod sursa (job #1618073) | Cod sursa (job #1146101) | Cod sursa (job #554298) | Cod sursa (job #910730)
Cod sursa(job #910730)
/* Mai intai sa completam matricea doar cu 1 si 5 astfel incat produsul elementelor de pe fiecare linie sau coloana sa fie 5.
Observam ca pe fiecare linie si pe fiecare coloana se plaseaza exact un 5, restul matricii fiind completata cu 1.
Este evident ca fiecare permutare a multimii (1, 2 * N) reprezinta de fapt o posibilitate de aranjare a numarului 5 in matrice,
iar de aici deducem ca numarul de posibilitati de a completa matricea doar cu 1 si 5 este PN (adica N!).
Cum putem folosi si -1 si -5, rezultatul final va fi 2N*N*N!
La implementare trebuie sa se efectueze operatii cu numere mari.
De asemenea, se recomanda ca baza in care se lucreaza trebuie sa fie destul de mare pentru a se obtine eficienta dorita.
*/
#include<cstdio>
using namespace std;
int n,a[10001],i;
void prod(int a[],int x)
{ int t=0;
for (int i=1;i<=a[0];i++)
{ a[i]=a[i]*x+t;
t=a[i]/10;
a[i]%=10;
}
while (t!=0)
a[++a[0]]=t%10,t/=10;
}
int main()
{ freopen("patrate2.in","r",stdin);
freopen("patrate2.out","w",stdout);
scanf("%ld",&n);
a[0]=a[1]=1;
for (i=1;i<=n*n/3;++i) prod(a,8);
for (i=1;i<=n*n%3;++i) prod(a,2);
for (i=1;i<=n;++i) prod(a,i);
for (i=a[0];i>=1;--i) printf("%ld",a[i]);
return 0;
}