プレフィックス和と差分アルゴリズムの理解とC++実装
プレフィックス和アルゴリズム
基本概念
プレフィックス和は配列処理技術の一種で、事前計算により部分区間の和をO(1)で取得可能にします。入力配列をdataとすると、プレフィックス配列prefは次のように定義されます:
pref[i] = data[0] + data[1] + ... + data[i]
pref[0] = data[0]
構築方法
C++による実装例:
vector<int> constructPrefixArray(const vector& ...
5月21日 01:20 投稿
アルゴリズム競技プログラミング問題集
基本的なアルゴリズム問題集
1. 立方体の体積計算
辺の長さa, b, cが与えられた時、立方体の体積を計算します。
#include <iostream>
using namespace std;
int main() {
int length, width, height;
cin >> length >> width >> height;
cout > exponent;
cout countB;
for(int i=0; i<countA+countB; i++) {
cout > n;
whil ...
5月20日 03:45 投稿
ABC347 プログラミングコンテスト問題解説
A
link
很简单
配列を順にアクセスし、\(k\)で割った余りが\(0\)かどうか判定する。余りが\(0\)の場合、\(a_i/k\)を出力する。
クリックしてコードを表示```
#include<bits/stdc++.h>
using namespace std;
int n, k;
int data[105];
int main() {
cin >> n >> k;
for(int i = 1; i <= n; ++i) {
cin >> data[i];
if(data[i] % k == 0) ...
5月19日 18:09 投稿
河川の岩場問題:二分探索による最適解
問題リンク
https://www.luogu.org/problemnew/show/P2678
問題背景
年一度の「岩場飛び」大会が開催されます!
問題説明
この大会は一直線の川で行われ、川の中には大きな岩が点在しています。主催者はすでに2つの岩をスタート地点とゴール地点として選定しました。スタートとゴールの間にはN個の岩(スタートとゴールを含まない)があります。競技中、参加者はスター ...
5月19日 12:57 投稿
Codeforces Round 895 (Div. 3) 解法概要
CF1872B 通路の限界
問題概要
一列に並んだ部屋のうち、いくつかには罠があります。各罠のある部屋には、到達可能な時間の制限があります。プレイヤーは1番目の部屋から最大で何番目の部屋まで往復できるかを求めます。
解法
各罠部屋の到達可能な最大位置を計算します。この位置は、罠の発生時間の半分を基準に計算されます。すべての罠部屋を距離順にソートし、途中で到 ...
5月18日 19:20 投稿
競技プログラミング問題解説:5つのアルゴリズム問題の実装例
P1628 合并序列 - 文字列のマージ
指定されたプレフィックスで始まるすべての文字列をマルチセットに格納し(重複を許可し、自動的にソートされる)、出力します。
#include <iostream>
#include <vector>
#include <string>
#include <set>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
in ...
5月18日 16:12 投稿
等しい要素をマージするアルゴリズムの実装
問題概要
配列内の等しい要素をマージする問題について、2つの異なるアプローチを解説する。
アプローチ1: 優先度付きキューを使用
優先度付きキューを用いて、値とインデックスを管理する方法。以下の手順で処理を行う:
すべての要素を値とインデックスのペアとしてキューに追加
キューの先頭から2要素を取り出し、値が等しければ和を計算して再挿入
等しくなけ ...
5月18日 15:30 投稿
Codeforces Round #627 解法解説
A - Yet Another Tetris Problem
n個の整数a_iが与えられます。各操作では、任意のiについてa_iを2増やすか、すべてのa_iを1減らすことができます。すべての値を0にできるか判定してください。
解法:すべての値の偶奇が一致する場合のみ可能です。
#include <iostream>
using namespace std;
void solve() {
int n, first, val;
cin >> n >> first;
fi ...
5月17日 19:21 投稿
競技プログラミング向けアルゴリズム備忘録
メモリ使用量の見積もり
プログラムが使用するメモリ容量を概算する方法:
1 MB = 1024 × 1024 バイト
int 型は 4 バイト
→ 必要メモリ (MB) = (int の要素数 × 4) / (1024 × 1024)
他のデータ型も同様に、各要素のバイト数を掛け合わせて計算する。
実行時間の計測(C++)
CPU時間を用いてコードの実行時間を計測する例:
#include <ctime>
#include <iostream ...
5月16日 05:33 投稿
競技プログラミングの復習と解法まとめ
7月は主に学校の夏期個人戦に参加し、その他の時間は主に学習やゲームに費やした。
上海大学プログラミングコンテスト 2024
上海地区のコンテストで、結果は芳しくなかった。主に実力不足が原因。
問題E - 無線ソフトウェア日
文字の出現頻度をカウントし、必要な文字数の最小値を求める問題。
#include <bits/stdc++.h>
using namespace std;
int main() {
int ...
5月15日 21:11 投稿