Advertisement
Guest User

Untitled

a guest
May 4th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define lli long long int
  4. #define fi first
  5. #define se second
  6. #define sc scanf
  7. #define pr printf
  8. #define pb push_back
  9. #define mp make_pair
  10. #define fin freopen( "input.txt", "r", stdin );
  11. #define fout freopen( "output.txt", "w", stdout );
  12.  
  13. const int N = 200100;
  14.  
  15. using namespace std;
  16.  
  17. lli n, a[N], ans1, ans2;
  18. lli s[N], ans = 1e18;
  19. vector < lli > v[N];
  20.  
  21. bool cmp( lli x, lli y )
  22. {
  23. return x > y;
  24. }
  25.  
  26. lli f( lli p, lli q )
  27. {
  28. lli cnt = s[p];
  29. //cout << cnt << endl;
  30. for( lli i = 1; i < v[q].size(); i += 2 ){
  31. //cout << v[q][i] << " " << s[v[q][i] + q - 1] - s[v[q][i] + p - 1] << endl;
  32. cnt += s[v[q][i] + q + p - 1] - s[v[q][i] + p - 1];
  33. }
  34. //cout << cnt << endl;
  35. return abs(s[n] - cnt * 2);
  36. }
  37.  
  38. lli f1( lli p, lli q )
  39. {
  40. lli cnt = s[p];
  41. lli l = p + q + 1;
  42. while( l <= n ){
  43. for( lli i = l; i < l + q; i++ )
  44. cnt += a[i];
  45. l += q + q;
  46. }
  47. return abs(s[n] - cnt * 2);
  48. }
  49.  
  50. void solve( lli q )
  51. {
  52. lli l = 1, r = q, m;
  53. while( l < r ){
  54. m = (l + r) / 2;
  55. if( f(m, q) > f(m + 1, q) )
  56. l = m + 1;
  57. else
  58. r = m;
  59. }
  60. if( f(l, q) < ans ){
  61. ans = f(l, q);
  62. ans1 = l;
  63. ans2 = q;
  64. }
  65. }
  66.  
  67. int main()
  68. {
  69. freopen( "G.in", "r", stdin );
  70. freopen( "G.out", "w", stdout );
  71. cin >> n;
  72. for( lli i = 1; i <= n; i++ )
  73. cin >> a[i];
  74. sort( a + 1, a + n + 1, cmp );
  75. for( lli i = 1; i <= n; i++ ){
  76. s[i] = s[i - 1] + a[i];
  77. for( lli j = 1; j <= n; j += i )
  78. v[i].pb(j);
  79. }
  80. for( lli i = n + 1; i <= n + n; i++ )
  81. s[i] = s[i - 1];
  82. //cout << f(1, 2) << endl << f1(1, 2) << endl;
  83. //return 0;
  84. for( lli i = 1; i <= n; i++ )
  85. solve(i);
  86. //cout << f(1, 2) << " " << f(ans1, ans2) << endl;
  87. //cout << f1(1, 2) << " " << f1(ans1, ans2) << endl;
  88. cout << ans1 << " " << ans2 << endl;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement