問題
https://codeforces.com/contest/1385/problem/A (新しいタブで開く)
問題文
正の整数 x , y , z x,y,z x , y , z に対して、 x = max ( a , b ) , y = max ( a , c ) , z = max ( b , c ) x = \max(a, b), y = \max(a, c), z = \max(b, c) x = max ( a , b ) , y = max ( a , c ) , z = max ( b , c ) となるような a , b , c a,b,c a , b , c は存在する?
制約
1 ≤ t ≤ 2 × 1 0 4 1 \le t \le 2 \times 10^4 1 ≤ t ≤ 2 × 1 0 4
1 ≤ x , y , z ≤ 1 0 9 1 \le x,y,z \le 10^9 1 ≤ x , y , z ≤ 1 0 9
サンプル
5
3 2 3
100 100 100
50 49 49
10 30 20
1 1000000000 1000000000
YES
3 2 1
YES
100 100 100
NO
NO
YES
1 1 1000000000
考察
実験
全 6 パターンを考えてみる。まあ順番は適当に入れ替えてるんですけど
b ≤ c ≤ a ⇒ x = a , y = a , z = c b \le c \le a \Rightarrow x = a, y = a, z = c b ≤ c ≤ a ⇒ x = a , y = a , z = c
c ≤ b ≤ a ⇒ x = a , y = a , z = b c \le b \le a \Rightarrow x = a, y = a, z = b c ≤ b ≤ a ⇒ x = a , y = a , z = b
a ≤ c ≤ b ⇒ x = b , y = c , z = b a \le c \le b \Rightarrow x = b, y = c, z = b a ≤ c ≤ b ⇒ x = b , y = c , z = b
c ≤ a ≤ b ⇒ x = b , y = a , z = b c \le a \le b \Rightarrow x = b, y = a, z = b c ≤ a ≤ b ⇒ x = b , y = a , z = b
a ≤ b ≤ c ⇒ x = b , y = c , z = c a \le b \le c \Rightarrow x = b, y = c, z = c a ≤ b ≤ c ⇒ x = b , y = c , z = c
b ≤ a ≤ c ⇒ x = a , y = c , z = c b \le a \le c \Rightarrow x = a, y = c, z = c b ≤ a ≤ c ⇒ x = a , y = c , z = c
こうしてみると、以下の関係が成り立ってそう。定義を見れば明らかだけど
max = a ⇒ x = y > z \max = a \Rightarrow x = y > z max = a ⇒ x = y > z
max = b ⇒ x = z > y \max = b \Rightarrow x = z > y max = b ⇒ x = z > y
max = c ⇒ y = z > x \max = c \Rightarrow y = z > x max = c ⇒ y = z > x
解作成
max = a ⇒ x = y > z \max = a \Rightarrow x = y > z max = a ⇒ x = y > z について考えてみる。
こうしたとき、 a a a は決まるけど、 b , c b, c b , c はどうする?
z = max ( b , c ) z = \max(b, c) z = max ( b , c ) で、「条件を満たすものなら何を出力してもいいよ」なので、 b = c = z b = c = z b = c = z にしちゃえばいい。
他も同様。
コード
https://codeforces.com/contest/1385/submission/126229275 (新しいタブで開く)
void solve ( ) {
int x, y, z;
cin >> x >> y >> z;
if ( x == y && y == z) {
cout << "YES" << endl;
cout << x << " " << y << " " << z << endl;
}
else if ( x == y && x > z) {
cout << "YES" << endl;
cout << x << " " << z << " " << z << endl;
}
else if ( y == z && z > x) {
cout << "YES" << endl;
cout << x << " " << x << " " << y << endl;
}
else if ( z == x && x > y) {
cout << "YES" << endl;
cout << y << " " << x << " " << y << endl;
}
else {
cout << "NO" << endl;
}
}