Atcoder Beginner Contest071 C問題より、問題文は以下の通りです
問題文
太さが無視できる棒が N 本あります. i 番目の棒の長さは Ai です.
すぬけ君は,これらの棒から 4 本の異なる棒を選び,それらの棒を辺として長方形(正方形を含む)を作りたいです. 作ることができる最大の長方形の面積を求めてください.
制約
4≤N≤10^5
1≤Ai≤10^9
Ai は整数
http://abc071.contest.atcoder.jp/tasks/arc081_a
此方の問題を以下のプログラムで解いたところ、半分以上不正解となりましたが、理由が分かりません
#include<iostream> #include<stdlib.h> using namespace std; int compar(const int *val1, const int *val2); int main(){ int N,i,x=0,y=0; cin>>N; int A[N]; for(i=0;i<N;i++){ cin>>A[i]; } qsort(A,N,sizeof(int),(int (*)(const void *, const void *))compar); for(i=0;i<N-1;i++){ if(A[i]==A[i+1]){ x=A[i];i+=2;break; } } for(;i<N-1;i++){ if(A[i]==A[i+1]){ y=A[i];break; } } cout<<x*y<<endl; return 0; } int compar(const int *val1, const int *val2) { if ( *val1 > *val2 ) { return -1; } else if ( *val1 == * val2 ) { return 0; } else { return 1; } } コード
この問題文は、入力された数のうち、2回以上出現する数字を大きい順に2つ選び出し、その積を求めることと言い換えられます
入力された数字を配列Aに格納し、それをまず降順にソートします
ループ文により、A[i]とA[i+1]が同じであればその値をxに代入し、iに2プラスします
次に、iの値はそのままでyについても同じことをすることで、yに2番目に大きい2回以上出現した数字が代入されます
最後にそれらを掛けて出力して終了です
用意されている入力例で試したところ合ってそうなのですが、全然違うみたいです
どなたか、どこがおかしいか分かる方がいましたらご助力願います
よろしくお願いいたします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/17 16:11
退会済みユーザー
2017/10/17 16:13
2017/10/17 16:38
退会済みユーザー
2017/10/17 16:43
退会済みユーザー
2017/10/17 23:00 編集
2017/10/18 03:11
退会済みユーザー
2017/10/18 10:20
2017/10/19 05:31