제출 #1311300

#제출 시각아이디문제언어결과실행 시간메모리
1311300lizi14Arranging Shoes (IOI19_shoes)C++20
25 / 100
13 ms1964 KiB
#include <cassert> #include "shoes.h" #include <bits/stdc++.h> using namespace std; long long count_swaps(vector<int> s) { long long n=s.size()/2; if(n==1){ if(s[0]<0 && s[1]>0){ return 0; } else return 1; } long long cnt=0; for(int i=0; i<n; i++){ if(!(abs(s[i])==s[i+n] && s[i]<0)){ cnt=1; break; } } if(cnt==0){ return (n*(n-1)/2); } int c[2*n]; fill(c,c+2*n,0); if(n<=8){ int ans=0; for(int i=0; i<2*n-1; i++){ if(abs(s[i])==abs(s[i+1]) && c[i]==0 && c[i+1]==0){ if(s[i]<0 && s[i+1]>0){ c[i]=1; c[i+1]=1; } else if(s[i]>0 && s[i+1]<0){ ans++; swap(s[i],s[i+1]); c[i]=1; c[i+1]=1; } } } int p=-1; long long bati=1e18; for(int i=0; i<2*n; i++){ if(c[i]==0 && s[i]<0){ for(int j=0; j<2*n; j++){ if(c[j]==0 && s[j]>0 && s[j]==abs(s[i])){ if(bati>abs(j-i)){ p=j; bati=abs(j-i); } } } } for(int j=max(p,i); j>min(p,i); j--){ swap(s[j],s[j+1]); } ans+=bati; } return ans; } return 0; //return 1; }
#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...