Pagini recente » Cod sursa (job #57084) | Cod sursa (job #1477058) | Cod sursa (job #281846) | Cod sursa (job #131778) | Cod sursa (job #3224303)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("txt.in");
ofstream fout("txt.out");
const int mod = 10;
int n, m, i, t1, t2, t3, t[10002];
int sum[10002], lp, r;
int fr[12][12][12];
static inline void Calc(int &t1, int &t2, int &t3) {
int _t = (t1 + t2 * t3 % mod) % mod;
t3 = t2;
t2 = t1;
t1 = _t;
}
int main() {
fin >> n >> t3 >> t2 >> t1;
t1 %= mod;
t2 %= mod;
t3 %= mod;
t[1] = t3;
t[2] = t2;
t[3] = t1;
fr[0][0][t3] = 1;
fr[0][t2][t3] = 2;
fr[t1][t2][t3] = 3;
lp = 3;
int incPer, m;
while(true) {
lp++;
Calc(t1, t2, t3);
if(fr[t1][t2][t3] != 0) {
incPer = fr[t1][t2][t3];
m = lp - incPer;
break;
}
fr[t1][t2][t3] = lp;
t[lp] = t1;
}
for(i = 1; i <= lp; i++) sum[i] = t[i] + sum[i - 1];
if(n < incPer) fout << sum[n];
else {
r += sum[incPer - 1];
int sumPer = sum[lp - 1] - sum[incPer - 1];
r += ((n - (incPer - 1)) / m) * sumPer;
int rest = (n - (incPer - 1)) % m;
for(i = incPer; i <= incPer + rest - 1; i++) r += t[i];
fout << r;
}
return 0;
}