#include #include #include const char * infile = "ctriangle.inp"; const char *outfile = "ctriangle.out"; int F; long long k, n; long long t0ll(char *s) { long long q = 0; for (unsigned i = 0; i < strlen(s); i++) q = q * 10LL + (long long) (s[i]-'0'); return q; } int aa[1000000]; int bb[1000000]; int ans; void solve(void) { int *a = aa; int *b = bb; for (long long i = 1LL; i <= k; i++) { int sum = 0; for (int j = 0; j<=i; j++) { if (j == 0) b[j] = 1; else if (j == i) b[j] = i * F; else b[j] = a[j-1] + a[j]; sum += b[j]; } if (k == i) { ans = sum % 10; break; } int *t = a; a = b; b = t; } } long long sum(long long n) { int ans = 0; for (int i = 1; i <= n; i++) ans += i; return ans; // return (n*(n+1LL))/2LL; } void solve2(void) { // ans = (int) ((sum(k-1) + sum(k)*F) % 10LL); } int main(void) { FILE *f = fopen(infile, "rt"); FILE *fout = fopen(outfile, "wt"); char ss[1000], ss1[1000]; while (3 == fscanf(f, "%s%s%d", ss, ss1, &F)) { memset(aa, 0,sizeof(aa)); // printf("%s %s %d\n", ss, ss1, f); fflush(stdout); n = t0ll(ss); k = t0ll(ss1); k--; ans = 0; if (k) { if (k < 2000) solve(); else solve2(); } fprintf(fout, "%d\n", ans);fflush(stdout); } fclose(f); fclose(fout); // system("pause"); return 0; }