寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

AtCoder Problems in C++ #D - カードの並び替え

第6回日本情報オリンピック 予選(過去問)から、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
競技プログラミング」を略して、「競プロ」などと呼ばれています。

#D - カードの並び替え

atcoder.jp

僕が作成、提出したコードは、以下のとおりです。

/*
AtCoder Problems in C++
#D - カードの並び替え
https://atcoder.jp/contests/joi2007yo/tasks/joi2007yo_d
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
int main(void){
  int n,m;
  cin>>n>>m;
  vector<int> c(n*2),c2(n*2);
  for(int i=0;i<n*2;i++){
    c[i]=i+1;
  }
  for(int i=0;i<m;i++){
    int k;
    cin>>k;
    if(k==0){
      for(int j=0;j<n;j++){
        c2[j*2]=c[j];
        c2[j*2+1]=c[j+n];
      }
      for(int j=0;j<n*2;j++){
        c[j]=c2[j];
      }
    }else{
      for(int j=0;j<k;j++){
        c2[2*n-k+j]=c[j];
      }
      for(int j=k;j<n*2;j++){
        c2[j-k]=c[j];
      }
      for(int j=0;j<n*2;j++){
        c[j]=c2[j];
      }
    }
  }
  for(int i=0;i<n*2;i++){
    cout<<c[i]<<endl;
  }
  return 0;
}