Submission #427016

#TimeUsernameProblemLanguageResultExecution timeMemory
427016dreezyArranging Shoes (IOI19_shoes)C++17
10 / 100
1091 ms3492 KiB
#include "shoes.h"
#include <bits/stdc++.h>

using namespace std;
#define ll long long
#define pb push_back
//n = 1 its either 1 or 0
//n = 8 we can brutazo
//all shoes are same, we just need to get all inversion (even is left, odd is right)
//all shoes need to travel n?

//eta ~ 25 minutes

/*full solutions*/
//O(N^2) 
/*
dp[n][i]
//min swaps at position i after considering n pairs? 

*/

/*SUBTASK 1, 3, 4*/

/*
long long count_swaps(vector<int> s) {
	
	ll ans = 0;
	int n = s.size();
	int first = 0;
	for(int i =0; i<n; i++){
		if(s[i] < 0){
			ans += abs(i - first);
			first +=2;
		}
	}
	return ans;
}
*/

/*SUBTASK 2*/
//something is wrong, ill come back to it later
//i need to think more
long long count_swaps(vector<int> s) {
	
	ll ans = 1e18;
	int n = s.size();
	vector<int> lefts(n/2);
	int cntleft = 0;
	for(int i =0; i<n; i++){
		if(s[i] < 0){
			lefts[cntleft++] = i;
		}
	}
	
	do{
		
		ll posans = 0;
		vector<bool> available(n, 1);
	
		//for(int i =0; i<n/ 2; i++) cout << lefts[i]<<", "; cout <<endl;
		
		for(int l =0; l<n/2; l++){
			//get first availabe
			int firstright =-1;
			for(int i =0; i<n ;i++){
				if(available[i] and s[i] == -s[lefts[l]]){
					firstright = i;
					available[i] = false;
					break;
				}
			}
			int lt = max(lefts[l], 2 * l);
			ll dist1 = abs(lt - 2 * l);
			
			int rt = firstright;
			
			if(rt < lefts[l]){
				rt +=lefts[l] - firstright;
			} 
			ll dist2 = abs(rt -( 2 * l + 1));
			//cout << lt<<", "<<rt<<": ";
			
			//cout << lefts[l]<<", "<<firstright<<": "<<dist1<<", "<<dist2<<endl;
			posans += dist1 + dist2;
		}
		
		ans = min(ans, posans);
		
		//cout << posans<<endl<<endl;
		
	}while(next_permutation(lefts.begin(), lefts.end()));
	
	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...