Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

プログラミングコンテスト

今年も白虎大学でプログラミングコンテストが開催されることになりました。コンテストではいくつかの問題が出題され、それぞれ難易度に応じた得点が割り当てられています。

実行委員会は、解いた問題の数とそれらの得点の両方を考慮し、次のルールに基づいて各チームのスコアを計算することにしました。

「あるチームが正解した問題のうち、得点が A 以上であるものが A 問以上あることを満たすような最大の A を、そのチームのスコアとする」

あるチームが正解した問題の数と、それらの問題の得点から、チームのスコアを計算するプログラムを作成せよ。

Input

入力は以下の形式で与えられる。

N
p1 p2 ... pN

１行目にチームが正解した問題の数 N (1 ≤ N ≤ 100) が与えられる。２行目に正解した各問題の得点 pi(1 ≤ pi ≤ 100) が与えられる。

Output

チームのスコアを１行に出力する。

Sample Input 1

7
5 4 3 10 2 4 1

Sample Output 1

4

得点が 4 以上の問題を 4 問以上正解しているので、スコアは 4 となる。

Sample Input 2

3
1 1 100

Sample Output 2

1

得点が 1 以上の問題を 1 問以上正解しているので、スコアは 1 となる。

Sample Input 3

4
11 15 58 1

Sample Output 3

3

得点が 3 以上の問題を 3 問以上正解しているので、スコアは 3 となる。

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.IO.Compression;
using System.IO.Pipes;
using System.Linq;
using System.Numerics;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using static System.Console;
using static System.Math;

namespace AtCoder
{
    class Program
    {
        static void Main(string[] args)
        {
            var N = ReadInt();
            var P = ReadInts();

            for (int i = P.Max(); i > 0; i--)
            {
                var list = P.Select(x => x)
                    .Where(x => x >= i);

                if (list.Count() >= i)
                {
                    WriteLine(i);
                    return;
                }
            }
        }
        private static string Read() { return ReadLine(); }
        private static string[] Reads() { return (Read().Split()); }
        private static int ReadInt() { return int.Parse(Read()); }
        private static long ReadLong() { return long.Parse(Read()); }
        private static double ReadDouble() { return double.Parse(Read()); }
        private static int[] ReadInts() { return Array.ConvertAll(Read().Split(), int.Parse); }
        private static long[] ReadLongs() { return Array.ConvertAll(Read().Split(), long.Parse); }
        private static double[] ReadDoubles() { return Array.ConvertAll(Read().Split(), double.Parse); }
    }
}