zuka
ABCをコツコツ解いていきます。
本記事は,管理人の競技プロ精進日記としてログを取ったものです。モチベーションを爆上げするために,積極的にアウトプットしていく作戦です。
これから競技プログラミングを始めようと考えている人や,なんとなく敷居が高いと感じている人の参考になれば嬉しく思います。その他の記事は以下をご覧ください。
目次
本記事の概要
Atcoderで初心者用のコンテストとして開催されているAtcoder Beginner Contest(通称ABC)を解いていくものです。今回はABC178-B「Product Max」です。
ポイント
負の場合を考慮する最大最小問題でした。B問題ということで「全探索やろ!」と早とちりして実装を始めてしまいましたが,途中で制約のオーダーが$10^9$であることに気付き方針変更。積が最大となるパターンとして考えられるのは,各領域の端点を考えた以下の1パターンのみです。
- $a\times c$
- $a \times d$
- $b \times c$
- $b \times d$
解答はこれらの最大値を出力すればOKです。定義域が正の場合や負の場合,正負をまたぐ場合で場合分けするのはかなり面倒臭いので,上の4候補の最大値を取る方法が一番簡単だと思います。
おさえるべき内容
最大値を取りうるパターンの全列挙
実装
#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
using namespace std;
typedef long long ll;
#define rep(i, n) for (ll i = 0; i < (ll)(n); i++)
#define repi(i, a, b) for (ll i = (ll)(a); i < (ll)(b); i++)
ll a, b, c, d;
int main(){
cin >> a >> b >> c >> d;
ll ans = max({a*c, a*d, b*c, b*d});
cout << ans << endl;
}
コメント