Cod sursa(job #635519)

Utilizator nandoLicker Nandor nando Data 19 noiembrie 2011 12:41:54
Problema Ciuperci Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.67 kb
#include <cstdio>
#include <map>
using namespace std;

FILE* fin = fopen("ciuperci.in", "r");
FILE* fout = fopen("ciuperci.out", "w");

typedef long long int64;

map<int64, int64> mp;

int64 num(int64 a)
{
	map<int64, int64>::iterator iter = mp.find(a);
	if (iter == mp.end()) {
		return (mp[a] = ((a & 1) ? 2 : 1) * num(a >> 1) * num (a - (a >> 1)));
	} else {
		return iter->second;	
	}
}

int main()
{
	int t;
	fscanf (fin, "%d\n", &t);
	
	mp[0] = 0;
	mp[1] = 1;
	mp[2] = 2;
	mp[3] = 1;
	
	for (int i = 0; i < t; ++i) {
		int64 a;
		fscanf (fin, "%lld", &a);
		fprintf (fout, "%lld\n", num(a));	
	}
	
	fclose(fin);
	fclose(fout);
	return 0;
}