Cod sursa(job #135616)
Utilizator | Data | 14 februarie 2008 00:32:20 | |
---|---|---|---|
Problema | Koba | Scor | Ascuns |
Compilator | cpp | Status | done |
Runda | Marime | 0.8 kb |
#include <stdio.h>
#define FIN "koba.in"
#define FOUT "koba.out"
int N, A, B, C, S[1024], U[10][10][10];
int solve(int n, int a, int b, int c)
{
int i, t, len, sum, start;
a %= 10; b %= 10; c %= 10;
if (n <= 3) return a + (n > 1)*b + (n > 2)*c;
S[0] = a+b+c; n -= 3;
for (i = 1; !U[a][b][c]; ++i)
{
U[a][b][c] = i;
t = (c+a*b)%10;
S[i] = S[i-1]+t;
if (i == n) return S[i];
a = b; b = c; c = t;
}
start = U[a][b][c]-1;
len = i-start; sum = S[i-1]-S[start-1];
n -= start-1;
return (n/len)*sum+S[start-1+n%len];
}
int main(void)
{
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d %d %d %d", &N, &A, &B, &C);
printf("%d\n", solve(N, A, B, C));
return 0;
}