コーディングテスト演習(一)——Codeforces 784B Santa Claus and Keyboard Check

はじめに 最近、コーディングテストの準備をしており、練習問題をまとめています。 元々はC言語の経験しかありませんでしたが、実際に使用会发现C++の方がテストに向いています。ライブラリ関数も豊富で、より多くの操作をサポートでき、コードを簡潔に記述できます。 例えば、C言語で文字列を定義するにはchar s[1000]が必要ですが、C++ではstring sだけで済みます。 問 ...

5月29日 16:25 投稿

競技プログラミング問題集 SMU Spring 2023

A. 重複要素の削除 与えられた数列から重複要素を削除し、最初に出現した要素のみを保持するアルゴリズム。 #include <iostream> #include <vector> #include <unordered_map> using namespace std; vector<int> removeDuplicates(const vector<int>& nums) { unordered_map<int, int> countMap; vector<int> result ...

5月29日 14:24 投稿

成績管理システムの実装と改善

この記事では、C++を使用して成績管理システムを設計・実装する方法について説明します。以下のセクションで、クラス設計、コード例、およびいくつかの問題に対する回答を提供します。 1. システム概要 成績管理システムは、学生の成績を入力、出力、並べ替え、統計情報を計算する機能を備えています。 1.1 主なクラス設計 主なクラスである GradeManager には、次のメソ ...

5月29日 07:49 投稿

二分探索木の有効性検証:中間順走査によるアプローチ

問題の概要 二分探索木(BST)が有効であるかどうかを判定するには、各ノードが以下の条件を満たしているかを確認する必要があります。 ノードの左部分木に含まれるすべての値は、そのノードの値より厳密に小さい。 ノードの右部分木に含まれるすべての値は、そのノードの値より厳密に大きい。 左右の部分木もそれぞれ二分探索木でなければならない。 これを効率的にチェ ...

5月29日 04:49 投稿

最小部分文字列の探索:スライディングウィンドウ手法の実装

問題定義 2つの文字列 s と t が与えられた場合、s 内の部分文字列の中で、t のすべての文字(重複を含む)を含む最小の長さを持つものを見つけます。該当する部分文字列が存在しない場合は空文字列を返します。 この問題は、スライディングウィンドウ(Sliding Window)アルゴリズムの典型例です。左右2つのポインタを用いてウィンドウの範囲を動的に管理することで、効率 ...

5月29日 02:43 投稿

配列と連結リストの基本アルゴリズムと実装例

配列の二分探索 昇順に整列された重複のない配列から要素を検索する際、二分探索は効率的な手法です。左閉右閉区間と左閉右開区間の2つのアプローチを解説します。 左閉右閉区間アプローチ class Solution { public: int binarySearch(const vector<int>& arr, int target) { int low = 0; int high = arr.size() - 1; while (low tar ...

5月28日 21:40 投稿

配列パラメータの扱いにおけるC++での注意点

C++において、関数の引数として配列を渡す際に重要なポイントがあります。特に、const char str[N]を使用すると予期しない問題が発生することがあります。この記事では、その問題と解決策について詳しく説明します。 問題点: 配列の退化 まず、const char str[N]という形で関数に配列を渡すと、コンパイラはこれをconst char*に変換してしまいます。この現象を「配列の退 ...

5月28日 21:30 投稿

AtCoder Beginner Contest 389 解法解説

A - 9x9 問題概要 1桁の数字同士の乗算結果を求める。 解法 入力文字列から数値を抽出して掛け算する実装を行えばよい。 実装コード #include <bits/stdc++.h> using namespace std; #define int long long typedef pair<int, int> pii; const int mxn = 1e6 + 5; void solve() { string input; cin >> input; int a = input[0] - '0'; ...

5月28日 14:34 投稿

上海大学プログラミングコンテスト2023春季ラウンド4の問題解説

A. 二分探索の学習 基本的な二分探索アルゴリズムを実装する問題です。指定された範囲内でターゲット値を見つけるために必要なステップ数を計算します。 #include <iostream> #include <vector> #include <algorithm> using namespace std; int binary_search_steps(int left, int right, int target) { int steps = 0; while (left <= r ...

5月28日 10:30 投稿

Trie辞書木の作成と操作(C++)

本記事では、C++を用いてTrie辞書木を作成し、文字列の挿入と全単語の巡回を実現する方法を説明します。 最終的な挿入テスト結果は以下のとおりです。 1 char : 件 2 word : 编程软件 3 char : 习 4 word : 编程学习 5 char : 网 6 word : 编程学习网 7 char : 门 8 word : 编程入门 辞書木の構造体は以下のとおりです。 1 #ifndef __DICTIONARYDATA_H__ 2 #define __DICT ...

5月28日 01:39 投稿