AtCoder Beginner Contest 132 C - Divide the Problems
最近AtCoderで伸び悩んでいる、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc132/tasks/abc132_c)にて開催されました、AtCoder Beginner Contest 132 C問題「C - Divide the Problems」の問題と僕との戦闘記です。
0.はじめに
1.問題文
高橋君は、 N 個の競技プログラミング用の問題をつくりました。 それぞれの問題には 1 から N の番号がついており、問題 i の難易度は整数 d i で表されます(大きいほど難しいです)。
高橋君はある整数 K を決めることで、
難易度が K 以上ならば「 A R C 用の問題」 難易度が K 未満ならば「 A B C 用の問題」 という風に、これらの問題を二種類に分類しようとしています。
「 A R C 用の問題」と「 A B C 用の問題」が同じ数になるような整数 K の選び方は何通りあるでしょうか。
2.制約
- 2 ≦ N ≦ 105
- N は偶数である。
- 1 ≦ d i ≦ 105
- 入力は全て整数である。
3.入力例
- 入力
14 99592 10342 29105 78532 83018 11639 92015 77204 30914 21912 34519 80835 100000 1
- 出力
42685
4.初見の感想
- Kの取り方は「ABC問題の最大値<K≦ARC用問題の最小値」という条件で表せる
→つまり「ARC用問題の最小値ーABC問題の最大値」でKのとりうる数がわかる
- とりあえずソートは必要
- ABC問題の最大値はN/2-1番目の配列、ARCの最小値はN/2番目の配列に格納されている
5.コードと簡単な解説
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { //入力 int N = int.Parse(Console.ReadLine()); string[] input = Console.ReadLine().Split(); int[] list = new int[N]; for(int i = 0; i < N; i++) { list[i] = int.Parse(input[i]); } //ソート Array.Sort(list); //計算&出力 Console.WriteLine(list[N / 2] - list[N / 2 - 1]); } }
6.最後に
今回はC問題が簡単だったみたいですね~