プログラミング
記事内に商品プロモーションを含む場合があります

Python版のAtCoder Library(ACL)をAtCoderで使う方法

Aru

AtCoderのジャッジがPython版のac-library-pythonに対応していることに気づいたので、使い方をチェックしてみました。コピペを省略できるのでかなり楽です。

はじめに

ac-library-pythonは、AtCoder Library(ACL)のPython版です。ACLはC++向けのライブラリで、AtCoderで使う基本アルゴリズムが網羅されています。

これを使うとC++と同じように、典型的なアルゴリズムをライブラリを読み込むだけで使うことができます。

AtCoderのジャッジ(Python/PyPy共に利用可能)環境にインストールされているので、importで読み込むだけでライブラリを利用できます。

PythonのACL: https://github.com/not522/ac-library-python

公式のACL(C++): https://github.com/atcoder/ac-library

使い方

インポート方法

以下のような形でインポートできます。

from atcoder import xxx

ライブラリの中身を確認

AtCoderのコードテストで以下のコードを実行して、ライブラリの中身をチェックしてみました。Pythonの場合help関数などを使うことで、ライブラリをチェック可能です。

import atcoder
help(atcoder)

実行結果から、ac-library-pythonがちゃんとインポートされていることが確認できます。ということで、Python版のACLを普通に呼び出すことができるようです。

実行結果
Help on package atcoder:

NAME
    atcoder - # Python port of AtCoder Library.

PACKAGE CONTENTS
    __main__
    _bit
    _math
    _scc
    convolution
    dsu
    fenwicktree
    lazysegtree
    math
    maxflow
    mincostflow
    modint
    scc
    segtree
    string
    twosat

VERSION
    0.0.1

FILE
    /home/runner/.local/lib/python3.11/site-packages/atcoder/__init__.py

実際に試してみる

実際にAtCoder Library Practice Contestの問題で試してみます。使い方は本家に近いですが、Pythonならではの違いもあります。これについては使いながら覚えていく感じかと思います。

アルゴリズムを理解するのも兼ねて、コードを読むと良いと思います。また、C++ですが公式のドキュメントも参考になります。

A問題

DSUを使う問題です

from atcoder import dsu

N, Q = map(int, input().split())

uf = dsu.DSU(N)

for _ in range(Q):
    t, u, v = map(int, input().split())
    if t == 0 :
        uf.merge(u, v)
    else :
        if uf.same(u, v):
            print("1")
        else:
            print("0")

B問題

Fenwick Tree(BIT)を使う問題です

import atcoder.fenwicktree as ft

N, Q = map(int, input().split())

bit = ft.FenwickTree(N)
for i, v in enumerate(list(map(int, input().split()))):
    bit.add(i, v)


for _ in range(Q):
    t, x, y = map(int, input().split())
    if t == 0 :
        bit.add(x, y)
    else :
        print(bit.sum(x, y))

C問題

FloorSumを使う問題です

from atcoder import math

T=int(input())
for _ in range(T):
  N,M,A,B=map(int,input().split())
  print(math.floor_sum(N,M,A,B))

上記のような感じでACLのアルゴリズムを読み込み、使うことが可能です。他のアルゴリズムの使い方については、AtCoder Library Practice Contestの提出結果から検索すればある程度わかると思いますので他については省略します。

まとめ

AtCoder LibraryのPython版が、importするだけで使えるようになっているので紹介しました。これを使えば、コードをコピペせずに提出することが可能です。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
ある/Aru
ある/Aru
IT&機械学習エンジニア/ファイナンシャルプランナー(CFP®)
専門分野は並列処理・画像処理・機械学習・ディープラーニング。プログラミング言語はC, C++, Go, Pythonを中心として色々利用。現在は、Kaggle, 競プロなどをしながら悠々自適に活動中
記事URLをコピーしました