けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

JOI

JOI 一次予選 2022 (第 1 回) A - 余り (9Q, 難易度 1)

余りを求めるための剰余演算子「%」を確認しておこう! 問題へのリンク 問題概要 正の整数 が与えられるので、 を 21 で割った余りを出力せよ。 解法 X を 21 で割った余りは、演算子「%」を用いて、 X % 21 によって求められます。 コード #include <bits/stdc++.h> using </bits/stdc++.h>…

JOI 一次予選 2020 (第 1 回) A - 3 つの整数 (8Q, 難易度 1)

記念すべき「JOI 一次予選」が最初に行われた年の問題。この頃はまだ A 問題も結構難しかったのですね。 問題へのリンク editorial 問題概要 3 個の整数 が与えられる。これらの整数は 1 か 2 のいずれかである。 1 と 2 のうち、どちらの方が多くあるかを判…

JOI 一次予選 2022 (第 2 回) A - 立方体 (10Q, 難易度 1)

このくらい易しい問題はとてもいい! 問題へのリンク editorial 問題概要 一辺の長さが である立方体の体積を求めよ。 解法 求める体積は である。 よって、整数値 X の入力を受け取り、X * X * X の値を出力すればよい。 コード #include <bits/stdc++.h> using namespace </bits/stdc++.h>…

JOI 一次予選 2023 (第 2 回) A - 時間 (10Q, 難易度 1)

「1 日 = 24 時間」ですね。 問題へのリンク editorial 問題概要 日とは、何時間であるか求めよ。 解法 1 日は 24 時間であり、2 日は 48 時間であり、3 日は 72 時間である。このように、日数に 24 をかけることで、時間数を求めることができる。 よって、 …

JOI 一次予選 2024 (第 2 回) D - 繰り返し (6Q, 難易度 3)

for 文や while 文を書き慣れている人でも、終了条件を「反復回数満了」以外の方法で記述するのは、意外と戸惑うかもしれない。 問題へのリンク editorial 問題概要 黒板に書かれた整数に対して、以下の操作を繰り返し行う。 書かれた整数 が 3 で割り切れる…

JOI 一次予選 2024 (第 2 回) C - 画数数え (8Q, 難易度 2)

for 文の練習! 問題へのリンク editorial 問題概要 文字 j は 2 画、o は 1 画、i は 2 画である。 与えられた文字列 が合計で何画であるかを求めよ。 解法 for 文を用いよう。for 文のループカウンタ変数を i として、文字 S[i] について、次のように処理…

JOI 一次予選 2024 (第 2 回) B - 火曜日 (8Q, 難易度 1)

慣れていないと少し難しいかもしれない。 問題へのリンク editorial 問題概要 今日は日曜日である。 今日の 日後が火曜日であるならば 1 を、そうでないならば 0 を出力せよ。 解法 日後が火曜日であるための条件を考えましょう。 「0 日後は日曜日」「1 日…

JOI 一次予選 2024 (第 2 回) A - 飴の袋詰め (9Q, 難易度 1)

例によって、一次予選の A 問題は教育的! 問題へのリンク editorials 問題概要 1 個 円の飴を 個と、 円の袋を 1 つ買う。 合計金額はいくらか求めよ。 解法 答えは です。 プログラムでは、整数値 A, B, C を標準入力で受け取って、整数値 A * B + C を標…

JOI 一次予選 2024 (第 1 回) D - 現れている数字 (6Q, 難易度 2)

とても教育的な問題ですね。 問題へのリンク editorials 問題概要 0 以上 9 以下の整数からなる、 個の整数 が与えられる。 数列 の中に一度以上登場する整数を小さい順に出力せよ。 解法 (1):値 0, 1, ..., 9 について個別に全探索 1 つめの解法は まず、…

JOI 一次予選 2024 (第 1 回) C - ハミング距離 (8Q, 難易度 2)

