競技プログラミング入門.pdf

E10edbdd32396750ec29856afa6dc7ee?s=47 axpensive
January 13, 2020

 競技プログラミング入門.pdf

E10edbdd32396750ec29856afa6dc7ee?s=128

axpensive

January 13, 2020
Tweet

Transcript

  1. 競技プログラミング入門 Atcoderメイン

  2. このLTの内容 話すこと • 競技プログラミングとは • Atcoderの概要 • 問題を解くために必要なこと 話さないこと •

    アルゴリズム • 実装テクニック
  3. 自分について

  4. 僕と競技プログラミング • C++を勉強してみたい ◦ 作りたいものがないから競プロで練習 • AIZU ONLINE JUDGEで勉強 ◦

    http://judge.u-aizu.ac.jp/onlinejudge/ ◦ 続かず... • Atcoderでコンテストに数回参加する。 ◦ 仕事で役に立たないと感じる ◦ アカウント削除 • あるきっかけで再開
  5. 競プロを再開した理由 • 優秀なWebエンジニアがコーディング試験のある会社に全落ちした • 転職の準備 • シェアハウス住民が競プロを始めた • 新規アカウントでのコンテスト参加してない。 ◦

    C問題ある程度埋めたらやろうかな
  6. Atcoder概要

  7. 競プロ界隈の登場人物 • ちょくだい ◦ AtCoder(株)代表取締役社長 ◦ C#使い • tourist ◦

    人生N周目のプレイヤー ◦ Atcoder一位 ◦ 数々のコンテストで実績を残す
  8. コンテストの流れ • コンテストが告知される • コンテスト開催ページで参加するボタンを押す ◦ 企業コンテストは個人情報を記入 ◦ 途中参加可能なはず ...

    • 開催時間内に問題を解く ◦ 開始時間に着席する必要はないし、途中退席も可 • マイページでコンテスト結果を観てほくそ笑む
  9. 基本的な問題の形 1. 文字列を標準入力 2. 自作ロジックで処理 3. 文字列を標準出力 やらないこと • ファイルの処理

    • APIを叩く • DB操作
  10. 問題で求められるもの 1. 問題で求められる解を出力する。 a. ゴミロジックでもいい 2. 処理時間(C問題以降ハマる) 3. メモリ(まだ意識したことはない) ※AC

    = Accepted いっぱいACしようぜ!!!
  11. 問題の解き方 • 問題の読み替え • 分からなかったら ◦ 調べる ▪ 数学的知識 ▪

    アルゴリズム ▪ プログラミング言語仕様 • 例題のテストケースを通す ◦ ローカル環境 ◦ Atcoderのコードテスト
  12. コンテストの種類(基本) • AtCoder Beginner Contest (ABC) ◦ 初心者はこれ ◦ レートの上がり方に制限がある

    • AtCoder Regular Contest (ARC) ◦ ABCできたらやるといい ◦ 最近開催されてない • AtCoder Grand Contest (AGC) ◦ 別次元
  13. コンテストの種類(特別) • 企業コンテスト ◦ 難易度不明 ◦ 採用で優遇される • 特殊コンテスト ◦

    C++の練習問題のみ ◦ DP(動的計画法)が使える問題に絞ったもの • バーチャルコンテスト ◦ 過去に実施されたコンテストを時間制限を掛けて問題を解く
  14. ABC問題の傾向 • A,B問題 ◦ プログラミング言語が使えるか ◦ 二重for文 • C, D問題

    ◦ 一気に難しくなる印象 ◦ 数学的知識 ◦ 代表的なアルゴリズム ◦ 処理時間を意識する • E, F問題 ◦ C, D問題と同じだと思うけど、解いたことない ...
  15. 回答が却下された時対応 • CE (Compilation Error), RE (Runtime Error) ◦ デバッグし直す

    • WA (Wrong Answer) ◦ テストケースを増やしてデバッグ。 • TLE (Time Limit Exceeded) ◦ 時間の掛かってそうな箇所を方針レベルで見直す。 ◦ 些細なことが影響していると疑わない ▪ VectorとArrayで処理速度が変わるとか • IE (Internal Error) ◦ 最近はジャッジに時間がかかって unrated • MLE (Memory Limit Exceeded), OLE (Output Limit Exceeded) ◦ 遭遇したことない...
  16. 開発環境について

  17. 僕の開発環境 • 筆記用具 ◦ ぺんてる シャープペン スマッシュ 0.5mm Q1005-1 ブラック

    ◦ 大学ノート • PC ◦ Mac Book Pro • 仮想環境 ◦ Parallels(買い切り) ◦ Win10 • IDE ◦ Visual Studio • コンパイラ ◦ VC++ ▪ gccに変える予定
  18. なぜVisual Studioか • 会社でよく使っていたから • ステップ実行、クイックウォッチなどがデフォルトでできる。 • VSCodeは苦手 ◦ Visual

    Studioにと同等の機能を追加するのに労力に手間がかかる ◦ よくわかってないので、参考記事以上の拡張が出来ない • Xcode大っ嫌い ◦ ステップ実行時のクイックウォッチが見にくい ◦ IOSエンジニアに絶対なりたくない
  19. なぜC++か • 使わないと処理速度でTLEになる。 ◦ Atcoderは言語別に処理時間を設定してない。 ◦ 公式の解説動画で言及されてる • 公式、ユーザーの回答がC++が多い •

    アルゴリズムの解説でC++が多い
  20. C++コンパイラの種類 • Windows ◦ VC++ ◦ gcc(MinGW) • Mac ◦

    clang ◦ gcc(Homebrew) Gccは#include <bits/stdc++.h>が使えるから便利!!! コンテストではコンパイラを選べる
  21. Atcoderへの向き合い方

  22. 競プロをどこまで極めるか • 目指す色は水色 ◦ C, D問題が簡単に解けるレベル (だったはず) ◦ 採用試験を突破できればいい •

    企業コンテスト、AtCoderJobsで転職できたらいいな • エンジニアとして恥ずかしくない程度
  23. 競技プログラミングのメリデメ メリット • 採用試験で有利になれる • 時代に左右されにくい力が手に入る • エンジニアにマウントが取れる • 機械学習系の仕事で役に立つ

    デメリット • 費用対効果が低い ◦ すべての仕事に競プロが役に立つわけではない。
  24. 過去問の進め方 • 時間を計って解く ◦ ノートを使う ▪ 方針を立てる ▪ 例題のサンプルを手で動かして解く •

    解答を見る ◦ 公式の回答 ◦ 個人ブログの解説 ▪ Atcoder + 問題名で検索 • 復習 ◦ AtCoder Problemsおすすめ
  25. モチベーションの保ち方 • コンテストに参加する ◦ 自分の実力がグラフで表示される • AtCoder Problemsを使う ◦ https://kenkoooo.com/atcoder#/table/

    ◦ 円グラフで達成感を得られる ◦ 自分の実力に合った問題を探す • 自分が理解しやすい解説を読む ◦ 公式のyoutube動画 ◦ けんちょんの競プロ精進記録 ▪ http://drken1215.hatenablog.com/
  26. 無双してる人を見て落ち込まないために 無双してるひとは大体こんなひと • 他コンテストで長い間活躍されている • CSの学位を持っている • 大学院生で数学を専攻してる などなど 長く続ければ何者かになれるよ、きっと

  27. Finish 目標を決めて 程々に楽しんでください!