제출 #730613

#제출 시각아이디문제언어결과실행 시간메모리
730613danikoynovArranging Shoes (IOI19_shoes)C++14
85 / 100
28 ms1876 KiB
#include "shoes.h"
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;

long long count_swaps(vector<int> s)
{
    int n = s.size() / 2;
    if (n <= 1000)
    {
        ll ans = 0;
        for (int i = 0; i < 2 * n; i += 2)
        {

            int pt = i + 1;
            while(s[i] != -s[pt])
                pt ++;
            ///cout << i << " " << pt << endl;
            ans = (ans + (ll)(pt - i - 1));
            for (int k = pt - 1; k >= i + 1; k --)
                swap(s[k], s[k + 1]);
            if (s[i] > 0)
                ans ++;
        }
        return ans;
    }
    if (n == 1)
    {
        if (s[0] > 0)
            return 1;
        return 0;
    }
    int pt0 = 0, pt1 = 0;
    while(pt0 < 2 * n && s[pt0] > 0)
        pt0 ++;
    while(pt1 < 2 * n && s[pt1] < 0)
        pt1 ++;
    ll ans = 0;
    for (int i = 0; i < 2 * n; i ++)
    {
        ///cout << i << " " << pt0 << " " << pt1 << endl;
        if (i % 2 == 0)
        {
            if (pt0 == i)
            {
                pt0 ++;

            }
            else
            {
                ans = ans + (ll)(pt0 - i);
                swap(s[pt0], s[i]);
                pt1 ++;
            }
        }
        else
        {
            if (pt1 == i)
            {
                pt1 ++;
            }
            else
            {
                pt0 ++;
                ans = ans + (ll)(pt1 - i);
                swap(s[pt1], s[i]);
            }
        }

        while(pt0 < 2 * n && s[pt0] > 0)
            pt0 ++;
        while(pt1 < 2 * n && s[pt1] < 0)
            pt1 ++;
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...