Pagini recente » Cod sursa (job #1646017) | Cod sursa (job #2744349) | Cod sursa (job #1140795) | Cod sursa (job #244796) | Cod sursa (job #2905577)
#include <fstream>
#define int long long
using namespace std;
const int MAX_N = 1e5;
const int MAX_CIF = 10;
int t[MAX_N + 1];
int exists[MAX_CIF + 1][MAX_CIF + 1][MAX_CIF + 1], sp[MAX_N + 1];
int n;
signed main() {
ifstream fin("koba.in");
ofstream fout("koba.out");
fin >> n >> t[1] >> t[2] >> t[3];
int i = 4, p = 0;
int start = 1, stop = 0;
t[1] %= 10;
t[2] %= 10;
t[3] %= 10;
exists[t[3]][t[2]][t[1]] = 3;
sp[1] = t[1];
sp[2] = sp[1] + t[2];
sp[3] = sp[2] + t[3];
while (1) {
t[i] = (t[i - 1] + t[i - 2] * t[i - 3]) % 10;
sp[i] = sp[i - 1] + t[i];
if (exists[t[i]][t[i - 1]][t[i - 2]] > 0) {
start = exists[t[i]][t[i - 1]][t[i - 2]] - 2;
stop = i - 3;
break;
}
exists[t[i]][t[i - 1]][t[i - 2]] = i;
i++;
}
int answer = sp[start - 1];
int len = stop - start + 1;
int sum = sp[stop] - sp[start - 1];
int complete = (n - (start - 1)) / len;
answer += complete * sum;
int ramase = (n - (start - 1)) % len;
answer += sp[start + ramase - 1] - sp[start - 1];
fout << answer;
return 0;
}