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

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
するだけで使えるようになっているので紹介しました。これを使えば、コードをコピペせずに提出することが可能です。