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

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

2024-01-01から1年間の記事一覧

JOI 一次予選 2020 (第 3 回) B - キャピタリゼーション (7Q, 難易度 2)

for 文で隣接する要素を見ながら処理していく系の問題 問題へのリンク 問題概要 長さ の文字列 が与えられる。 を左から見ていき、文字列 "joi" が含まれるならば、これを "JOI" に変換していく処理を繰り返す。操作後の文字列を出力せよ。 解法 次のように…

JOI 一次予選 2020 (第 3 回) A - X に最も近い値 (7Q, 難易度 2)

いろんな解法がある! 問題へのリンク 問題概要 以上 以下の整数のうち、 との差の絶対値が最も小さいものを求めよ。 制約 解法 (1):for 文 一番確実な方法は、for 文を用いて、 をすべて調べることだと思われます。 が最小となるような を求めればよいでし…

JOI 一次予選 2020 (第 2 回) C - 最頻値 (6Q, 難易度 3)

集計処理を練習しよう! 問題へのリンク 問題概要 以上 以下の整数からなる、長さ の数列 が与えられる。 長さ の新たな数列 を次のように定義する。 各 に対して、 を、 を満たす の個数 の最大値を求めよ。 制約 解法 問題の意味を解釈するのが難しいかも…

JOI 一次予選 2020 (第 2 回) B - 文字列の反転 (7Q, 難易度 2)

reverse する系の問題 問題へのリンク 問題概要 長さ の文字列 について、 文字目から 文字目までを反転して得られる文字列を出力せよ。 制約 解法 C++ でプログラムを書くときは、通常文字列は 0 始まりですので、 からあらかじめ 1 引いておきます。 その…

JOI 一次予選 2020 (第 1 回) C - マージ (5Q, 難易度 3)

マージソートのマージの部分を実装する問題ですね。 添字を順に進めていくような処理を実装します! この実装は、のちにしゃくとり法を学ぶ際の参考にもなります。 問題へのリンク 問題概要 制約 解法 問題文が複雑で、何をすればいいのかを理解するのが大変…

AtCoder ABC 251 A - Six Characters (8Q, 灰色, 100 点)

少し面白い問題! 問題へのリンク 問題概要 長さが 1, 2, 3 のいずれかの文字列 が与えられる。 を繰り返して得られる文字列であって、長さが 6 であるものを答えよ。 考えたこと 次のように考えれば良い。 の長さが 1 のとき: を 6 回繰り返す の長さが 2 …

AtCoder ABC 247 A - Move Right (8Q, 灰色, 100 点)

上手に解釈して問題を解こう! 問題へのリンク 問題概要 0 と 1 のみからなる長さ 4 の文字列 が与えられる。この文字列は、4 マスからなる各マスに人がいるかどうかを表す。 はそのマスに人がいることを表し、 は人がいないことを表す。 今、人がみな右へ移…

JOI 一次予選 2020 (第 1 回) B - 母音を数える (8Q, 難易度 2)

for 文の練習! 問題へのリンク 問題概要 長さ の文字列 が与えられる。 のうち母音字の個数、つまり a,i,u,e,o の個数の総和を求めよ。 解法 文字列 の文字を 1 個ずつ、for 文を使って調べていきましょう。 コード #include <bits/stdc++.h> using namespace std; int</bits/stdc++.h>…

JOI 一次予選 2020 (第 2 回) A - 試験 (8Q, 難易度 1)

楽しい問題! 問題へのリンク 問題概要 3 個の整数 が与えられる。 これらの整数のうち、大きい方から 2 個の和を求めよ。 解法 から、「一番小さい数」を引けば良いでしょう。 のうち一番小さい数は、C++ では、関数 min() を用いて min({A, B, C}) と表せ…

JOI 一次予選 2021 (第 3 回) C - 比較 (7Q, 難易度 2)

多重 for 文に慣れよう! 問題へのリンク 問題概要 長さ の数列 と、長さ の数列 が与えられる。 を満たす整数の組 の個数を求めよ。 制約 解法 多重 for 文に慣れましょう! 数列 の 番目と、数列 の 番目をすべて調べるのは、次のような 2 重の for 文で記…

