鹿島建設プログラミングコンテスト2020(AtCoder Regular Contest 110) F問題 - Esoswap

Source

鹿島建設プログラミングコンテスト2020(AtCoder Regular Contest 110)
問題文

問題概要

省略

解法

省略

cLayversion 20201206-1)のコード

C++に変換後のコードはこちら

int N, P[100], ind[100];
int ress, res[2d5];

void doit(int i){
  int k = (i + P[i]) % N;
  res[ress++] = i;
  swap(P[i], P[k]);
  ind[P[i]] = i;
  ind[P[k]] = k;
}

{
  int len;
  rd(N,P(N));
  rep(i,N) ind[P[i]] = i;

  len = 1;
  while(len < N-1){
    if(P[(ind[1]+len)%N] == 1+len) len++, continue;
    rep(i,len) doit(ind[i+1]);
  }

  for(;;){
    rep(i,N) if(P[i] != i) break;
    if(i==N) break;
    doit(ind[1]);
  }

  wtLn(ress,res(ress));
}

Current time: 2021年09月28日08時22分35秒
Last modified: 2020年12月06日02時30分37秒 (by laycrs)
Tags: Competitive_Programming_Incomplete AtCoder AtCoder_Regular_Contest ARC110 ARC_F
トップページに戻る

Logged in as: unknown user (not login)

ログイン: