はまやんはまやんはまやん

hamayanhamayan's blog

Make a Rectangle [AtCoder Regular Contest 081 C]

http://arc081.contest.atcoder.jp/tasks/arc081_a

解法

http://arc081.contest.atcoder.jp/submissions/1529805

長方形を作るには同じ長さの棒が2セット必要である。
そのため、同じ長さの棒を1セットとして、配列vに入れておく。
長方形の面積を最大化するには、そのセットのうち、最長の2つを使えばよい。
ソートして最長の2つを使って面積を求めれば答え。

typedef long long ll;
int N, A[101010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    rep(i, 0, N) cin >> A[i];
 
    vector<int> v;
    map<int, int> cnt;
    rep(i, 0, N) {
        cnt[A[i]]++;
        if (cnt[A[i]] == 2) cnt[A[i]] = 0, v.push_back(A[i]);
    }
    sort(v.begin(), v.end(), greater<int>());
 
    ll ans = 0;
    if (2 <= v.size()) ans = 1LL * v[0] * v[1];
    printf("%lld\n", ans);
}