Cod sursa(job #1360199)

Utilizator matei_cChristescu Matei matei_c Data 25 februarie 2015 12:39:27
Problema Koba Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstring>
#include<set>
#include<map>
#include<cmath>
using namespace std ;

#define maxn 1005

int N, a, b, c ;

int sum[maxn] ;

int poz[maxn] ;

int rez ;

int main()
{
	std::ios_base::sync_with_stdio(false) ;

    freopen("koba.in", "r", stdin);
    freopen("koba.out", "w", stdout);

	cin >> N >> a >> b >> c ;

    a = a % 10 ;
    b = b % 10 ;
    c = c % 10 ;

    sum[0] = a ;
    sum[1] = a + b ;

    for(int i = 0; i < maxn; ++i)
        poz[i] = -1 ;

    int ind = 2 ;

    int x = c * 100 + b * 10 + a ;

    while( poz[x] == -1 )
    {
        poz[x] = ind ;

        sum[ind] = sum[ind - 1] + c ;

        int aux = ( a * b + c ) % 10 ;

        a = b ;
        b = c ;
        c = aux ;

        x = c * 100 + b * 10 + a ;

        ++ind ;
    }

    if( N <= ind )
        rez = sum[N - 1] ;
    else
    {
        rez += sum[poz[x] - 1] ;
        rez += (sum[ind - 1] - sum[poz[x] - 1]) * ( (N - poz[x]) / (ind - poz[x]) ) ;

        int rest = (N - poz[x]) % (ind - poz[x]) - 1 ;

        if( rest >= 0 )
            rez += sum[poz[x] + rest] - sum[poz[x] - 1] ;
    }

    cout << rez ;

    return 0 ;
}