AtCoder Problems User Guide

問題を探す

問題は以下の基準で検索することができます。

  1. AC/非ACで絞り込み
  2. AtCoder公式の点数で絞り込み
  3. 独自に算出したDifficultyで絞り込み
  4. 問題タイトル・コンテスト名・FAユーザー・最短ユーザー・最速ユーザー・etcで検索

問題の探し方

  1. ページ左上のUser IDに自分のAtCoder IDを入力し、ページ上部のListを選択します。
  2. Problem Listの下にある項目をそれぞれ選ぶことで、AC/非AC、AtCoder公式の点数、Difficultyを基準に問題を絞り込むことができます。
  3. 問題の名前が分かる場合や、Fastest(実行時間が最短) Shortest(コード長が最短)、First(提出時間が最も速い)ユーザーを基準に検索する場合は、右側にあるSearchに問題名やユーザー名を入力することで検索できます。

進捗確認

Userタブから確認することができます。

Achievement

AC数(今までに正解した問題数)、Rated Point Sum(正解した問題のうちRatedの問題の合計点数)、Current Streak(今まで解いていない問題を新たに解き続けた日数)などを数値で確認できます。

AtCoder Pie Charts

全体の出題数のうち、AC、Non-AC(提出したがACしていないもの)、NoSub(提出していないもの)の割合を円グラフで確認できます。

Difficulty Pies

各Difficultyごと(灰色、茶色、緑色、......)にAC、Non-AC(提出したがACしていないもの)、NoSub(提出していないもの)の割合を円グラフで確認できます。

Category Pies

コンテストの種別ごとにAC、Non-AC(提出したがACしていないもの)、NoSub(提出していないもの)の割合を円グラフで確認できます。

Progress Charts

Daily Effort

一日ごとのAC数を確認できます。

Climbing

今までの累計AC数をDifficultyで色分けされた状態で確認できます。

Heatmap

GitHubのコントリビューションと同じ形式で一日ごとのAC数を確認できます。 All Submissions、 All AC、 Unique AC(初めてACした問題)、Max Difficulty(その日ACした問題のDifficultyの最大値)に分かれています。

Submissions

今までに提出したコードの正解状況や言語の一覧を確認できます。

Languages

提出言語ごとにAC数、Longest Streak、Current Streak、Last AC(最後にACした日付)を確認できます。

Trophy

特定の実績を達成するとTrophyをもらえます。どのような名前のTrophyをもらえるかは、達成してからのお楽しみです。

All

全ての項目を1つのページで確認できます。

レコメンド

自身の現在のレーティングを基に、自動的にお勧めの問題を表示する機能です。 UserページのRecommendationタブから確認することができます。 Easy/Moderate/Difficultの3つから問題の難易度を選ぶことができます。

また、過去に一度でも正解した問題や、最近正解した問題を推薦から除外することもできます。

詳細な説明

  • Easyは80%、Moderateは50%、Difficultは20%の確率で解ける難易度の問題となっています。
  • Exclude ~~~は、レコメンドから除外する問題の種類を選ぶものです。
  • Don't exclude solved problemsを選んだ場合、全ての問題がレコメンド対象となります。
  • 右側にある数字は、画面上に表示するレコメンドの数を選択するものです。
  • 問題タイトルの左にあるチェックボックスで問題を選択すると、選択した問題でバーチャルコンテストを作ることができます。

バーチャルコンテスト

バーチャルコンテストは、解きたい問題と制限時間を自由に選んで参加できる仮想のコンテストです。

参加のための下準備

まず、右上の Login からGitHubアカウントでログインします。(GitHubアカウントを持っていない場合は、作成してください。) その後、 AtCoder ID を入力して保存します。

