Submission #1343714

#TimeUsernameProblemLanguageResultExecution timeMemory
1343714ElyesChaabouniArranging Shoes (IOI19_shoes)C++20
10 / 100
1095 ms1960 KiB
#include <bits/stdc++.h>
#include "shoes.h"
#define ll long long
#define endl "\n"
using namespace std;

long long count_swaps(vector<int> s){
	int N = s.size()/2;
	ll res = 0;
	
	auto make_swap= [&](int l,int r){
		assert(l<=r);
		while(l<r){
			swap(s[r],s[r-1]);
			r--;
		}
	};

	for(int i=0;i<2*N;i+=2){
		if(s[i]>0&&s[i+1]<0){
			res++;
			swap(s[i],s[i+1]);
		}
		if(abs(s[i])==abs(s[i+1])&&s[i]<s[i+1])
			continue;

		if(s[i]<0){
			int idx = -1;
			for(int j=i+1;j<2*N;j++){
				if(s[j]==abs(s[i])){
					idx=j;
					break;
				}
			}
			assert(idx!=-1);
			res += idx-i-1;
			make_swap(i+1,idx);
		}
		else if(s[i+1]>0){
			int idx=-1;
			for(int j=i+2;j<2*N;j++){
				if(s[j]==-abs(s[i+1])){
					idx=j;
					break;
				}
			}
			assert(idx!=-1);
			res += idx-i+1;
			make_swap(i,idx);
			assert(i+2<2*N);
			swap(s[i+2],s[i+1]);
		}
	}

	return res;
}
#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...