for 文の練習をしよう! 問題へのリンク editorial 問題概要 長さ の文字列 が与えられる。これらの文字列のハミング距離を求めよ。 ハミング距離とは、 となる の個数のことを指す。 解法 for 文の出番です。S[i] != T[i] であるような i の個数を求めれば…

JOI 一次予選 2024 (第 1 回) B - 和の判定 (8Q, 難易度 1)

上手に場合分けしよう! 問題へのリンク editorial 問題概要 3 個の整数 が与えられる。 これらのうちの 1 個が、残りの 2 個の和として表せるときは 1 を出力し、そうでないときは 0 を出力せよ。 解法 「3 個の整数 のうちの 1 個」が残りの 2 個の和とし…

JOI 一次予選 2024 (第 1 回) A - 果物 (10Q, 難易度 1)

JOI 一次予選の問題は本当に教育的なものが多い! 問題へのリンク editorial へのリンク 問題概要 リンゴが 個、ミカンが 個、バナナが 3 個ある。 リンゴとミカンとバナナが合わせて何個あるかを求めよ。 解法 答えは 個です。 プログラムを書くときには、…

JOIG 春合宿 2023 day2-2 White Light (2D, 難易度 8)

セグメント木を用いた DP 高速化! 問題へのリンク editorials 問題概要 'R' と 'G' と 'B' のみからなる長さ の文字列 が与えられる。以下の操作を繰り返し行うことで、"RGB" を繰り返す文字列となるようにしたい。 (操作) 連続する 個以下の文字を消す 目…

JOIG 春合宿 2023 day2-1 Smartphone (難易度 8)

JOI ではお馴染みの「 個の区間を扱う問題」。ただし実装がしんどかった。僕は区間を set で管理する方法で実装した。 問題へのリンク editorials 問題概要 制約 考えたこと いかにも貪欲法の香りが漂っている問題ですね。この手の問題では、 個の区間を終端…

JOIG 2024 A - 三連続 (難易度 2)

for 文の練習問題! 問題へのリンク 問題概要 o と x からなる長さ の文字列 が与えられる。 の中に o が 3 つ連続している箇所があれば "Yes" を出力し、そうでなければ "No" を出力せよ。 制約 考えたこと for 文を用いて判定しよう。具体的には、各 i に…

JOIG 2024 E - 名前 (難易度 9)

いかにも JOI にありがちな添字の持ち方をする DP! 問題へのリンク 問題概要 英小文字と英大文字からなる長さ の文字列 と、長さ の文字列 が与えられる。また 0 以上 3 以下の整数 が与えられる。 次の条件を満たす文字列 の長さの最小値を求めよ。 は、英…

JOIG 2024 C - 座席 2 (難易度 6)

色んな解法が考えられそうな問題で、ドツボにハマりやすくて危険な問題だったと思う。落ち着いて整理してシンプルに考える力が問われる。実は、二分探索などは必要ない問題である。 問題へのリンク editorial 問題概要 人の選手 がいる。選手 の出身国は で…

JOIG 2023 E - 運河 (難易度 7)

UnionFind を使って、差分更新を頑張る! UnionFind はオンラインの処理を簡単に実現できることが強みで、それを問いかける教育的問題ですね。他にも「左右からの結果を前処理する」という典型テクも使います! 問題へのリンク 問題概要 のグリッドがあって…

JOIG 2023 D - コイン集め 2 (難易度 6)

データを上手に持って、差分更新する系の問題 問題へのリンク 問題概要 のグリッドがあって、各マスは文字 '#' か '.' のいずれかが書かれている。先手は '#' の個数が得点となり、後手は '.' の個数が得点となる。双方得点を最大化したい。 先手は行を 1 つ…

JOIG 2023 C - 鐘 (AOJ 0759, 難易度 4)

直線がいくつかの区間に分かれているとき、点がどの区間に属するかを求めたいとなったら、lower_bound()!!! 問題へのリンク 問題概要 数直線上に 個の鐘がある。 番目の鐘は座標 の地点に配置されている。 地点 の人の聞く鐘の音の強さは、各鐘 に対する …

