[Codeforces] C. Reorder the Array [Round #497]
問題
英語が分からなくて例題が分からなかった問題です。
考え方
元の配列の要素よりも大きくなるように並び変えます。
例えば、1, 2, 3, 4 であれば、2, 3, 4, 1と並び替えれると元の要素よりも大きい要素の数は3となります。
どのように数え上げれば良いのかですが、初めに配列を昇順に並び替えます。
ここで配列のインデックスを、 とします。
のとき
カウントを増やし、、 とします。
上記以外のとき
とします。
これらを となるまで繰り返します。
コード
import java.util.Arrays; import java.util.Scanner; public class ProblemC { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int N = scan.nextInt(); long a[] = new long[N]; for(int i = 0; i < N; i++) { a[i] = scan.nextLong(); } scan.close(); if(N == 1) { System.out.println(0); System.exit(0); } Arrays.sort(a); int cnt = 0; int l = 0; int r = 1; while(r < N) { if(a[l] < a[r]) { cnt++; l++; r++; }else { r++; } } System.out.println(cnt); } }