3個の値を扱う問題
3 つのものを扱う系の問題、昔はよく出ていた。 問題へのリンク 問題概要 各桁の値が 1〜9 である 3 桁の整数 abc が与えられる。 bca と cab を出力せよ。 考えたこと 整数値で受け取るよりは、3 つの char 型変数 a, b, c で受け取るのが楽。 そうすると、…
条件が複雑なので、綺麗に整理しよう! 問題へのリンク 問題概要 3 文字の文字列 が与えられる。 の中に「一度だけ登場する文字」が存在するならば、そのうちのどれか 1 つを出力せよ。 一度だけ登場する文字が存在しない場合は -1 と出力せよ。 考えたこと …
条件を巧みに言い換えて整理しよう! 問題へのリンク 問題概要 3 個の整数 が与えられる。 がメディアンであるかどうかを判定せよ。 解法 がメディアンとは、すなわち、 を小さい順に並べたときに、 が 2 番目に小さいということである。そのような場合は が…
楽しい問題! 問題へのリンク 問題概要 3 個の整数 が与えられる。 これらの整数のうち、大きい方から 2 個の和を求めよ。 解法 から、「一番小さい数」を引けば良いでしょう。 のうち一番小さい数は、C++ では、関数 min() を用いて min({A, B, C}) と表せ…
この時代の一次予選は、まだちょっと難しかった 問題へのリンク 問題概要 3 個の整数 が与えられる。これらの整数のうち、2 番目に大きい値を求めよ。 制約 解法 (1) 最も楽だと思われる方法は、3 個の整数のうちの「最大値」と「最小値」を求めてあげる方法…
上手くやろう! 問題へのリンク 問題概要 3 桁の整数 が与えられるので、 の値を求めよ。 解法 まず、整数 の値を取得しよう。いろんな方法が考えられるが、3 桁の整数を文字列として入力を受け取り、0 文字目、1 文字目、2 文字目の値を見るのが簡単だと思…
記念すべき「JOI 一次予選」が最初に行われた年の問題。この頃はまだ A 問題も結構難しかったのですね。 問題へのリンク editorial 問題概要 3 個の整数 が与えられる。これらの整数は 1 か 2 のいずれかである。 1 と 2 のうち、どちらの方が多くあるかを判…
上手に場合分けしよう! 問題へのリンク editorial 問題概要 3 個の整数 が与えられる。 これらのうちの 1 個が、残りの 2 個の和として表せるときは 1 を出力し、そうでないときは 0 を出力せよ。 解法 「3 個の整数 のうちの 1 個」が残りの 2 個の和とし…
これ結構難しいと思う! 数学 IA の「場合の数」をやると、よく出て来るやつですね。 問題へのリンク 問題概要 英小文字のみからなる長さ 3 の文字列 が与えられます。 の各文字を並び替えて得られる文字列は、何種類ありますか? 解法 「3 個のものを並び替…
頭を柔らかくして考えよう。 問題へのリンク 問題概要 3 個の整数 から 2 個選んで和をとる。 この和の最大値を求めよ。 解法 3 個の整数 から 2 個選んだ和は の 3 通りがある。これらの最大値を求めればよい。 #include <bits/stdc++.h> using namespace std; int main() </bits/stdc++.h>…
慎重に場合分けしよう! 問題へのリンク 問題概要 3 個の整数 が与えられる。 これらのうち 2 個が等しい場合には、残りの 1 個の整数を答えよ。 3 個すべて互いに相異なる場合には、0 と答えよ。 解法 3 個の整数 のうち、2 個が等しいというのは、次の 3 …
文字列問題! 問題へのリンク 問題概要 長さ 3 の文字列が与えられる。これが 1 種類の文字のみから成るかどうかを判定せよ。 解法 文字列 S の 3 文字は S[0], S[1], S[2] と表せる。これらが全て等しいということは S[0] == S[1] S[1] == S[2] がともに満…
ちょっと難しい問題。 問題へのリンク 問題概要 3 文字の 'R' と 'S' のみからなる文字列 が与えられる。 において、'R' が最大で何個連続しているかを答えよ。 解法 ありうる文字列は 通りあることに注意しよう。よって、すべての文字列を調べることができ…
これは結構難しい。いろんな解法がある。 問題へのリンク 問題概要 個の整数 が与えられる。 これらのうち 2 個の値が等しく、残りの 1 個の値がそれらと異なるならば "Yes" を出力せよ。そうでなければ "No" を出力せよ。 解法 ABC-A の前提知識ではないが…
この頃によくあった 3 個の入力をどうのこうのする系! 問題へのリンク 問題概要 3 つの空港 A, B, C がある。 A-B 間の移動の所要時間は B-C 間の移動の所要時間は A-C 間の移動の所要時間は 今、これらの空港を順に訪れる (たとえば、B → A → C)。最短の所…
この問題は意味を理解するのが大変だと思う! 問題へのリンク 問題概要 3 つの整数 が与えられる。これらを適切に並び替えたときの 1 番目と 2 番目の差 2 番目と 3 番目の差 の和として、考えられる最小値を求めよ。 解法 実際に幾つかのケースで手を動かし…
この時期に多い「3 つの値をどうのこうのする」系の問題 問題へのリンク 問題概要 3 つの整数 が与えられる。 これらの数のうち 2 つは等しく、残り 1 つは異なる。その残りの 1 つの数を答えよ。 解法 次の 3 パターンがある。if 文で判定して答えれば OK。…
を文字列として受け取るのが楽だと思う! 問題へのリンク 問題概要 3 桁の整数 が与えられる。 が回文数であるかどうかを判定せよ。 解法 を整数ではなく、文字列として受け取ろう。そうすれば 「先頭の文字と末尾の文字が等しいかどうか」 を判定すれば OK…
この時代の ABC にありがちな「3 つの入力」を扱う系の問題 問題へのリンク 問題概要 3 つの整数 が与えられる。 これらの整数から 2 つ選んで足した値の最小値を求めよ。 解法 関数 min() を使うのが楽だと思う。3 つから 2 つ選んだ和は の 3 パターンがな…
これも「まずソートして考える」が効く系。でも、そうしなくても解ける。 問題へのリンク 問題概要 3 つの正の整数 が与えられる。 これらを 2 つのグループに分けて、各グループの数値の総和が等しくなるようにできるかどうかを判定せよ。 解法 (1):場合分…
3 つの整数についてあれこれ問う問題はこの時代多かった 問題へのリンク 問題概要 3 個の整数 がある。これらは 1 以上 100 以下の整数である。 これらの整数の種類数を求めよ。 コード この手の問題は、「配列として受け取ってソートする」テクニックが使え…
記念すべき rated ABC の最初の回 問題へのリンク 問題概要 3 つの整数 が与えられる。 これらをうまく並び替えることで 5, 7, 5 にできるかどうかを判定せよ。 コード 一番楽なのは、ソートして 5, 5, 7 になるかを判定することだと思う。 #include <bits/stdc++.h> using </bits/stdc++.h>…
意外と頭がこんがらがるかもしれないですね。100 点問題で必須となるテクニックではないですが、ソートすると考えやすいと思います。 問題へのリンク 問題概要 個の整数 が与えられる。 これら 個の整数を適切に並び替えることで、等差数列にすることが可能…
入出力の練習をしましょう。 問題へのリンク editorial 問題概要 3 人の生徒がそれぞれ 個、 個、 個の金平糖をもらいました。 これからそれぞれの生徒たちに何個かの金平糖を追加で渡すことで、3 人の生徒がもらった金平糖の個数が等しくなるようにしたいと…