問題
https://codeforces.com/contest/1385/problem/A
問題文
正の整数 x,y,z に対して、 x=max(a,b),y=max(a,c),z=max(b,c) となるような a,b,c は存在する?
制約
- 1≤t≤2×104
- 1≤x,y,z≤109
サンプル
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
- c≤b≤a⇒x=a,y=a,z=b
- a≤c≤b⇒x=b,y=c,z=b
- c≤a≤b⇒x=b,y=a,z=b
- a≤b≤c⇒x=b,y=c,z=c
- b≤a≤c⇒x=a,y=c,z=c
こうしてみると、以下の関係が成り立ってそう。定義を見れば明らかだけど
- max=a⇒x=y>z
- max=b⇒x=z>y
- max=c⇒y=z>x
解作成
max=a⇒x=y>z について考えてみる。
こうしたとき、 a は決まるけど、 b,c はどうする?
z=max(b,c) で、「条件を満たすものなら何を出力してもいいよ」なので、 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;
}
}