Submission #1226892

#TimeUsernameProblemLanguageResultExecution timeMemory
1226892alexaaaArranging Shoes (IOI19_shoes)C++20
10 / 100
4 ms4936 KiB
#include<iostream> #include<vector> #include<algorithm> #include<set> using namespace std; set<int> wrong_pos; vector<vector<int>> positive(100001); vector<vector<int>> negative(100001); vector<pair<int,int>> invalids; void create_adj(vector<int> &S){ for(int i = 0; i < S.size(); i++){ if(i % 2 == 0 && S[i] < 0){ if(S[i+1] == abs(S[i])){ } else{ wrong_pos.insert(abs(S[i])); negative[abs(S[i])].push_back(i); invalids.push_back({i,negative[abs(S[i])].size()-1}); } } else if(i%2 == 0 && S[i] > 0){ wrong_pos.insert(abs(S[i])); positive[abs(S[i])].push_back(i); invalids.push_back({i,positive[abs(S[i])].size()-1}); } else if(i % 2 != 0 && S[i] > 0){ if(S[i-1] < 0 && abs(S[i-1]) == S[i]){ } else{ wrong_pos.insert(abs(S[i])); positive[abs(S[i])].push_back(i); invalids.push_back({i,positive[abs(S[i])].size()-1}); } } else if(i % 2 != 0 && S[i] < 0){ wrong_pos.insert(abs(S[i])); negative[abs(S[i])].push_back(i); invalids.push_back({i,negative[abs(S[i])].size()-1}); } } } long long count_swaps(vector<int> S){ create_adj(S); long long swaps = 0; long long calculation; for(auto err:wrong_pos){ for(int i = 0; i < negative[err].size(); i ++){ if(positive[err][i] < negative[err][i]){ calculation = abs(positive[err][i]-negative[err][i]); swaps += calculation ; for(int j = positive[err][i]+1; j < negative[err][i]; j++){ int index = invalids[j].first; int num = S[index]; if(num < 0){ negative[abs(num)][invalids[j].second] --; } else{ positive[num][invalids[j].second] --; } } } else{ calculation = (abs(positive[err][i]-negative[err][i])-1); if(calculation == 0){ continue; } swaps += calculation ; for(int j = positive[err][i]-1; j > negative[err][i]; j--){ int index = invalids[j].first; int num = S[index]; if(num < 0){ negative[abs(num)][invalids[j].second] ++; } else{ positive[num][invalids[j].second] ++; } } } } } return swaps; }
#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...