Codeforces Round #631 (Div. 2)A. Dreamoon and Ranking Collection

Dreamoon is a big fan of the Codeforces contests.

One day, he claimed that he will collect all the places from 1 to 54 after two more rated contests. It’s amazing!

Based on this, you come up with the following problem:

There is a person who participated in n Codeforces rounds. His place in the first round is a1, his place in the second round is a2, …, his place in the n-th round is an.

You are given a positive non-zero integer x.

Please, find the largest v such that this person can collect all the places from 1 to v after x more rated contests.

In other words, you need to find the largest v, such that it is possible, that after x more rated contests, for each 1≤i≤v, there will exist a contest where this person took the i-th place.

For example, if n=6, x=2 and a=[3,1,1,5,7,10] then answer is v=5, because if on the next two contest he will take places 2 and 4, then he will collect all places from 1 to 5, so it is possible to get v=5.

Input
The first line contains an integer t (1≤t≤5) denoting the number of test cases in the input.

Each test case contains two lines. The first line contains two integers n,x (1≤n,x≤100). The second line contains n positive non-zero integers a1,a2,…,an (1≤ai≤100).

Output
For each test case print one line containing the largest v, such that it is possible that after x other contests, for each 1≤i≤v, there will exist a contest where this person took the i-th place.

Example
input
5
6 2
3 1 1 5 7 10
1 100
100
11 1
1 1 1 1 1 1 1 1 1 1 1
1 1
1
4 57
80 60 40 20
output
5
101
2
2
60

Note
The first test case is described in the statement.

In the second test case, the person has one hundred future contests, so he can take place 1,2,…,99 and place 101 on them in some order, to collect places 1,2,…,101.

这个题关键是读懂题,题目太难懂了,需要反复读题才能明白
题意:
x是指未来的比赛场次,具体对应的比赛名次
目的是让,名次能从1,2,3,…,v-1,v.
x若取得好,就可以让v值取最大

可以结合样例模拟一下

#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int v[N];
int main()
{
    int t;
    cin >> t;
    while (t--) 
    {
        int n, x;
        cin >> n >> x;
        memset(v, 0, sizeof(v));
        for (int i = 1; i <= n; i++) 
        {
            cin>>a[i];
            v[a[i]] = 1;
        }
        int p;
        for (int i = 1; i <= 200; i++)
            if (v[i] == 0)
            {
                x--;
                if (x==0)
                {
                    p = i;
                    break;
                }
            }
        for (int i = p + 1; i <= 200; i++)
            if (v[i] == 0)
                break;
            else
                p = i;
        printf("%d\n", p);
    }
    return 0;
}

码字不易,留个赞吧~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值