Cod sursa(job #140111)

Utilizator Omega91Nicodei Eduard Omega91 Data 21 februarie 2008 12:31:29
Problema Koba Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
int main()
{
    ifstream f1("koba.in");
    ofstream f2("koba.out");
    int n, t1, t2, t3, poz, i, t, tt, s = 0, cont;
    int nr[1001] = {}, sir[1001] = {};
    int suma_per = 0, elem_per, nr_per, nr_elem_coada;
    f1 >> n >> t1 >> t2 >> t3;
    t1 %= 10; t2 %= 10; t3 %= 10;
    sir[1] = t1; sir[2] = t2; sir[3] = t3;
    poz = 3;
    for (cont = 1; cont <= n; ++cont) {
        //cout << sir[poz] << endl;
        tt = t1 * 100 + t2 * 10 + t3;
        if (nr[tt]) {
            for (i = nr[tt]; i <= poz - 3; ++i) {
                //cout << sir[i] << " ";
                suma_per += sir[i];
            }
            elem_per = poz - 3 - nr[tt] + 1;
            nr_per = (n - nr[tt] + 1) / elem_per;
            //cout << elem_per << endl << nr_per << endl << suma_per << endl;;
            s+=suma_per * nr_per;
            
            for (i = 1; i < nr[tt]; ++i)
                s += sir[i];
            nr_elem_coada = n - nr[tt] + 1 - elem_per * nr_per;
            //cout << nr
            for (i = nr[tt]; i < nr[tt] + nr_elem_coada; ++i)
                s += sir[i];
            cont = 0;
            break;
        }
        //else {
            t = t1 * t2 + t3;
            t %= 10;
            sir[++poz] = t;
            nr[tt] = poz - 3;
            t1 = t2;
            t2 = t3;
            t3 = t;
        //}
        //system("PAUSE");
    }
    if (cont == n + 1)
        for (i = 1; i <= n; ++i) {
            s+=sir[i];
        }
    f2 << s << endl;
    //system("PAUSE");
    f1.close();
    f2.close();
    return 0;
}