JOI 一次予選 2021 (第 3 回) B - IOI 文字列 (7Q, 難易度 2)

for 文のループカウンタ が偶数か奇数かに応じて処理を変える問題! 問題へのリンク 問題概要 長さが奇数 の文字列 が与えられる。 この文字列に対して、次の操作をすることで、"IOIOIO...OI" というように "I" と "O" を繰り返す文字列にしたい。操作回数の…

JOI 一次予選 2021 (第 3 回) A - 計算 (9Q, 難易度 1)

関数 max() と関数 min() を使いこなそう! 問題へのリンク 問題概要 2 つの整数 が与えられる。 と のうち、最大のものと最小のものを順に出力せよ。 解法 まず、 と のうちの最大のものは max(A + B, A - B) と表せます。なお、 と が同じ値である場合には…

JOI 一次予選 2021 (第 2 回) C - 分割 (7Q, 難易度 2)

for 文の練習! 問題へのリンク 問題概要 長さ の数列 (すべての要素は互いに相異なる) について、最大値を考えたとき、その左側の総和と、右側の総和をそれぞれ求めよ。 制約 解法 この問題では、数列 の最大値だけではな、 が最大となるような も求める必…

JOI 一次予選 2021 (第 2 回) B - ビ太郎と IOI (6Q, 難易度 2)

多重 for 文の全探索に慣れよう! 問題へのリンク 問題概要 長さ の文字列 が与えられる。次の条件を満たす 3 つ組の整数 が存在するかどうかを判定せよ。 の 文字目は 'I' である の 文字目は 'O' である の 文字目は 'I' である 制約 解法 を満たすような …

JOI 一次予選 2021 (第 2 回) A - 帰省 (8Q, 難易度 1)

ちょっと細かいところミスった人も多いかもしれないね。 問題へのリンク 問題概要 ビ太郎は帰省することにした。 今日から 日後の午前に実家に着き、今日から 日後の午前に実家を去る。 それを聞きつけたビバ子は、今日から 日後の午後にビ太郎の実家を訪れ…

JOI 一次予選 2021 (第 1 回) C - 共通要素 (6Q, 難易度 2)

このような問題を解くためにも、「バケット」を習得しよう! 問題へのリンク 問題概要 長さ の数列 と、長さ の数列 が与えられる。 こっらの数列の双方に登場する数をすべて昇順で出力せよ。 制約 解法 (1):1 から 100 までの数を順に調べる 制約を見よう…

JOI 一次予選 2021 (第 1 回) B - JOI ソート (7Q, 難易度 2)

これは面白い! 問題へのリンク 問題概要 文字 J, O, I からなる、長さ の文字列 が与えられる。 の文字を並び替えて、次の条件を満たすものを求めよ。 すべての文字 J は、すべての文字 O よりも前にある すべての文字 O は、すべての文字 I よりも前にある…

JOI 一次予選 2021 (第 1 回) A - 2 番目に大きい整数 (7Q, 難易度 1)

この時代の一次予選は、まだちょっと難しかった 問題へのリンク 問題概要 3 個の整数 が与えられる。これらの整数のうち、2 番目に大きい値を求めよ。 制約 解法 (1) 最も楽だと思われる方法は、3 個の整数のうちの「最大値」と「最小値」を求めてあげる方法…

JOI 一次予選 2022 (第 3 回) D - ボールの移動 (5Q, 難易度 3)

どのようにデータを管理すればよいか、難しいと感じるかもしれない。 問題へのリンク 問題概要 最初、箱 にそれぞれボール が入っている。 次の 回の操作を行う。 回目の操作では、ボール が入っている箱から、ボール を取り出して、それを箱 に入れる。 操…

JOI 一次予選 2022 (第 3 回) C - 運動会 (7Q, 難易度 3)

問題文が長めだから、丁寧に整理しよう! 問題へのリンク 問題概要 人の生徒のうち、 人は赤組で、 人は白組である。 生徒の一人である葵さんは、自分が何組かを知りたい。そこで、自分以外の 人がそれぞれ赤組であるか白組であるかを調べた。その結果は長さ…

