Cod sursa(job #2328877)

Utilizator Mathe13Mathe Andrei Mathe13 Data 26 ianuarie 2019 11:12:52
Problema Patrate2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <iostream>
#include <fstream>

using namespace std;

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

long long n, sol;
long long sol1, sol2;
long long sol_a[5000000001], sol_b[5000000001], sol_c[10000000002];

long long Faktorial(long long a, long long b)
{
	long long res = 1;
	for (long long i = a; i <= b; ++i)
		res *= i;
	return res;
}

long long Pow(long long a, long long b)
{
	long long res = a;
	for (long long i = 2; i <= b; ++i)
		res *= a;
	return res;
}

void Oparitii()
{
	long long t = 0;
	while (sol1){
		++sol_a[0];
		sol_a[sol_a[0]] = sol1%10;
		sol1 /= 10;
	}
	while (sol2){
		++sol_b[0];
		sol_b[sol_b[0]] = sol2%10;
		sol2 /= 10;
	}

	sol_c[0] = sol_a[0]+sol_b[0]-1;
	for (long long i = 1; i <= sol_a[0]; ++i)
		for (long long j = 1; j <= sol_b[0]; ++j)
			sol_c[i+j-1] += sol_a[i]*sol_b[j];

	for (long long i = 1; i <= sol_c[0]; ++i){
		t += sol_c[i];
		sol_c[i] = t%10;
		t /= 10;
	}
	if (t)
		sol_c[++sol_c[0]] = t;
}

void Solve()
{
	sol1 = Faktorial(2, n);
	sol2 = Pow(2, n*n);
	Oparitii();
}

void Read()
{
	fin >> n;
}

void Write()
{
	for (long long i = sol_c[0]; i > 0; --i)
		fout << sol_c[i];
}

int main()
{
    Read();
    Solve();
    Write();
    return 0;
}