fork(10) download
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <math.h>
  4. using namespace std;
  5.  
  6. int bit(int i,int n,int u)
  7. {
  8. do
  9. {
  10. i=i+1;
  11. }while(pow(i,u)<n);
  12. return i;
  13. }
  14.  
  15.  
  16. int main() {
  17. double n,result,p;//переменные для результата и количество кубиков,на всякий случай большой размерности
  18. long long int i=0,g=0;//объявляем переенные для разрядностей
  19. cin>>n;
  20. i=bit(i,n,3);//находим разрядность куба
  21. if ((i*i*(i-1))>=n)//проверка третьего этапа
  22. {
  23. if (((i-1)*(i-1)*i)>=n)//проверка первого этапа и если правда,то решение первого этапа
  24. {
  25. double o=i-1;
  26. result=8*o+4+5*o*(o-1)*2+3*(o-1)*2+3*o*(o-1)*(o-1)+2*(o-1)*(o-1);//результату присваем прошылй куб
  27. p=n-o*o*o;//количество оставшихся кубов
  28. g=bit(g,p,2);//разрядность плоскости
  29. if (g==1)//проверка разрядности на 1
  30. result+=8;//увеличение результата на 8 при разрядности 1
  31. else
  32. result+=8+(g-2)*2*5+3*((g-1)*(g-1)-1-(g-2)*2);//увеличение результата по формуле
  33. for (long int i = 1;(g-1)*(g-1)+i <= p;i++)
  34. {
  35. if ((i == 1 || i == g) && g != 1)
  36. {
  37. result+=5;
  38. }
  39. else if (g != 1)
  40. {
  41. result+=3;
  42. }
  43. }
  44.  
  45. }
  46. else//решение второго этапа
  47. {
  48. double o=i-1;
  49. result=8*o+4+5*o*(o-1)*2+3*(o-1)*2+3*o*(o-1)*(o-1)+2*(o-1)*(o-1)+o*o*3+5+2*2*(o-1);//результат по формуле+ещё достроеная на первом этапе стенка
  50. p=n-o*o*(o+1);
  51. g=bit(g,p,2);
  52. if (g==1)
  53. result+=8;
  54. else
  55. result+=8+(g-2)*2*5+3*((g-1)*(g-1)-1-(g-2)*2);
  56. for (long int i=1;((g-1)*(g-1)+i)<=p;i++)
  57. {
  58. if ((i == 1 || i == g) && g != 1)
  59. {
  60. result+=5;
  61. }
  62. else if (g!=1)
  63. {
  64. result+=3;
  65. }
  66. }
  67. }
  68. }
  69. else//решение третьего этапа
  70. {
  71. double o=i;
  72. result=8*(o-1)+4+5*(o-1)*(o-1)*2+3*(o-1)*2+3*(o-1)*(o-1)*(o-1)+2*(o-1)*(o-1);//результат по формуле разрядности,только на высоту раную i-1
  73. p=n-(o-1)*o*o;
  74. g=bit(g,p,2);
  75. if (g==1)
  76. result+=8;
  77. else
  78. result+=8+(g-2)*2*5+3*((g-1)*(g-1)-1-(g-2)*2);
  79. for (long int i=1;((g-1)*(g-1)+i)<=p;i++)
  80. {
  81. if ((i == 1 || i == g) && g != 1)
  82. {
  83. result+=5;
  84. }
  85. else if (g!=1)
  86. {
  87. result+=3;
  88. }
  89. }
  90. }
  91. cout <<result<< endl;
  92. return 0;
  93. }
Success #stdin #stdout 0s 3480KB
stdin
3
stdout
28