fork(2) download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int** N;
  5.  
  6. void prepare()
  7. {
  8. int i;
  9. N = malloc(9 * sizeof(int*));
  10. for (i = 1; i <= 8; i++)
  11. {
  12. int length = i * 9 + 1;
  13. N[i] = malloc(length * sizeof(int));
  14.  
  15. if (i == 1)
  16. {
  17. int j;
  18. for (j = 0; j < length; j++)
  19. N[i][j] = 1;
  20. }
  21. else
  22. {
  23. int runningsum = 0;
  24. int k = 0;
  25. for ( ; k <= length / 2; k++)
  26. {
  27. runningsum += N[i-1][k];
  28. if (k >= 10)
  29. runningsum -= N[i-1][k-10];
  30. N[i][k] = runningsum;
  31. }
  32. for ( ; k < length; k++)
  33. {
  34. N[i][k] = N[i][length - 1 - k];
  35. }
  36. }
  37. }
  38. }
  39.  
  40. static unsigned long long l_t(size_t digits)
  41. {
  42. unsigned long long tickets = 0;
  43. size_t i = 0;
  44.  
  45. for( ; i <= (digits*9); i++ )
  46. {
  47. unsigned long long n = N[digits][i];
  48. tickets += n*n;
  49. }
  50. return tickets;
  51. }
  52.  
  53. int main()
  54. {
  55. prepare();
  56. (
  57. "1: %llu\n2: %llu\n3: %llu\n4: %llu\n5: %llu\n6: %llu\n7: %llu\n8: %llu\n",
  58. l_t(1),l_t(2),l_t(3),l_t(4),l_t(5),l_t(6),l_t(7),l_t(8)
  59. );
  60. return 0;
  61. }
  62.  
Success #stdin #stdout 0s 1920KB
stdin
Standard input is empty
stdout
1: 10
2: 670
3: 55252
4: 4816030
5: 432457640
6: 39581170420
7: 3671331273480
8: 343900019857310