Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) B - Maximize Mex
题目大意:
给你一个数组,你可以将数组中的某些数加任意个 x x x,问你操作后最大的 M E X MEX MEX.
基本思路:
如果遇到当前数字 k k k的个数大于一个,就把剩余的几个数都加上 x x x,使得该数字只剩下一个
故我们用 m a p map map记录每个数的个数,遇到个数为 0 0 0 则输出答案
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long int
signed main()
{
int T;
cin >> T;
while (T--)
{
int n, x;
cin >> n >> x;
unordered_map<int, int> rec;
for (int i = 1; i <= n; i++)
{
int t;
cin >> t;
rec[t]++;
}
int ans = -1;
for (int j = 0;; j++)
{
if (rec[j] == 0)
{
ans = j;
break;
}
else
{
int t = rec[j] - 1;
rec[j] -= t;
rec[j + x] += t;
}
}
cout << ans << endl;
}
return 0;
}