제출 #896174

#제출 시각아이디문제언어결과실행 시간메모리
896174svazArranging Shoes (IOI19_shoes)C++14
50 / 100
1098 ms142552 KiB
#include "shoes.h" #include<iostream> #include<vector> #include<deque> #include<map> using namespace std; long long count_swaps(std::vector<int> S){ map < int , pair < deque<pair<int,int> >,deque<pair<int,int> > > > alm; int tam=S.size(); vector<bool> visitados(tam,false); for(int i=0;i<tam;i++) { int absol=abs(S[i]); if(S[i]<0) ((alm[absol]).first).push_back(make_pair(i,i)); /// los izquierdos al primero else ((alm[absol]).second).push_back(make_pair(i,i));/// los derechos al segundo } // cout<<"siii"<<endl; int ans=0,empares=0; for(int i=0;i<tam;i++){ // cout<<"vuelta "<<i+1<<endl; int p_izq,p_der,dif,p_mov; if(! visitados[i]){///si no esta emparejado empares++; // cout<<"no esta emparejado"<<endl; int absol=abs(S[i]); // cout<<"el tipo de zapato es el "<<absol<<endl; p_izq=(((alm[absol]).first).front()).second; // cout<<"el zapato izquierdo esta en "<<p_izq<<endl; p_der=(((alm[absol]).second).front()).second; // cout<<"el zapato derecho esta en "<<p_der<<endl; dif=abs(p_der-p_izq); if(S[i]<0)dif--; // cout<<"la distancia para acomodar el zapato es de "<<dif<<endl; ans+=dif; int p_afec; // cout<<"hasta el momento hemos hecho "<<ans<<" cambios en total"<<endl; if(S[i]<0){ p_mov=p_der; p_afec=(((alm[absol]).second).front()).first; } else{ p_mov=p_izq; p_afec=(((alm[absol]).first).front()).first; } visitados[i] = visitados[p_afec] = true; // cout<<"posicion del no movido: "<<i<<endl; // cout<<"posicion del movido: "<<p_mov<<endl; map < int , pair < deque< pair<int,int> >, deque< pair<int,int> > > >::iterator it; for(it=alm.begin();it!=alm.end();it++){ int tamp=((it->second).first).size(); for(int x=0;x<tamp;x++){ int posi=(((it->second).first)[x]).second; int posi2=(((it->second).second)[x]).second; if(posi<p_mov)(((it->second).first)[x]).second++; if(posi2<p_mov)(((it->second).second)[x]).second++; } } ((alm[abs(S[i])]).first).pop_front(); ((alm[abs(S[i])]).second).pop_front(); } if(empares==tam/2)break; } return ans; } /*int main(){ cin.tie(NULL); int n,zap; cin>>n; vector<int>zapatos; for(int i=0;i<(n*2);i++){ cin>>zap; zapatos.push_back(zap); } cout<<count_swaps(zapatos)<<"\n"; ios_base::sync_with_stdio(false); return 0; }*/
#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...