제출 #891430

#제출 시각아이디문제언어결과실행 시간메모리
891430Muhammad_AneeqArranging Shoes (IOI19_shoes)C++17
25 / 100
45 ms9344 KiB
#include <set>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
vector<long long>a;
long long n;
long long solve1()
{
  vector<long long>neg,pos;
  for (long long i=0;i<2*n;i++)
  {
    if (a[i]>0)
      pos.push_back(i);
    else
      neg.push_back(i);
  }
  reverse(begin(pos),end(pos));
  reverse(begin(neg),end(neg));
  vector<long long>cur;
  long long ans=0;
  for (long long i=0;i<2*n;i++)
  {
    if (i%2==0)
    {
      long long z=lower_bound(begin(cur),end(cur),neg.back())-begin(cur);
      ans+=abs((long long)(neg.back()+cur.size()-z-i));
      cur.push_back(neg.back());
      neg.pop_back();
    }
    else
    {
      long long z=lower_bound(begin(cur),end(cur),pos.back())-begin(cur);
      ans+=abs((long long)(pos.back()+cur.size()-z-i));
      cur.push_back(pos.back());
      pos.pop_back();
    }
  }
  return ans;
}
long long count_swaps(vector<int>s)
{
  set<long long>g;
  n=s.size()/2;
  a={begin(s),end(s)};
  for (auto i:s)
  {
    if (i>0)
      g.insert(i);
  }
  if (g.size()==1)
    return solve1();
  bool w=0;
  for (long long i=0;i<n;i++)
  {
    if (s[i]!=-s[i+n])
      w=1;
  }
  if (w==0)
  {
    return (n*(n-1))/2;
  } 
  map<long long,long long>d;
  for (long long i=0;i<2*n;i++)
    d[a[i]]=i;
  vector<long long>x={begin(g),end(g)};
  long long ans=1e15+10;
  do
  {
    vector<long long>cur;
    long long f=0;
    for (long long i=0;i<n;i++)
    {
      long long z=lower_bound(begin(cur),end(cur),d[-x[i]])-begin(cur);
      f+=abs((long long)(d[-x[i]]+cur.size()-z-2*i));
      cur.push_back(d[-x[i]]);
      z=lower_bound(begin(cur),end(cur),d[x[i]])-begin(cur);
      f+=abs((long long)(d[x[i]]+cur.size()-z-2*i-1));
      cur.push_back(d[x[i]]);    }
    ans=min(ans,f);
  }
  while (next_permutation(begin(x),end(x)));
  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...