본문 바로가기

코드포스

[Codeforces Round #834 (Div. 3)] B. Lost Permutation

 


※. 순열에 비어있는 수가 있다면 확실하게 잃어버린 요소 [1,3,4] -> 2

 

※.비어있는 수를 다 더한다음 더한 값이 s보다 작으면 뒤의 요소들을 더한다.

(요소들의 input값이 50까지, 요소값은 51이후부터의 합이 1000이 되기 전까지 올 수 있다.)

 

 


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;

import java.util.*;
import java.util.stream.*;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		
		int T = Integer.parseInt(br.readLine());
		while(T --> 0) {
			boolean answer = false;
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			int m = Integer.parseInt(st.nextToken());
			int s = Integer.parseInt(st.nextToken());
			int[] arr = new int[51];
			int max = 0;
			st = new StringTokenizer(br.readLine(), " ");
			for(int i = 0; i < m; i++) {
				int a = Integer.parseInt(st.nextToken());
				arr[a]++;
				max = Math.max(max, a);
			}
			
			int sum = 0;
			for(int i = 1; i < max; i++) {
				if(arr[i] == 0) sum += i;
			}
			if(sum == s)
				answer = true;
			else if(sum < s) {
				for(int i = max+1; i <= 1000; i++) {
					sum += i;
					if(sum == s)
						answer = true;
					else if(sum > s)
						break;
				}
			}
			
			
			if(answer)
				sb.append("YES").append('\n');
			else
				sb.append("NO").append('\n');
		}
		System.out.println(sb);
    }
}