Problem:
Score : 300 points

Problem Statement

Given are an integer X and an integer sequence of length N: p_1, \ldots, p_N.

Among the integers not contained in the sequence p_1, \ldots, p_N (not necessarily positive), find the integer nearest to X, that is, find the integer whose absolute difference with X is the minimum. If there are multiple such integers, report the smallest such integer.

Constraints

1 \leq X \leq 100

0 \leq N \leq 100

1 \leq p_i \leq 100

p_1, \ldots, p_N are all distinct.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

X N
p_1 ... p_N

Output

Print the answer.

Sample Input 1

6 5
4 7 10 6 5

Sample Output 1

8

Among the integers not contained in the sequence 4, 7, 10, 6, 5, the one nearest to 6 is 8.

Sample Input 2

10 5
4 7 10 6 5

Sample Output 2

9

Among the integers not contained in the sequence 4, 7, 10, 6, 5, the ones nearest to 10 are 9 and 11. We should print the smaller one, 9.

Sample Input 3

100 0

Sample Output 3

100

When N = 0, the second line in the input will be empty. Also, as seen here, X itself can be the answer.

Solution in Rust (1.42.0) (judge verdict: Accepted)

use std::io::*;
use std::str::FromStr;

fn read<T: FromStr>() -> T {
    let stdin = stdin();
    let stdin = stdin.lock();
    let token: String = stdin
        .bytes()
        .map(|c| c.expect("failed to read char") as char)
        .skip_while(|c| c.is_whitespace())
        .take_while(|c| !c.is_whitespace())
        .collect();
    token.parse().ok().expect("failed to parse token")
}

fn main() {
    let x: u32 = read();
    let n: usize = read();
    let mut p: Vec<u32> = (0..n).map(|_| read()).collect();
    p.sort();
    let mut point: usize = 0;
    let mut flag = false;
    for (i, s) in p.iter().enumerate() {
        if *s == x {
            point = i;
            flag = true;
            break;
        }
    }
    
    if !flag { 
        print!("{}", x)
    } else {
        let mut counter = 0;
        // check under
        for i in (0..point+1).rev() {
            if  x - counter != p[i] {
                break
            }
            counter += 1;
        }   
        let under = counter;
        counter = 0;
        // check upper
        for i in point..n {
            if  x + counter != p[i] {
                break
            }
            counter += 1;
        }  
        print!("{}", if under > counter{
            x + counter
        }else{
            x - under
        }) 

    }
}