プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

5.2 線形検索(番兵版)

番兵の説明があったのでそのまま入れてみます。 #include <iostream> #include <array> using namespace std; static void inputArray(int A[], int num) { for (int i = 0; i < num; i++) { cin >> A[i]; } } static int linearSearch(int A[], int sentinel) { int i = 0; f</array></iostream>…

5.2 線形検索

まずはそのまま書いてみます。内側ループを抜ける条件が微妙ですが、関数化するのを忘れていたためです。もっと丁寧にやらないといけませんね。 #include <iostream> #include <array> using namespace std; static void inputArray(int A[], int num) { for (int i = 0; i < </array></iostream>…

4.6 データ構造の応用:面積計算

これは面積のマージ部分のロジックが全然思いつかなくてダメでした。。解説を読みつつ書いたものがコレ。 #include <iostream> #include <string> #include <vector> #include <stack> using namespace std; static const char DOWN = '\\'; static const char EVEN = '_'; static const char </stack></vector></string></iostream>…

4.4 連結リスト(手動編)、 4.5 標準ライブラリのデータ構造

では、連結リストを手動で・・・と思いましたが、昔自分で作ったことがあるので割愛します。なお、一つ前の記事で「stdin 周りで苦労した」というのは、cin と fgets と scanf を混ぜて使ったら、改行コードの処理が想定しない動きをしてくれたので、仕方な…

4.4 連結リスト

これは苦労しました。。主に stdin 周りで無駄に苦労しました。。かなり汚いコードですが清書は後日。 #include <iostream> #include <string> #include <list> #include <algorithm> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; enum COMMAND_TYPE { INSERT, DELETE, DELETE_FIRST, DE</cstring></cstdlib></cstdio></algorithm></list></string></iostream>…

4.3 キュー(手動編)

queue も書いてみます。初めはランタイムエラーが出て「?」となりましたが、head とtail の初期化をサボってたからでした。AIZU のコンパイラはきっちりと不定値を入れてくるのですね。なお初期化については下記の記事が参考になります。 プログラミングの…

4.2 スタック(手動編)

std::stack を使うのはあんまりな気がしてきたので、一応手動バージョンを書きます。エラー処理とかは手抜きです。 #include <iostream> #include <array> #include <string> #include <sstream> using namespace std; static bool isOperator(const string& st) { return st[0] == '+' || st[0</sstream></string></array></iostream>…

4.3 キュー

std::queue バージョン。 #include <iostream> #include <queue> using namespace std; struct Process { string name; int time; }; static void inputProcess(queue<Process>& processQueue, int n) { Process in; for (int i = 0; i < n; i++) { cin >> in.name >> in.time; process</process></queue></iostream>…

4.2 スタック

std::stack を使えば良いのかな?と思って書いたコードです。 #include <iostream> #include <string> #include <stack> #include <sstream> using namespace std; static bool isOperator(const string& st) { return st[0] == '+' || st[0] == '-' || st[0] == '*' || st[0] == '/'; } int ma</sstream></stack></string></iostream>…

3.6 シェルソート

本書に「この問題はやや難しいチャレンジ問題です」とある通り、前半最大の山場でした。 #include <iostream> #include <array> #include <vector> #include <cmath> using namespace std; static void printArray(int A[], int N) { for (int i = 0; i < N; i++) { cout << A[i] << endl; } </cmath></vector></array></iostream>…

3.5 安定なソート

説明に従って愚直にコーディング。 #include <iostream> #include <algorithm> #include <array> using namespace std; struct Card { char suit; int value; bool operator==(const Card& rhs) const { return this->suit == rhs.suit && this->value == rhs.value; } }; static void pr</array></algorithm></iostream>…

3.4 選択ソート

いつもどおりソースコードを。 #include <iostream> #include <algorithm> #include <array> using namespace std; static void printArray(int A[], int N) { for (int i = 0; i < N; i++) { cout << (i != 0 ? " " : "") << A[i]; } cout << endl; } static void inputArray(int A[], i</array></algorithm></iostream>…

AIZU ONLINE JUDGE

ここまでのお題はローカルで実行結果を確認してましたが、そもそもオンラインジャッジをまったく受けてなかったので、急遽登録&回答を送信してみました。結果としては全部 OK でした。ということで、今後はオンラインジャッジをベースに進めていきます。> A…

3.3 バブルソート

まずは冒頭の説明をそのままコーディングします。 #include <iostream> #include <array> #include <cstdio> using namespace std; static void printArray(int A[], int N) { for (auto i = 0; i < N; i++) { cout << (i != 0 ? " " : "") << A[i]; } cout << endl; } static int bub</cstdio></array></iostream>…

3.2 挿入ソート

本章では、冒頭の説明の中でアルゴリズムが文章で明示されてますので、それをそのまま実装してみます。 #include <iostream> #include <array> #include <cstdio> void printArray(int A[], int N) { // カンニング1 for (auto i = 0; i < N; i++) { std::cout << (i != 0 ? " " : ""</cstdio></array></iostream>…

2.5 導入問題:回答例

まずは写経から。いきなり写経はどうなの?とは自分でも思いますがとりあえず。 #include <iostream> #include <algorithm> #include <cstdio> int main(void) { int n; std::cin >> n; int max = -1 * 1000000000; int now, ri, min; std::cin >> min; for (auto i = 1; i < n; i++) { st</cstdio></algorithm></iostream>…

2.5 導入問題

さて導入問題から学習開始です。しかし、いきなりですが、「こんなことでハマるのは自分くらいでは?」という状況に陥ったので、ありのままをお伝えします。(書籍内の文章の具体的な説明は端折ります) 入力例2: 3 4 3 2 ↑この入力例、書籍内では縦並びな…

書籍「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」

アルゴリズムを効率的に再勉強するには?と、自分なりに考えた結果、プログラミングコンテスト攻略のためのアルゴリズムとデータ構造 という書籍を購入しました。 こちらはプログラミングコンテスト向けの入門と実践的なものですが、オンラインジャッジを使…