Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define lli long long int
- #define fi first
- #define se second
- #define sc scanf
- #define pr printf
- #define pb push_back
- #define mp make_pair
- #define fin freopen( "input.txt", "r", stdin );
- #define fout freopen( "output.txt", "w", stdout );
- const int N = 200100;
- using namespace std;
- lli n, a[N], ans1, ans2;
- lli s[N], ans = 1e18;
- vector < lli > v[N];
- bool cmp( lli x, lli y )
- {
- return x > y;
- }
- lli f( lli p, lli q )
- {
- lli cnt = s[p];
- //cout << cnt << endl;
- for( lli i = 1; i < v[q].size(); i += 2 ){
- //cout << v[q][i] << " " << s[v[q][i] + q - 1] - s[v[q][i] + p - 1] << endl;
- cnt += s[v[q][i] + q + p - 1] - s[v[q][i] + p - 1];
- }
- //cout << cnt << endl;
- return abs(s[n] - cnt * 2);
- }
- lli f1( lli p, lli q )
- {
- lli cnt = s[p];
- lli l = p + q + 1;
- while( l <= n ){
- for( lli i = l; i < l + q; i++ )
- cnt += a[i];
- l += q + q;
- }
- return abs(s[n] - cnt * 2);
- }
- void solve( lli q )
- {
- lli l = 1, r = q, m;
- while( l < r ){
- m = (l + r) / 2;
- if( f(m, q) > f(m + 1, q) )
- l = m + 1;
- else
- r = m;
- }
- if( f(l, q) < ans ){
- ans = f(l, q);
- ans1 = l;
- ans2 = q;
- }
- }
- int main()
- {
- freopen( "G.in", "r", stdin );
- freopen( "G.out", "w", stdout );
- cin >> n;
- for( lli i = 1; i <= n; i++ )
- cin >> a[i];
- sort( a + 1, a + n + 1, cmp );
- for( lli i = 1; i <= n; i++ ){
- s[i] = s[i - 1] + a[i];
- for( lli j = 1; j <= n; j += i )
- v[i].pb(j);
- }
- for( lli i = n + 1; i <= n + n; i++ )
- s[i] = s[i - 1];
- //cout << f(1, 2) << endl << f1(1, 2) << endl;
- //return 0;
- for( lli i = 1; i <= n; i++ )
- solve(i);
- //cout << f(1, 2) << " " << f(ans1, ans2) << endl;
- //cout << f1(1, 2) << " " << f1(ans1, ans2) << endl;
- cout << ans1 << " " << ans2 << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement