Submission #1327226

#TimeUsernameProblemLanguageResultExecution timeMemory
1327226nicolo_010Arranging Shoes (IOI19_shoes)C++20
50 / 100
1095 ms2716 KiB
#include <bits/stdc++.h>
#include "shoes.h"
using namespace std;
using ll = long long;
using pii = pair<int, int>;

bool check(vector<int> s) {
	int n = s.size();
	for (int i=0; i<n; i+=2) {
		if (s[i]<0 && s[i+1]>0 && abs(s[i]) == s[i+1]) continue;
		else return false;
	}
	return true;
}

long long count_swaps(vector<int> s) {
	int n = s.size()/2;
	ll ans=0;
	while (1) {
		if (check(s)) break;
		int ordered = 2*n-1;
		for (int i=2*n-2; i>=0; i-=2) {
			//cout << i << " " << s[i] << " " << s[i+1] << endl;
			if (s[i]<0 && s[i+1]>0 && abs(s[i]) == s[i+1]) {
				ordered = i-1;
			}
			else break;
		}
		//cout << ordered << endl;
		if (ordered <= 0) break;
		int val = s[ordered];
		int idx=ordered-1;
		for (int i=ordered-1; i>=0; i--)  {
			if (abs(s[i]) == abs(val)) {
				if ((s[i]>0 && val<0) || (s[i]<0 && val>0)) {
					idx = i;
					break;
				}
			}
		}
		int vall = s[idx];
		s.erase(s.begin()+idx);
		if (val<0) {
			s.insert(s.begin()+ordered, vall);
			ans += ordered-idx;
		}
		else {
			s.insert(s.begin()+ordered-1, vall);
			ans += (ordered-1)-idx;
		}
	}
	return ans;
}
//3
//-2 2 2 -2 -2 2

#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...