HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)解説

A - Yay! 長さが3以上の文字列中に2種類の文字が含まれており、そのうち1つはちょうど1回だけ出現する。その位置を1-indexedで出力せよ。 最初の文字が一意であれば、残りにその文字は存在しない。そうでなければ、最初の文字とは異なる最初の文字を探せばよい。 #include <iostream> #include <string> using namespace std; int main() { string s; ...

7月18日 00:29 投稿

AtCoderコンテスト445の解法解説

D - チョコレートの再構築 この問題は比較的単純な実装問題です。チョコレートの配置を再構築するアルゴリズムを示します。 struct Chocolate { int height; int width; int id; }; bool compareWidth(const Chocolate &a, const Chocolate &b) { return a.width > b.width; } bool compareHeight(const Chocolate &a, const Chocolate &b) { ret ...

7月17日 20:13 投稿

ABC356コンテスト問題解説

問題A 問題の指示に従ってシミュレーションを行います。 #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int size, left, right; cin >> size >> left >> right; vector<int> sequence(size); for (int i = 0; i < size; ++i) { sequence[i] = i + 1; } ...

7月17日 03:05 投稿

アルゴリズム問題:文字列操作とスタックの応用

LeetCode1047: 文字列内の隣接する重複項の削除 問題: 小文字からなる文字列 S が与えられます。重複項削除操作は、隣接する同じ文字のペアを選択して削除します。 S に対して重複項削除操作を繰り返し実行し、削除ができなくなるまで続けます。 すべての重複項削除操作が完了した後、最終的な文字列を返してください。答えは一意であることが保証されます。 例: 例: &l ...

7月16日 23:23 投稿

アカウントのメールアドレスを統合するUnion-Findアプローチ

問題概要 複数のアカウント情報が「名前, メール1, メール2, …」という形式で与えられる。同一人物のアカウントは少なくとも1つのメールアドレスが共通しているため、それらを1つにまとめて返却せよ。 Union-Findを用いた解法 「共通のメールアドレスを持つアカウントは同一人物」という条件は、「同一要素を含む集合をすべて結合」というUnion-Findの典型的な利用シーン ...

7月16日 21:36 投稿

C言語構造体とアルゴリズムの実践的演習

4、演習課題4 task4.cソースコードと実行結果: 1 #include <stdio.h> 2 #define MAX_BOOKS 10 3 4 typedef struct { 5 char book_id[20]; // 書籍ID 6 char title[80]; // タイトル 7 char writer[80]; // 著者 8 double price; // 価格 9 int quantity; // 売上数量 10 } Publication; ...

7月16日 20:01 投稿

バックトラックアルゴリズムの理論と組み合わせ問題の実装

バックトラック法の基本概念 バックトラック法は探索手法の一種で、再帰処理と密接に関連しています。再帰処理を行う際には必ずバックトラックが発生するため、バックトラックは再帰の副産物と言えます。 バックトラック法の効率性 バックトラック法は本質的に全探索アルゴリズムであり、効率的とは言えません。ただし、枝刈り(pruning)を適用することで多少の効率改善 ...

7月16日 16:50 投稿

二分探索木の検証アルゴリズム

問題概要 二分探索木の妥当性を判定する問題です。与えられた二分木のルートノードから、その木が二分探索木の条件を満たしているかどうかを確認します。 二分探索木の定義: 任意のノードの左部分木に含まれる値は、そのノードの値より小さい 任意のノードの右部分木に含まれる値は、そのノードの値より大きい 左右の部分木もそれぞれ二分探索木である 実行例 例1: ...

7月16日 16:02 投稿

区間MEXの重要な性質とそのアルゴリズム

はじめに この記事では、数列における区間MEX(Minimum Excluded Value)の重要な性質について考察します。MEXとは、数列に含まれていない最小の非負整数を指します。特に、「極小MEX区間」と呼ばれる概念に焦点を当て、その数がO(n)に収まることを証明し、効率的なアルゴリズムを提案します。 極小MEX区間の定義と重要性 極小MEX区間とは、区間の左端または右端を1つ削除 ...

7月15日 22:49 投稿

競技プログラミング問題の解法とコード例

A 問題 ある日を選んで問題を解くとき、その日の問題数が次の日の問題数よりも多い場合に選択します。ただし、n+1 日目は 0 問とする。 コードを見る <code> #include <iostream> #include <vector> using namespace std; int n; vector<int> a, b; void solve() { cin >> n; a.resize(n + 1); b.resize(n + 1); for (i ...

7月15日 16:53 投稿