Submission #1867519


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i,n) for(int (i)=0;(i)<(int)(n);++(i))
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define fi first
#define se second
#define dbg(x) cout<<#x" = "<<((x))<<endl
template<class T,class U> ostream& operator<<(ostream& o, const pair<T,U> &p){o<<"("<<p.fi<<","<<p.se<<")";return o;}
template<class T> ostream& operator<<(ostream& o, const vector<T> &v){o<<"[";for(T t:v){o<<t<<",";}o<<"]";return o;}

using vl = vector<ll>;

vl f(const vl &v)
{
    int n = v.size();
    vl r(v);

    r[n-1] -= n;
    rep(i,n-1) ++r[i];
    sort(all(r));
    return r;
}

bool valid(const vl &v)
{
    int n = v.size();
    return v[n-1]<n;
}

void test(const vl &V)
{
    vl v = V;

    int n = v.size();
    int ct = 0;
    while(!valid(v))
    {
        v = f(v);
        int D = v[n-1]-v[0];
        printf("%3d: diff: %3d ", ++ct, D);
        // if(D<n) break;
        dbg(v);
    }
}

ll solve(const vl &V)
{
    vl v = V;
    int n = v.size();

    ll ret = 0;

    for(int i=n-1; i>0; --i)
    {
        if(valid(v)) break;

        ll step = n-i;
        ll dec = i+1;

        ll x = (v[i]-v[i-1])/(step+dec);

        ret += step*x;
        rep(j,i) v[j] += x*step;
        for(int j=i; j<n; ++j) v[j] -= x*dec;
        sort(all(v));
    }

    if(!valid(v))
    {
        while(!valid(v) && v[n-1]-v[0]>=n)
        {
            ++ret;
            v = f(v);
        }

        ll y = v[n-1]-n;
        ret += y*n;
        rep(i,n) v[i] -= y;

        while(!valid(v))
        {
            ++ret;
            v = f(v);
        }
    }

    return ret;
}

int main()
{
    int n;
    cin >>n;
    vector<ll> a(n);
    rep(i,n) cin >>a[i];

    sort(all(a));

    // test(a);
    cout << solve(a) << endl;
    return 0;
}

Submission Info

Submission Time
Task E - Decrease (Judge ver.)
User imulan
Language C++14 (GCC 5.4.1)
Score 0
Code Size 1909 Byte
Status WA
Exec Time 2 ms
Memory 256 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 600
Status
AC × 5
AC × 17
WA × 18
Set Name Test Cases
Sample example0, example1, example2, example3, example4
All example0, example1, example2, example3, example4, maxrand0, maxrand1, maxrand2, maxrand3, maxrand4, maxrand5, maxrand6, maxrand7, maxrand8, maxrand9, rand0, rand1, rand2, rand3, rand4, rand5, rand6, rand7, rand8, rand9, small0, small1, small2, small3, small4, small5, small6, small7, small8, small9
Case Name Status Exec Time Memory
example0 AC 1 ms 256 KB
example1 AC 1 ms 256 KB
example2 AC 1 ms 256 KB
example3 AC 1 ms 256 KB
example4 AC 1 ms 256 KB
maxrand0 AC 1 ms 256 KB
maxrand1 WA 2 ms 256 KB
maxrand2 AC 1 ms 256 KB
maxrand3 WA 2 ms 256 KB
maxrand4 AC 1 ms 256 KB
maxrand5 WA 2 ms 256 KB
maxrand6 AC 1 ms 256 KB
maxrand7 WA 2 ms 256 KB
maxrand8 AC 1 ms 256 KB
maxrand9 WA 2 ms 256 KB
rand0 AC 1 ms 256 KB
rand1 AC 1 ms 256 KB
rand2 WA 1 ms 256 KB
rand3 WA 1 ms 256 KB
rand4 WA 1 ms 256 KB
rand5 AC 1 ms 256 KB
rand6 AC 1 ms 256 KB
rand7 WA 1 ms 256 KB
rand8 WA 1 ms 256 KB
rand9 WA 1 ms 256 KB
small0 WA 1 ms 256 KB
small1 AC 1 ms 256 KB
small2 WA 1 ms 256 KB
small3 AC 1 ms 256 KB
small4 WA 1 ms 256 KB
small5 WA 1 ms 256 KB
small6 WA 1 ms 256 KB
small7 WA 1 ms 256 KB
small8 WA 1 ms 256 KB
small9 AC 1 ms 256 KB