chacoderのブログ

競技プログラミングそのほか

ABC150C-Count Order 精選16

考察

辞書順で出力するのにどうしようか悩みましたがnext_permutationがそもそも辞書順で次の順列を出力する関数なので心配無用でした。

配列の比較がシンプルにできるのに改めて気づきました。
最初は要素を1個ずつ比較することを考えていましたがA[n]とP[n]の比較はA==Bの判定一発でできるのですね。

ACしたコード

#include <bits/stdc++.h>
using namespace std;

int main(){
  int n;
  cin>>n;
  vector<int>A(n);
  vector<int>P(n);
  vector<int>Q(n);
    
  for(int i=0;i<n;i++){
    A[i]=i+1;
  }
  for(int i=0;i<n;i++){
    cin>>P[i];
  }
  for(int i=0;i<n;i++){
    cin>>Q[i];
  }  
  int cnt=1;
  for(int i=1;i<=n;i++){
    cnt*=i;
  }

  int countA=0;
  int countB=0;
  for(int i=0;i<cnt;i++){
    if(P==A){
      countA=i;
    }
    if(Q==A){
      countB=i;
    }
    next_permutation(A.begin(),A.end());
  }
  //cout<<countA<<" "<<countB<<endl;
  cout<<abs(countA-countB)<<endl;
  return 0;
}