Submission #914000

#TimeUsernameProblemLanguageResultExecution timeMemory
914000ace5Coin Collecting (JOI19_ho_t4)C++17
100 / 100
38 ms6484 KiB
#include <bits/stdc++.h>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n;
    cin >> n;
    int64_t top[n],bot[n];
    for(int i = 0;i < n;++i)
    {
        top[i] = 0;
        bot[i] = 0;
    }
    int64_t ans = 0;
    for(int i = 0;i < 2*n;++i)
    {
        int x,y;
        cin >> x >> y;
        int ind = 0;
        if(x <= 1)
            ind = 0;
        else if(x >= n)
            ind = n-1;
        else
            ind = x-1;
        ans += abs(x-(ind+1));
        if(y >= 2)
        {
            top[ind]++;
            ans += abs(y-2);
        }
        else
        {
            bot[ind]++;
            ans += abs(y-1);
        }
    }
   // cout << ans << ' ';
    int64_t f = 0,s = 0;
    for(int i = 0;i < n;++i)
    {
       // cout << top[i] << ' ' << bot[i] << ' ' << f << ' ' << s << "\n";
        if(f < i+1)
        {
            int64_t gl = min(i+1-f,top[i]);
            ans += (i-f)*gl -(gl-1)*gl/2;
            f += gl;
            top[i] -= gl;
        }
        if(s < i+1)
        {
            int64_t gl = min(i+1-s,bot[i]);
            ans += (i-s)*gl -(gl-1)*gl/2;
            s += gl;
            bot[i] -= gl;
        }
       // cout << top[i] << ' ' << bot[i] << ' ' << f << ' ' << s << "\n";
        if(bot[i] && top[i])
        {
            ans += bot[i] + top[i];
            bot[i+1] += bot[i];
            top[i+1] += top[i];
        }
        else if(top[i] && !bot[i])
        {
            int64_t gl = min(i+1-s,top[i]);
            ans += (i-s)*gl -(gl-1)*gl/2;
            s += gl;
            ans += gl;
            top[i] -= gl;
            ans += top[i];
            top[i+1] += top[i];
        }
        else if(!top[i] && bot[i])
        {
            int64_t gl = min(i+1-f,bot[i]);
            ans += (i-f)*gl -(gl-1)*gl/2;
            f += gl;
            ans += gl;
            bot[i] -= gl;
            ans += bot[i];
            bot[i+1] += bot[i];
        }
       // cout << ans << "\n";
    }
    cout << ans << "\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...