初心者のためのガイド
Latest Author yuki2006 /Date 2020-04-11 00:41:12 / Views 114442特におすすめの問題を掲載しています。
まずはじめに
環境を準備しましょう
手元に使い慣れたテキストエディタや統合開発環境を準備しましょう。これから環境を構築するときは、環境構築まとめが参考になります。
環境の構築をしなくても、 オンライン実行が使用できます。
また、各問題の提出画面でも動作の確認ができます。
将来的には手元に環境構築できたほうが何かと便利です。
外部サービス
また、外部サービスとして以下のようなオンラインコンパイラを利用することも出来ます。チュートリアルの問題を解いてみましょう!
これらの問題から始めて、問題の入出力の方法に慣れましょう。コードを書いて、提出ページでコードを提出してみましょう。
入出力の方法が分からない場合は、言語別標準入出力を参考にしてください。
No.9000 Hello World!(テスト用)
簡単な文字列を出力する問題です。
No.480 合計
与えられた数値を使って合計値を求める問題です。
No.9001 標準入出力の練習問題(テスト用)
整数や文字列の入力を受け取る問題です。
No.9002 FizzBuzz(テスト用)
入力した値を基に、簡単な処理をしてから出力する問題です。
No.9008 空白区切りで与えられる数値データの合計値を求める(テスト用)
No.9009 改行区切りで与えられる数値データの合計値を求める(テスト用)
空白や改行区切りで与えられる問題に慣れましょう。
また32ビット整数型では解けないものもあるということを知っておくと良いでしょう。
(なお、ジャッジは64ビット環境で行われております。)
テストケース・解説について
このサイトでは、問題を解かなくてもテストケースと解説が表示できます。
ですが、悩まずに見てしまうと力にならないと思いますので、なるべく自力で考えてどうしても詰まったら見るようにしましょう。
簡単な問題を解いてみよう(★)
競技プログラミングをしたことない方でも比較的簡単に解けると思われるシンプルな問題です。
概ね制約を意識しなくても解ける問題です。
No.275 中央値を求めよ(ソートが必要)
考察が必要な競技よりの問題
No.56 消費税 (小数誤差に注意)
No.5 数字のブロック (コーナーケースに注意)
No.289 数字を全て足そう (文字の操作の基本)
No.47 ポケットを叩くとビスケットが2倍 (少し考察が必要)
No.48 ロボットの操縦 (コーナーケースに注意)
No.296 n度寝 (時間の処理)
No.69 文字を自由に並び替え (競技プログラミングでよくある問題の読み替え問題)
他にも簡単な問題(★)はたくさんあります。問題一覧から問題を選んで解いてみましょう。
アルゴリズム寄りの問題を解く(★★)
(★1が解けるようになってきた方だと)解けそうで解けなさそうな問題だと思います。
ここから、探索系アルゴリズムが必要になってきます。
制約も意識しないといけない問題が出てきます。
制約を見たら、簡単な解法では解けない。もしくは、制約が小さいので、全て列挙する事が可能かもしれません。
少し考察も必要になってきて、競技では最初のハードルである動的計画法を使う問題もあります。
競技プログラミングをよくしてる方から典型かもしれません。
慣れないとデバッグが少し大変になってくるので、バグらせないように実装するスキルも必要になってきます。
正直、直接業務では出てこないような処理かもしれません。
(ですが、運営者的には、エンジニアはこれらの問題も解けるようなスキルがある世の中になってほしいと願ってます。)
アルゴリズムの参考
- 深さ優先探索
- 幅優先探索
- 二分探索
- 素因数分解
- エラトステネスの篩(素数)
- ユークリッド互除法(最大公約数・最小公倍数)
- 動的計画法・メモ化再帰
- しゃくとり法
- Imos法(累積和手法)
難しい問題をとく(★★★以上)
より複雑なアルゴリズム・データ構造を使用した問題が出てきます。
考察も必要になり、事前にアルゴリズムについて知ってないと厳しいかもしれません。
この辺が解けると、十分競技プログラミングの問題が解けるようになってると思われますので、どんどん解いていきましょう
アルゴリズムの参考
- ワーシャルフロイド法
- ダイクストラ法
- Nim
- Segment Tree/BIT(Fenwick Tree)
- 優先度付きキュー