JOIG 2023 B - 絶対階差数列 (AOJ 0758) (6Q, 難易度 2)

いわゆる「愚直シミュレーション」と呼ばれる分野の問題ですね。問題文で指示されたことを、とにかく愚直に忠実に実装できるかが問われています。地味な印象を受けるかもですが、大切なスキルです! 問題へのリンク 問題概要 黒板に、はじめ 個の整数値 が書…

JOIG 2023 A - 末尾の文字 (AOJ 0757) (9Q, 難易度 1)

文字列の練習! 問題へのリンク 問題概要 英大文字のみからなる、長さ の文字列 が与えられる。 の末尾の文字が 'G' 以外のとき: の末尾に文字 'G' を挿入して得られる文字列を の末尾の文字が 'G' であるとき: の末尾の文字 'G' を削除して得られる文字列…

JOI 予選 2007 F - 通学経路 (AOJ 0515, 難易度 4)

DP の典型問題だけど、最初は難しく感じるかもしれない。あと、縦横が微妙に混乱するね。 問題へのリンク editorial 問題概要 (今風に表現改) のグリッドが与えられる。このグリッドで上から 番目、左から 番目のマスを と書くことにする。最初、マス に駒が…

JOI 予選 2007 E - 品質検査 (AOJ 0514, 難易度 5)

この辺りから難しくなって来てる。「 で合格・不合格」という条件をどのように適切に言い換えるかが問われている。 問題へのリンク 問題概要 電源が 個、モーターが 個、ケーブルが 個ある。電源は と番号づけられていて、モーターは と番号づけられていて、…

JOI 予選 2007 D - カードの並び替え (AOJ 0513, 難易度 3)

難しくはないけど、やることが複雑だし、問題文を読み解くのがハードな問題! この手の問題は、解けないと思ったら、実際のコードを見てしまう方が早いと思う。 問題へのリンク editorial 問題概要 正の整数 が与えられる。 1 から までの数値が書かれたカー…

JOI 予選 2007 C - シーザー暗号 (AOJ 0512, 難易度 2)

アルファベットを戻す処理を書くのが最初は難しいかもしれない 問題へのリンク editorial 問題概要 シーザー暗号とは、文字列に対して、各文字を 3 つずつ進めたものに変換するものである。ただし、X, Y, Z はそれぞれ A, B, C となる。具体的には、次のよう…

JOI 予選 2007 B - 未提出者は誰だ (AOJ 0511, 難易度 2)

for 文を二重にしたり、フラグを管理したりする練習! 問題へのリンク editorial 問題概要 個の整数値が与えられる。これらの整数値は 以上 以下の整数から 2 個を除外したものとなっている。 その除外された 2 個の整数値を小さい順に答えよ。 考えたこと …

JOI 予選 2007 A - 得点 (AOJ 0510, 難易度 1)

入出力の練習と、関数 max() を使う練習! 問題へのリンク 問題概要 A さんの情報の得点,数学の得点,理科の得点,英語の得点 B さんの情報の得点,数学の得点,理科の得点,英語の得点 がそれぞれ与えられる (合計 8 個の整数値が与えられる)。A さんの 4 …

JOI 本選 2023 A - 碁石ならべ 2 (難易度 6)

どうなっているのかを観察して計算量を減らす系。観察力が問われる! 問題へのリンク editorials 問題概要 個の碁石を左から順に並べていく。 番目に並べる碁石の色は である ( 以上 以下の数値)。碁石を並べるときの規則は次のようになる。 番目の碁石を 番…

JOI 二次予選 2023 A - 年齢の差 (AOJ 0747, 難易度 3)

シンプルながらも、学べるポイントがたくさんある問題ですね 問題へのリンク 公式解説へのリンク 問題概要 JOI 市には から までの番号が付けられた 人の住民がいて、住民 () の年齢は 歳です。 JOI 市の住民の年齢 ​ が与えられます。 に対して、住民 と他…