a53

Bloc

a53
Oct 10th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.09 KB | None | 0 0
  1. //sol. Bunget Mihai
  2.  
  3. #include <fstream>
  4.  
  5. using namespace std;
  6. ifstream f("bloc.in");
  7. ofstream g("bloc.out");
  8. long long k,p,n,nrcif,rest,grupe,suma,d,b,r,mc,s,m,c,a[101],u;
  9. long long maxim,i,dir,inv,j,gr,t,sum[101],nr[101],nr1[101];
  10.  
  11. int main()
  12. {
  13. f >> k >> p >> n ;
  14. //cerinta a)
  15. nrcif = (n+1)*p ;
  16. rest = nrcif % k ;
  17. grupe = nrcif / k ;
  18. suma = grupe * k * (k+1) / 2 + rest * (rest+1) / 2 ;
  19. g << suma << "\n" ;
  20. // cerinta b)
  21. d = k ;
  22. b = p ;
  23. r = d % b ;
  24. while ( r!=0 )
  25. {
  26. d = b ;
  27. b = r ;
  28. r = d % b ;
  29. }
  30. mc = (k*p)/b ;
  31. s = mc / p ;
  32. gr = ( n+1 ) / s ;
  33. rest = ( n+1 ) % s ;
  34. for ( i=1 ; i<=s ; i++ )
  35. {
  36. if ((s-i)%2==0)
  37. for ( j=1 ; j<=p ; j++ ) if ( (p*(i-1)+j)%k==0 ) a[j] += k ;
  38. else a[j] += (p*(i-1)+j)%k ;
  39. else
  40. for ( j=1 ; j<=p ; j++ ) if ( (p*(i-1)+j)%k==0 ) a[p+1-j] += k ;
  41. else a[p+1-j] += (p*(i-1)+j)%k ;
  42. }
  43. if ((gr*s+rest)%2==0)
  44. if (s%2==0) {dir=gr ; inv=0; }
  45. else if (gr%2==0) {dir=gr/2 ; inv=gr/2; }
  46. else { dir=gr/2 ; inv=(gr+1)/2; }
  47. else if (s%2==0){ dir=0 ; inv=gr; }
  48. else if (gr%2==0) {dir=gr/2 ; inv=gr/2; }
  49. else {dir=(gr+1)/2 ; inv=gr/2; }
  50. for (j=1 ; j<=p ; j++ ) sum[j]+=dir*a[j]+inv*a[p+1-j] ;
  51. for ( i=1 ; i<=rest ; i++ )
  52. {
  53. if ((rest-i)%2==0)
  54. for ( j=1 ; j<=p ; j++ ) { if ( (p*(i-1)+j)%k==0 ) sum[j] += k ;
  55. else sum[j] += (p*(i-1)+j)%k ;
  56.  
  57. }
  58. else
  59. for ( j=1 ; j<=p ; j++ ) { if ( (p*(i-1)+j)%k==0 ) sum[p+1-j] += k ;
  60. else sum[p+1-j] += (p*(i-1)+j)%k ;
  61.  
  62. }
  63. }
  64. maxim=0 ;
  65. for ( i=1 ; i<=p ; i++ )
  66. if ( sum[i]>maxim ) maxim = sum[i] ;
  67. g << maxim << "\n";
  68.  
  69. //c
  70. if ( n<s)
  71. {
  72. if ( n%2==0)
  73. for ( i=1 ; i<=p ; i++ )
  74. if(i%k==0) nr[i]=k ;
  75. else nr[i]=i%k ;
  76. else
  77. for ( i=1 ; i<=p ; i++ )
  78. if(i%k==0) nr[p+1-i]=k ;
  79. else nr[p+1-i]=i%k ;
  80. for ( i=2 ; i<=n ; i++ )
  81. {
  82. if ((n-i+1)%2==0)
  83. {
  84. for ( j=1 ; j<=p ; j++ )
  85. if((p*(i-1)+j)%k==0) nr1[j]=k ;
  86. else nr1[j]=(p*(i-1)+j)%k ;
  87. u=1;
  88. while((nr[u]==nr1[u])and(u<p))u++ ;
  89. if (nr[u]>nr1[u])
  90. for ( j=1 ; j<=p ; j++ ) nr[j]=nr1[j] ;
  91. }
  92. else
  93. {
  94. for ( j=1 ; j<=p ; j++ )
  95. if((p*(i-1)+j)%k==0) nr1[p+1-j]=k ;
  96. else nr1[p+1-j]=(p*(i-1)+j)%k ;
  97. u=1;
  98. while((nr[u]==nr1[u])and(u<p))u++ ;
  99. if (nr[u]>nr1[u])
  100. for ( j=1 ; j<=p ; j++ ) nr[j]=nr1[j] ;
  101. }
  102. }
  103. }
  104. else
  105. {
  106. if ((n%2==0)or((n-s)%2==0))
  107. for ( i=1 ; i<=p ; i++ )
  108. if(i%k==0) nr[i]=k ;
  109. else nr[i]=i%k ;
  110. else
  111. for ( i=1 ; i<=p ; i++ )
  112. if(i%k==0) nr[p+1-i]=k ;
  113. else nr[p+1-i]=i%k ;
  114. for ( i=2 ; i<=s ; i++ )
  115. {
  116. if (((n-i+1)%2==0)or((n-i+1>=s)and((n-i+1-s)%2==0)))
  117. {
  118. for ( j=1 ; j<=p ; j++ )
  119. if((p*(i-1)+j)%k==0) nr1[j]=k ;
  120. else nr1[j]=(p*(i-1)+j)%k ;
  121. u=1;
  122. while((nr[u]==nr1[u])and(u<p))u++ ;
  123. if (nr[u]>nr1[u])
  124. for ( j=1 ; j<=p ; j++ ) nr[j]=nr1[j] ;
  125. }
  126. if (((n-i+1)%2==1)or((n-i+1>=s)and((n-i+1-s)%2==1)))
  127. {
  128. for ( j=1 ; j<=p ; j++ )
  129. if((p*(i-1)+j)%k==0) nr1[p+1-j]=k ;
  130. else nr1[p+1-j]=(p*(i-1)+j)%k ;
  131. u=1;
  132. while((nr[u]==nr1[u])and(u<p))u++ ;
  133. if (nr[u]>nr1[u])
  134. for ( j=1 ; j<=p ; j++ ) nr[j]=nr1[j] ;
  135. }
  136. }
  137. }
  138. for ( j=1 ; j<=p ; j++ ) g << nr[j] ;
  139. return 0;
  140. }
Add Comment
Please, Sign In to add comment