ARC081 C : Make a Rectangle(300)

作成日:2017.08.24
最終更新日:2017.08.24

問題概要

問題本文

 長さ$A_i$の棒が$N$本ある。 これらのうち異なるものを4本選び長方形を作る時、作ることのできる最大の長方形の面積を求めよ。 但し棒が長方形からはみ出してはならず、長方形が作れない場合は$0$を出力せよ。
制約
$4 \leq N \leq 10^5$
$1 \leq A_i \leq 10^9$
$A_i$は整数

考え方

 長方形の向かい合う辺の長さは等しいから、同じ長さの棒を2本1組で考える。 求めるものは面積最大の長方形だから、組になった棒を長いものから2組選んで用いれば良い。

ソースコード

マクロ等はこちら

int N;
int A[102345];

int main(){
	scanf("%d" , &N);
	repp(i,0,N){
		scanf("%d" , A + i);
	}
	sort(A,A+N,greater<int>());
	LL x = 0, y = 0;
	repp(i,1,N){
		if(A[i-1] == A[i]){
			if(x == 0){
				x = A[i];
				++i;
			} else {
				y = A[i];
				break;
			}
		}
	}
	printf("%lld\n" , x * y);
	return 0;
}

解法まとめ

 長い棒から2本1組にできるかを見て、組にできるものを2つ選ぶ。(9-22行)

ARC081の他の問題 D E F

自己紹介

プログラミングとか合成音声とか
詳しくはこちら
twitter

プライバシーポリシー

個人情報利用についてはこちら

最終更新日:2023.03.05

お問い合わせ

このページに関するお問い合わせはこちら

競技プログラミングMENU

問題を解くまでの道のり

その他

全体MENU

寄付モドキ

0冂から10000冂まで
詳しくはこちら