Cod sursa(job #3340525)

Utilizator postolacheepostolache postolachee Data 14 februarie 2026 19:52:00
Problema Patrate2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>
#define int long long
#pragma GCC optimize("O3")
//#pragma GCC optimize("unroll-loops")
#define pb push_back
using namespace std;
//#define MOD 1999999973
#define f first
#define s second

struct nr {
	vector <int> a;
};

nr combine( nr a, nr b){
	nr aux;
    int over = 0;

	aux.a.resize(max(a.a.size(), b.a.size()), 0);

	for(int i=0;i < aux.a.size(); i++) {
		aux.a[i] += over;

		if(i<a.a.size()) aux.a[i] += a.a[i];
		if(i < b.a.size()) aux.a[i] += b.a[i];

		if(aux.a[i] >= 10) {
			aux.a[i] -= 10;
			over =1;
		} else over = 0;
	}

	if(over == 1) {
		aux.a.push_back(1);
	}

	return aux;
}

void mult(nr &a, int x){
	int over = 0;
	for(int i=0;i < a.a.size(); i++) {
		a.a[i] *= x;
		a.a[i] += over;
		over = a.a[i] / 10;
		a.a[i] %= 10;
	}

	while(over > 0) {
		a.a.push_back(over % 10);
		over /= 10;
	}
}

signed main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	ifstream cin("patrate2.in");
	ofstream cout("patrate2.out");

	int n; cin >> n;
	nr partial;
	partial.a.resize(1);
	partial.a[0]=1;

	for(int i=1;i <= n * n; i++) partial = combine(partial, partial);

	for(int i = 2; i <= n; i++) mult(partial, i);

	for(int i=partial.a.size() - 1; i >= 0; i--) cout << partial.a[i];

	return 0;
}