Pagini recente » Cod sursa (job #1680322) | Cod sursa (job #568536) | Cod sursa (job #1649525) | Cod sursa (job #2099228) | Cod sursa (job #1059150)
#include <cstdio>
#include <cstdlib>
#define NUM_CNT 1200
#define FEHER 0
#define KEK 1
#define PIROS 2
#define ZOLD 3
#define SARGA 4
using namespace std;
int N;
inline void beolvas(int &n){
FILE* in = fopen("culori3.in","r");
fscanf(in,"%d",&n);
}
///Here begins the hard part
class BigNum{
public:
int nums[NUM_CNT];
BigNum operator+(BigNum a);
BigNum& operator=(const BigNum& a);
static BigNum getOne();
void printToFile(FILE* f);
};
BigNum BigNum::operator+(BigNum a){
BigNum tmp;
int carry = 0;
for(int k = NUM_CNT-1;k >= 0;k--){
tmp.nums[k] = ( this->nums[k] + a.nums[k] + carry )%10;
carry = (this->nums[k] + a.nums[k] + carry)/10;
}
return tmp;
}
BigNum& BigNum::operator=(const BigNum &a){
for(int k = NUM_CNT-1;k >= 0;k--){
this->nums[k] = a.nums[k];
}
return *this;
}
BigNum BigNum::getOne(){
BigNum a;
for(int k = NUM_CNT-1;k >= 0;k--){
a.nums[k] = 0;
}
a.nums[NUM_CNT - 1] = 1;
return a;
}
void BigNum::printToFile(FILE* f){
int jozsi = 0;
for(int k = 0;k < NUM_CNT;k++){
if(this->nums[k] != 0 || jozsi == 1){
fprintf(f,"%d",this->nums[k]);
jozsi = 1;
}
}
}
void solver_hard(){
BigNum szinek[2][5];
szinek[0][FEHER] = BigNum::getOne();
szinek[0][KEK] = BigNum::getOne();
szinek[0][PIROS] = BigNum::getOne();
szinek[0][ZOLD] = BigNum::getOne();
szinek[0][SARGA] = BigNum::getOne();
int i = 1;
while(i <= N){
if(i%2==1){
szinek[1][FEHER] = szinek[0][KEK];
szinek[1][KEK] = szinek[0][FEHER] + szinek[0][PIROS];
szinek[1][PIROS] = szinek[0][KEK] + szinek[0][ZOLD];
szinek[1][ZOLD] = szinek[0][PIROS] + szinek[0][SARGA];
szinek[1][SARGA] = szinek[0][ZOLD];
}else{
szinek[0][FEHER] = szinek[1][KEK];
szinek[0][KEK] = szinek[1][FEHER] + szinek[1][PIROS];
szinek[0][PIROS] = szinek[1][KEK] + szinek[1][ZOLD];
szinek[0][ZOLD] = szinek[1][PIROS] + szinek[1][SARGA];
szinek[0][SARGA] = szinek[1][ZOLD];
}
i++;
};
BigNum out;
if(N%2==0){
out = szinek[1][FEHER] + szinek[1][KEK] + szinek[1][PIROS] + szinek[1][ZOLD] + szinek[1][SARGA];
}else out = szinek[0][FEHER] + szinek[0][KEK] + szinek[0][PIROS] + szinek[0][ZOLD] + szinek[0][SARGA];
FILE* f = fopen("culori3.out","w");
out.printToFile(f);
}
int main()
{
beolvas(N);
solver_hard();
return 0;
}