Codeforces Edu Contest 161 解法と分析
問題A: 文字列照合判定
この問題では、文字列cの各文字が対応する位置の文字列aまたは文字列bのいずれかと一致するかを判定する必要があります。すべての文字が一致する場合は"NO"、そうでない場合は"YES"を出力します。
#include
#include
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int test_cases ...
7月7日 20:03 投稿
GJOI 2024.4.20 プログラミングコンテスト問題解説
朝の部
問題1: 鳥の撃ち合い
問題文:
n×nのグリッド上に、各格子点に1羽ずつ鳥がいます。(0,0)を除いて、すべての格子点に鳥がいます。(0,0)には無音の機関銃があり、任意の角度で発射できます。機関銃を発射すると、(0,0)から放射状に伸びる直線上にあるすべての鳥が撃たれます。最大でk回発射できます。撃てる鳥の最大数はいくつでしょうか?
ただし、m羽の鳥は事前に風 ...
7月7日 17:11 投稿
C言語によるLeetCode 1047と239の実装解説:スタック処理と単調キュー最適化
問題 1047: 隣接する重複文字の完全除去
問題定義
英小文字のみで構成される文字列が引数として渡されます。この文字列に対して、「隣接する同一文字をペアで取り除く」という演算を繰り返し適用します。すべての演算が行き詰まった時点で残っている文字列を返却してください。解答は一意に決まります。
入力例: "abbaca" → 出力: "ca"
制約条件: 文字列長は [1, 20000] ...
7月5日 22:28 投稿
CF1418G - Three Occurrences問題の解法
この問題は2500点の難易度を持つ競技プログラミングの問題です。
問題概要
二つの異なるアプローチを紹介します。
解法1
まず、各数の出現回数が3の倍数である場合を考えます。区間が有効であるためには、全ての数の出現回数を3で割った余りが0である必要があります。この条件を満たすために、出現回数を3で割った余りの配列をハッシュ化し、以前に同じハッシュ値が出現し ...
7月5日 22:08 投稿
カードゲームにおけるBOSS AI意思決定関数の実装
概要
「極妙幻境」の第4・7・10層クリア後に発生するBOSS戦において、BOSS(心魔)の出牌戦略を制御するAIロジックを実装する。この関数は現在のゲーム状態を入力とし、BOSSが実行すべきアクション(出牌、疑念提示、追従、降参)を決定する純粋関数として設計する。
データ構造定義
from enum import Enum
from typing import Dict, Optional, List
import random
cla ...
7月5日 22:04 投稿
二分探索アルゴリズムの実践的まとめ
二分探索の基本原則
閉区間方式を推奨します。データ量が少ない場合は線形探索が適切です。探索終了時、iはtargetより大きい最初の要素を指し、jはtargetより小さい最初の要素を指します。配列にtargetが存在しない場合、挿入位置はiとなります。
74. 二次元行列探索
行列内の目標値探索手法。単一行/列の境界条件に注意。
public class MatrixSearcher {
public bool ...
7月4日 23:34 投稿
スタックとキューを用いたデータ構造の実装と文字列処理
スタックによるキューの実装
2つのスタックを使用してキューの操作を実現します。入力用スタックと出力用スタックを用意し、要素の追加と取り出しを効率的に行います。
class QueueWithStacks {
private:
std::stack<int> inputStack;
std::stack<int> outputStack;
public:
void enqueue(int value) {
inputStack.push(value);
...
7月4日 22:11 投稿
配列内の2つの要素の和がターゲット値になるインデックスを見つけるアルゴリズム
問題概要
整数の配列と、特定の目標合計値が与えられます。この配列の中から、2つの異なる要素を選び、それらの合計が目標合計値と一致するような2つの要素のインデックスを返す関数を実装してください。各入力に対して正確に1つの解が存在すると仮定し、また同じ要素を2度使用することはできません。
例
入力: データ = [3, 5, 8, 12], 目標値 = 13
データ[1] (5) + デ ...
7月3日 22:34 投稿
C言語プログラミング演習:関数とアルゴリズム
演習課題1:成績評価システム
#include <stdio.h>
char evaluate_score(int mark); // 関数宣言
int main() {
int mark;
char evaluation;
while(scanf("%d", &mark) != EOF) {
evaluation = evaluate_score(mark); // 関数呼び出し
printf("得点: %d, 評価: %c\n\n", mark, evaluation);
}
...
7月3日 21:29 投稿
競技プログラミングにおける代表的アルゴリズムテンプレート集
高精度計算
トライ木を用いたA+B
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
struct TrieNode {
int children[26];
int value;
} nodes[1000];
char buffer[100];
int nodeCount = 0, totalNodes = 0, resultSum = 0;
bool negativeFlag;
void insertNumber() {
int cur ...
7月3日 20:44 投稿