Cod sursa(job #2905577)

Utilizator vlad2009Vlad Tutunaru vlad2009 Data 22 mai 2022 15:36:43
Problema Koba Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#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;
}