バーチャルコンテストを作る

  1. 右上のVirtual Contestsをクリックすると、バーチャルコンテストのページが開きます。
  2. Create New Contestをクリックすると、コンテスト作成ページに飛びます。
  3. ページ内の表記に従って日時や問題を指定し、最後にCreate Contestをクリックすると、コンテスト作成は完了です。
  • バーチャルコンテスト作成のヒント
    • Bacha Gacha
      • Difficultyの範囲を指定すると問題をランダムに選んでくれる機能です。
      • Expected Participantsに参加者のAtCoder IDを入力してExclude ~~~を指定すると、参加者が解いたことのある問題を除外できます。公平性を保ちたい場合にお勧めです。
    • Mode
      • Normal, Lockout, Trainingの3種類があります。
      • Normalは通常モードです。参加者は、合計得点とペナルティによって順位付けされます。
      • Lockoutでは、各問題で最初に正解した人のみが得点を得られます。
      • Trainingでは、順位表の表示が簡略化されます。問題数が多い場合にお勧めのモードです。参加者は、正解した問題の総数、次に最後に正解した提出の時間によって順位付けされます。

バーチャルコンテストに参加する

  1. 右上のVirtual Contestsをクリックすると、バーチャルコンテストのページが開きます。 Running ContestsやUpcoming Contestsから、参加したいコンテストを選びます。Joinをクリックすると、参加登録は完了です。
  2. 時間になると問題が表示されます。
  3. AtCoder上でACとなってから数分経つと、バーチャルコンテストの順位表でも正解状況が更新されます。

トレーニングモード

初心者向けの問題が300問用意されています。 左上のTrainingから開くことができます。Challengeをクリックすると問題が表示されます。

その他

用語解説

  • Difficulty

    • 現在の内部レーティング(補正されていないレーティング)がこの値の人がコンテストでその問題を見たら50%の確率で解けると考えられる値です。
    • 推定難易度の横に試験管の絵文字(🧪)がついている問題があります。これは公式のレーティングシステムが導入される以前の問題に対して、やや強引な手法で難易度を推定したものです。
    • DifficultyがXの問題は「レーティングがXの人の半分が解ける問題」という意味で「レーティングXの人全員が解ける問題」という意味ではありません。
  • Streak

    • 今まで解いていない問題を新たに解き続けた日数です。
    • Longest StreakはJST、Current StreakはLocal Timeに基づいて集計されます。
    • 今までに解いたことのある問題を再び解いても、Streakのカウントが増えることはありません。

参考資料

ユーザーガイドを作るにあたって以下のwebページを参考にさせていただきました。

  1. https://ntk-ta01.hatenablog.com/entry/2020/04/15/001405
  2. https://trap.jp/post/992/
  3. https://pepsin-amylase.hatenablog.com/entry/atcoder-problems-difficulty

問題リスト作成

自分だけの問題リストを作って、復習等に使うことができます。

使い方

  1. 右上の Login からログイン後に AtCoder ID を入力して保存します。
  2. ログイン後のメニューに My Lists タブが出てくるので、Create New Listを押して編集画面に入ります。
  3. Addを押すと、Search here to add problems と出てくるので、リストに入れたい問題のタイトルを入力し、問題を選択します。
  4. 削除したい場合はRemoveを押すと削除されます。

進捗リセット

既にACした問題を、まだACしていない問題として扱うように設定できます。

使い方

  1. 右上の Login からGithubアカウントでログインした後に、 AtCoder ID を入力して保存します。
  2. ログイン後のメニューに Reset Progress タブが出てくるので、問題を指定すると、進捗がリセットされます。

開発者向け・Contribution

AtCoder Problemsの中身についての解説と、Contribution についてまとめたページです。

AtCoder Problems のコンポーネント

AtCoder Problemsの中身について解説します。

クローラー(Rust)

  • 提出クローラー
  • コンテスト・問題クローラー

APIサーバー(Rust)

フロントエンド(TypeScript)

集計バッチ(Rust)

  • 差分集計
  • 全提出集計

難易度推定(Python)

Contribution

機能を追加したい・機能を修正したい

要望を出したい・バグを報告したい

サーバー代をカンパしたい