Submission #1311300

#TimeUsernameProblemLanguageResultExecution timeMemory
1311300lizi14Arranging Shoes (IOI19_shoes)C++20
25 / 100
13 ms1964 KiB
#include <cassert>
#include "shoes.h"
#include <bits/stdc++.h>
using namespace std;

long long count_swaps(vector<int> s) {
    long long n=s.size()/2;
    if(n==1){
        if(s[0]<0 && s[1]>0){
            return 0;
        }
        else return 1;
    }
    long long cnt=0;
   
    for(int i=0; i<n; i++){
        if(!(abs(s[i])==s[i+n] && s[i]<0)){
            cnt=1;
            break;
        }
    }
    if(cnt==0){
        return (n*(n-1)/2);
    }
    int c[2*n];
    fill(c,c+2*n,0);
    if(n<=8){
        int ans=0;
        for(int i=0; i<2*n-1; i++){
            if(abs(s[i])==abs(s[i+1]) && c[i]==0 && c[i+1]==0){
                if(s[i]<0 && s[i+1]>0){
                    c[i]=1;
                    c[i+1]=1;
                }
                else if(s[i]>0 && s[i+1]<0){
                    ans++;
                    swap(s[i],s[i+1]);
                    c[i]=1;
                    c[i+1]=1;
                }
            }
        }
        int p=-1;
        long long bati=1e18;
        for(int i=0;  i<2*n; i++){
            if(c[i]==0 && s[i]<0){
                for(int j=0; j<2*n; j++){
                    if(c[j]==0 && s[j]>0 && s[j]==abs(s[i])){
                        if(bati>abs(j-i)){
                            p=j;
                            bati=abs(j-i);
                        }
                        
                    }
                }
            }
            for(int j=max(p,i); j>min(p,i); j--){
                swap(s[j],s[j+1]);
            }
            ans+=bati;
        }
        return ans;
    }
    return 0;
	//return 1;
}
#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...