Cod sursa(job #3340782)

Utilizator Cezar2009Cezar Mihai Titihazan Cezar2009 Data 16 februarie 2026 12:58:37
Problema Patrate2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.61 kb
//https://www.infoarena.ro/problema/patrate2

//#ifdef _MSC_VER
//	#define _CRT_SECURE_NO_WARNINGS
//#elif  __GNUC__
//	#pragma GCC optimize("Ofast,unroll-loops,inline")
//	#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
//#endif

//#define _USE_MATH_DEFINES

#include <iostream>
#include <fstream>
#include <utility>
#include <cstdint>
//#include <cstdio>
//#include <algorithm>
//#include <vector>
//#include <array>
//#include <list>
//#include <forward_list>
//#include <string>
#include <cstring>
//#include <cmath>
//#include <bitset>
//#include <queue>
//#include <stack>
//#include <map>
//#include <set>
//#include <unordered_map>
//#include <unordered_set>
//#include <limits>
//#include <climits>
//#include <iomanip>
//#include <tuple>
//#include <numeric>
//#include <chrono>
//#include <memory>

using namespace std;

using int64 = int64_t;
using uint64 = uint64_t;
using int16 = int16_t;
using uint16 = uint16_t;
using pii = pair<int, int>;
using pll = pair<int64, int64>;

#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
#define pb push_back
#define for0(i,n) for(auto i=0; i<(n); ++i)
#define rfor0(i,n) for(auto i=(n)-1; i>=0; --i)
#define for1(i,n) for(auto i=1; i<=(n); ++i)
#define rfor1(i,n) for(auto i=(n); i>=1; --i)
#define foreach(x,a) for(auto& x : a)
#define cforeach(x,a) for(const auto& x : a)
#define cendl cout << "\n"
#define fendl fout << "\n"
#define FASTIO ios::sync_with_stdio(false); cin.tie(nullptr);

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

//FILE* fin = fopen("", "r");
//FILE* fout = fopen("", "w");

const int CIFMAX = 100000;

void inmultire(int x[], int& xs, int y)
{
	int r[CIFMAX], rs = 0;
	memset(r, 0, sizeof(r));

	int rest = 0;
	
	for (int i = 0; i < xs; ++i) // e invers
	{
		int c = x[i] * y + rest;
		// adun la rez c % 10
		r[rs++] = c % 10;
		rest = c / 10;
	}

	while (rest)
	{
		r[rs++] = rest % 10;
		rest /= 10;
	}


	xs = rs; // setam noul xs
	for0(i, rs) // copiem din nou in x
		x[i] = r[i];
}

//int power_of_manyy(int b, int e)
//{
//	int rez = 1;
//
//	while (e)
//	{
//		if (e & 1)
//			rez = rez * b;
//		b *= b;
//		e >>= 1;
//	}
//
//	return rez;
//}


int main()
{
	//FASTIO;

	int rez[CIFMAX], rezs;
	int n;

	fin >> n;

	rez[0] = 1;
	rezs = 1;

	//inmultire(rez, rezs, 11);
	//inmultire(rez, rezs, 11);

	for1(i, n)
		inmultire(rez, rezs, i); // rez * n!

	//// pot adauga exponentiere rapida
	for1(i, n * n)
		inmultire(rez, rezs, 2); // rez * 2 ^ (n * n)

	rfor0(i, rezs)
		fout << rez[i];
	fendl;

	return 0;
}