くろたんく雑記帳

日常とか、わんちゃんとか、機械学習とか、競プロとか、

MENU

Python3で解く AtCoder Beginner Contest 150 C - Count Order

順列の全探索をすればいい。

目次

概要

問題

  • {\displaystyle n}を与えられる。
  • {\displaystyle (1, 2, 3, ... n-1, n)}の順列のリストを考える。({\displaystyle l}とする)
  • ある順列{\displaystyle p}{\displaystyle q}を与えるので、{\displaystyle l}を辞書順に並べた時に{\displaystyle p}{\displaystyle q}が何番目かを{\displaystyle a}{\displaystyle b}とする。
  • {\displaystyle |a - b|}は?

解くときに考えた内容

  1. permutationsで全部リストあげて
  2. ソートして(ソートされているから必要ないかも)
  3. {\displaystyle n \leqq 8}だから{\displaystyle 1 \times 2 \times ... 7 \times 8 = 40320}と大して大きくない。
  4. そのままforで回して{\displaystyle p}{\displaystyle q}が何番目か調べて、差の絶対値を計算する。

コード

from itertools import permutations

n = int(input())
p = tuple([int(x) for x in input().split()])
q = tuple([int(x) for x in input().split()])
L = sorted(list(permutations(list(range(1, n+1)), n)))
for idx, l in enumerate(L):
    if l == p:
        P = idx
    if l == q:
        Q = idx
ans = abs(Q - P)
print(ans)

書籍

最近買って面白かった本
アルゴリズムの参考書籍
  • 問題解決力を鍛える!アルゴリズムとデータ構造
    けんちょんさんこと、大槻さんの書籍である、「問題解決力を鍛える!アルゴリズムとデータ構造」 ご本人の記事の中で難易度は、螺旋本ということで初学者でも結構読みやすいのではないかと期待。(というのもけんちょんさんの記事はC++に疎い自分でも、その思考プロセスを学べるくらい丁寧に書かれているので)
    もうすぐ手元にくるので楽しみである。

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)

  • 作者:大槻 兼資
  • 発売日: 2020/10/02
  • メディア: 単行本(ソフトカバー)

drken1215.hatenablog.com

いわゆる、螺旋本。Aizu Online Judgeの問題を題材に解説されている。自分としては、 Aizu Online Judgeは最近はβ版運用中で、構成がアルゴリズムの項目ごとに問題がタグ付けされているようなイメージで、ここら辺弱いから集中的にやってみようっていう感じでできるので、いいと思っている。(AtCoderもそんな感じのリスト作って欲しい) ただ、この書籍はC++で書かれているのでPythonでやる場合はあくまでもその過程の考え方を参考にし自分で実装する必要がある。(AOJも解いているので、記事にしていこうかなぁ)