Pagini recente » Cod sursa (job #432510) | Cod sursa (job #2481362) | Cod sursa (job #2288476) | Cod sursa (job #1157231) | Cod sursa (job #1220573)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("ciuperci.in");
ofstream g("ciuperci.out");
long N,Q;
vector <int> H[1001],HH[1001];
int HASH(long long X)
{
long long aux;
aux = (X*3+123)%1000;
return aux;
}
long long SOL(int X)
{
long long A,B;
int aux;
bool ok = false;
aux = HASH(X);
if (X == 2)
return 2;
if (X == 1)
return 1;
for (int i = 0; i < H[aux].size(); ++i)
{
if (H[aux][i] == X)
{
A = HH[aux][i];
ok = true;
return HH[aux][i];
}
}
if (!ok)
{
if (X % 2 == 1)
{
A = SOL(X/2);
H[aux].push_back(X);
HH[aux].push_back(A*A);
return A*A;
}
else
{
A = SOL(X/2);
B = SOL(X/2-1);
H[aux].push_back(X);
HH[aux].push_back(2*A*B);
return 2*A*B;
}
}
}
int main()
{
f >> Q;
while (Q--)
{
f >> N;
g << SOL(N) << '\n';
}
f.close();
g.close();
return 0;
}