Time Limit: 2 sec / Memory Limit: 1024 MB
第 1 章について
第 1 章では、プログラムの基本的な文法について説明します。
第 1 章をマスターすれば、理論上は全ての「計算処理」を行うプログラムを書ける程の知識が身につきます。
APG4bPython の取り組み方
プログラミングの勉強では手を動かすことが重要です。練習問題はできるだけ解くようにしましょう。
ただし、「説明文中のプログラムを何も考えずに写す」というのは時間の無駄にしかならないことが多いです。
用意されているプログラムを動かすときはコピー&ペーストを使いましょう。
Python の特徴と選ぶ理由
競技プログラミングを始めるにあたって、どの言語を使うかで悩む方も多いと思います。 AtCoder では言語選択は恒久的なものではなく、問題ごとに柔軟に使い分けることもできますが、多くの参加者はほとんどの問題でひとつのメイン言語を使い続けていることも事実です。
このページを見ている方は、多少なりとも Python で競技プログラミングを始めようか検討されていることと思います。以下では、メイン言語として Python を選ぶメリット・デメリットを紹介します。
Python を使うメリット
文法が直感的
トップページでも書きましたが、 Python は文法が直感的でコードが書きやすく可読性が高いと言われています。競技プログラミングでは良い解法を思いついても、時間内にコードに書き出せないと得点が得られません。また 1 分 1 秒でも早く正解した方が有利になります。このため、書きやすいという特徴は有利に働きやすいと言えます1。
多倍長整数
Python では多倍長整数が標準機能で簡単に扱えるため、問題によっては大きなアドバンテージになります。通常は煩雑な考察をすることを想定された問題でも、多倍長整数を使うことで、解法やコードが簡潔になることがあります。
Python を使うデメリット
実行速度
Python はインタプリタ言語であり、 C++ のようなコンパイル言語と比べるとどうしても実行速度が遅くなる傾向があります。
直近の AtCoder のコンテストでは、超上級者向けの問題の一部を除いて、コンテストで出題される問題のほとんどは Python (後述の CPython または PyPy)でも実行時間制限内に無理なく通すことができます。このため、解法は合ってるのに Python だから通せないということはほとんどありません。
もちろん、想定解よりも遅い解法を使う場合や Python が得意でない書き方をする場合などでは TLE (実行時間制限超過)になる可能性はあります。本プログラムでは、 Python を使う場合に TLE に引っかからないために気を付ける点についてもなるべく触れていく予定です(主に 2 章以降になる予定です)。
CPython と PyPy
AtCoder では、 Python コードの実行環境として CPython と PyPy が用意されています。 CPython と PyPy はいずれも Python の実行環境で、多くの場合は全く同じコードで全く同じアウトプットを返しますが、一部挙動が異なる場合があります。それぞれの特徴は以下の通りです。
- CPython は Python の公式の実装です。
- PyPy は JIT(Just-In-Time)コンパイル機能を持っています。 JIT コンパイルにより実行時にコードを機械語に変換することで、 CPython に比べて高速になることが多いです。
AtCoder における競技プログラミングでは、一部の例外を除き、基本的には PyPy で提出する方が実行時間制限の関係で有利になることが多いです。
問題
提出練習
プログラミングの文法の説明に入る前に、自動採点システム(ジャッジ) 2 の使い方を確認しましょう。ジャッジへの提出フォームは、このページの一番下にあります。
提出言語の選択
CPython で提出する場合は "Python (CPython 3.11.4)" を、 PyPy で提出する場合は "Python (PyPy 3.10-v7.3.12)" を選択しましょう。「言語」欄を押して出てくるボックスに言語名の一部("py" など)を入力すると探しやすくなります。 3
ソースコード
「ソースコード」欄にはプログラムのソースコードを入力します。
ここでは、次のプログラムをコピー&ペーストしてみましょう。
コピー&ペーストの仕方:
↓の右上にある「Copy」ボタンをクリック→「ソースコード」のテキストを入力する場所で右クリック→「貼り付け」をクリック
print("Hello, world!")
提出・結果確認
言語選択とソースコードの入力ができたら、「提出」ボタンを押してください。
ページが切り替わり、WJ と表示されているところが AC に変われば提出成功です。
- WA や RE と表示されてしまった場合、正しくコピー&ペーストできているか確認し、再提出してください。
- CE と表示されてしまった場合、「言語」が正しく選択されているか確認してください。 "Python (CPython 3.11.4)" または "Python (PyPy 3.10-v7.3.12)" が選択されているかどうか確認し、再提出してください。
CPython と PyPy の一方で AC が得られたら、もう片方でも提出してみましょう。全く同じコードで AC が得られることが確認できると思います。
コードテスト
ジャッジは、出力結果が正しいかどうかを判定してくれますが、思い通りの結果が得られない場合など、自分のコードがどのような出力をしているのか確認したいこともあると思います。「コードテスト」を使うとプログラムがどのような出力をしているか確認することができます。コードテストはページ上部のリンクから飛ぶことができます。
コードテストの使い方は、上で説明したジャッジの使い方に似ていますが、下記のとおりです。
- 提出言語を選択する
- ソースコードを記載する
- 「標準入力」欄に入力(後述)を記載する
- 実行ボタンを押す
「入力」については 1.05. 節で扱います。このページの Hello, world!
を出力するような例では入力はありませんので、「標準入力」欄は空欄で構いません。