Cod sursa(job #910730)

Utilizator enedumitruene dumitru enedumitru Data 10 martie 2013 23:26:49
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
/*	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; 
}