AtCoder ABC 244 A - Last Letter (9Q, 灰色, 100 点)

文字列の末尾の文字を取得する方法を確認しておこう! 問題へのリンク 問題概要 長さ の文字列 が与えられる。 の末尾の文字を出力せよ。 解法 C++ では、文字列 S の末尾の文字は S.back() によって取得できます。 別解 文字列 S の長さが であるとき、末尾…

JOI 一次予選 2022 (第 3 回) B - アイスクリーム (7Q, 難易度 2)

整数の切り上げの問題。意外と正確に解くのは大変かもしれない。 問題へのリンク 問題概要 ベースとなるアイスクリームの金額は 250 円で、高さは cm である。追加のアイスクリームは 1 個につき 100 円で、1 個追加するごとにアイスクリームタワーの高さが …

AtCoder ABC 343 A - Wrong Answer (8Q, 灰色, 100 点)

パズルのような問題! 問題へのリンク 問題概要 0 以上 9 以下の 2 つの整数 が与えられる。 0 以上 9 以下の整数のうち、 とは異なるものを 1 つ求めよ。 考えたこと もし でなければ、0 を出力すれば事足りる。 もし であるならば、0 以外の数 (たとえば 1…

JOI 一次予選 2022 (第 3 回) A - 身長 (10Q, 難易度 1)

人生で初めてプログラミングをするときに、最初に解きたい問題の 1 つ 問題へのリンク 問題概要 JOI 君の 1 年前の身長は cm であった。JOI 君の今の身長は cm である。 身長はどれだけ伸びたか? 解法 身長の伸びは、 cm です。 整数値 を受け取る整数型変…

JOI 一次予選 2022 (第 2 回) D - 希少な数 (6Q, 難易度 2)

集計処理の面白い問題! 問題へのリンク 問題概要 長さ の数列 が与えられる。 に出現する整数のうち、出現回数が最小である整数を出力せよ。そのようなものが複数あるときは、そのうちの最小の整数を出力せよ。 制約 解法 このような出現頻度に関する問題で…

JOI 一次予選 2022 (第 2 回) C - 次の文字 (7Q, 難易度 2)

for 文を回しながら、「次の要素」も同時に見ていくという実装! 問題へのリンク 問題概要 文字 J, O, I からなる長さ の文字列 が与えられる。 について、 の 文字目が J であるとき、 の 文字目を出力せよ。 制約 解法 for 文を回しながら、 文字目の次の…

JOI 一次予選 2022 (第 2 回) B - 短針 (7Q, 難易度 1)

シミュレーションしてもいいし、数学的に綺麗に解くこともできる! 問題へのリンク 問題概要 時計は 1 〜 12 を繰り返す。 時の 時間後は、何時であるかを答えよ。 制約 解法 (1):シミュレーション から出発して、 回以下のことを繰り返せばよい。 1 増やす…

JOI 一次予選 2022 (第 1 回) D - 箱と鍵 (6Q, 難易度 3)

一見難しく見えるけど、実は単純な問題! 問題へのリンク 問題概要 整数 の書かれた 個の宝箱と、整数 の書かれた 個の鍵がある。 宝箱 は整数 が書かれた鍵を使うことで解錠できる。同じ鍵を使って複数の宝箱を解錠してもよい。 解錠できる宝箱の個数の最大…

JOI 一次予選 2022 (第 1 回) C - 複雑な文字列 (7Q, 難易度 2)

JOI は教育的な問題が多いね。 問題へのリンク 問題概要 文字 A, B, C, D, E のいずれかからなる文字列 が与えられる。 に 3 種類以上の文字列が登場するならば Yes、そうでないならば No を出力せよ。 解法 次のような 5 個の変数を用意しましょう! (変数…

AtCoder ABC 346 A - Adjacent Product (7Q, 灰色, 100 点)

for 文を回しながら、隣接要素を見ていく練習をしよう! 問題へのリンク 問題概要 個の整数 が与えられる。 に対して、 の値を順に求めよ。 制約 考えたこと for 文を回しながら、隣の要素も同時に見ていくスキルを習得しよう! コード #include <bits/stdc++.h> using name</bits/stdc++.h>…