Pagini recente » Rating antonesei costin (antoneseicostin) | Istoria paginii runda/test_1 | Cod sursa (job #136976) | Rating Turcuman Luca Banu (ltbiasi) | Cod sursa (job #972693)
Cod sursa(job #972693)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("koba.in");
ofstream g("koba.out");
#define nmax 10000
int n, v[nmax];
int v2[1000];
int main(){
f >> n >> v[1] >> v[2] >> v[3];
v[1] = v[1] % 10;
v[2] %= 10;
v[3] %= 10;
/*
cout << v[1] % 10 << " " << v[2] % 10 << " " << v[3] % 10 << " ";
cout << v[1]% 10 << " " << 000 << "\n";
cout << v[2]% 10 << " " << v[1] << 00 << "\n";
cout << v[3]% 10 << " " << v[2] << v[1] << 0 << "\n";
*/ int First = 0; int Last = 0;
for(int i=4; i<=n; ++i){
v[i] = v[i-1] + v[i-2] * v[i-3];
//cout << v[i] % 10 << " ";
v[i] = v[i] % 10;
//cout << i << " " << v[i] << " " << v[i-1] << v[i-2] << v[i-3] << "\n";
if (v2[ (v[i-1]*10+v[i-2])*10+v[i-3] ] != 0) { First = v2[ (v[i-1]*10+v[i-2])*10+v[i-3] ]; Last = i-1;break;}
else v2[ (v[i-1]*10+v[i-2])*10+v[i-3] ] = i;
}
n -= (First-1);
long long S = 0LL;
for(int i=1; i<=First-1; ++i) S += (long long)v[i];
long long s2 = 0LL;
for(int i=First; i<=Last; ++i) s2 += (long long)v[i];
int cat = n / (Last - First + 1);
int rest = n % (Last - First + 1);
S += (s2 * (long long)cat);
for(int i=First; i<=First+rest-1; ++i) S += v[i];
g << S << "\n";
}