C言語による制御構造の基礎演習:分岐・反復処理の実装例
1. 単一値の階乗計算
nの階乗(n!)を算出する処理では、累積変数に対して反復処理を用いて乗算を適用します。
#include <stdio.h>
int main(void) {
int target_num = 0;
int factorial_val = 1;
printf("計算対象の整数を入力: ");
scanf("%d", &target_num);
for (int counter = 1; counter <= target_num; ++counter) {
f ...
7月5日 00:38 投稿
二分探索アルゴリズムの実践的まとめ
二分探索の基本原則
閉区間方式を推奨します。データ量が少ない場合は線形探索が適切です。探索終了時、iはtargetより大きい最初の要素を指し、jはtargetより小さい最初の要素を指します。配列にtargetが存在しない場合、挿入位置はiとなります。
74. 二次元行列探索
行列内の目標値探索手法。単一行/列の境界条件に注意。
public class MatrixSearcher {
public bool ...
7月4日 23:34 投稿
二分探索法と再帰を用いたデータ構造の問題解決
1. 二次元配列内の要素検索
二次元配列(各一次元配列の長さが同じ)で、各行が左から右に昇順に、各列が上から下に昇順にソートされている場合、与えられた整数が配列内に存在するかを判断する関数を作成します。
public class Solution {
public boolean find(int target, int[][] array) {
for (int i = 0; i < array.length; i++) {
for (in ...
6月29日 23:37 投稿
二分探索と二重ポインタの基本テクニック
二分探索
×
復習時の重要ポイント
midの計算時にint mid = left + (right - left) / 2;を使用して、int mid = (left + right) / 2;による整数オーバーフローを防ぐ必要がある
通常の検索、左境界、右境界はすべて左閉じ右閉じ区間を使用可能。閉区間のright = arr.length-1と開区間のright = arr.lengthの違い、およびwhileループでの<=と<の使い分けに注意
3種 ...
6月28日 01:20 投稿
CF251A 直線上の点の解説
問題文
Petyaは点が大好きです。彼の母親は彼に数直線OX上のn個の点を与えました。Petyaは、最も遠い2点間の距離がd以下となるような3つの異なる点を選ぶ方法がいくつあるか知りたいです。3つの点の順序は関係ありません。
入出力形式
入力
最初の行には2つの整数n (1 ≤ n ≤ 105) と d (1 ≤ d ≤ 109) が含まれます。次の行には、Petyaが持つ点のx座標を表すn個の整数x1, x ...
6月27日 00:38 投稿
木材伐採問題における最適切断高さの探索
きこりのミルコは、ある特殊な伐採機を用いて、要求される長さの木材を収集します。この伐採機は、設定された高さ H を基準に動作します。具体的には、伐採機は巨大な鋸刃を高さ H まで持ち上げ、その高さよりも高い部分を持つ全ての木から、H を超える部分を切り落とします。切り落とされた部分がミルコによって収集されます。H 以下の高さの木はそのまま残り、切り落とさ ...
6月25日 20:21 投稿
競技プログラミングコンテスト問題解説:Codeforces Round 521 (Div. 3)
A. カエルのジャンプ
問題の条件に従って直接シミュレーションを行います。データ範囲に注意し、long long型を使用します。
void solve(){
long long a, b, k;
cin >> a >> b >> k;
cout n;
vector<int> arr(n);
for(int i = 0; i < n; i++) cin >> arr[i];
int result = 0;
for(int i = 0; i < n - 2; i++){
if(arr[i] = ...
6月19日 23:58 投稿
文字列の最適削除と辞書順最小化アルゴリズム
各位置 i の文字を c[i] とし、canErase[x][y] を「文字 x が直後の文字 y を削除可能か」を表すブール配列とする。maxReach[i] は、位置 i から連続して削除可能な最大範囲の終端インデックスを示す(つまり、i+1 から maxReach[i] までの文字はすべて削除可能で、maxReach[i]+1 は削除不可能)。
貪欲戦略として、ある文字が自身の後続文字を削除でき、かつ自身も他の文 ...
6月11日 23:52 投稿
数学アルゴリズム問題の解法と思考プロセス
回文数の判定
回文数を判定する問題では、まず基本的なケースを考慮し、一般的なケースを解決した後、特殊なケースを処理することで問題を解決できます。
class PalindromeChecker {
public boolean isPalindrome(int number) {
if (number < 0) {
return false;
}
if (number < 10) {
return true;
} ...
6月6日 19:31 投稿
グラフ理論:K値の最大化問題 - 二分探索とシミュレーションによる解法
グラフ理論:K値の最大化問題 - 二分探索とシミュレーションによる解法
問題文
n個の頂点とm辺の単純無向グラフが与えられます。このグラフを完全グラフに補完する必要があります。補完のルールは、あらかじめパラメータKを選び、各ステップで「頂点uとvの間に辺が存在せず、かつ両頂点の次数の和がK以上」である辺のみを追加することです。このルールに従って辺を追加し ...
6月6日 17:45 投稿