数据量很小,直接模拟就行了。枚举n个数字。bob想赢,就每次去掉一个1。alice没有1就输了。每次alice去掉的数字直接放成最大值,排序即可。
代码如下
#include <bits/stdc++.h>
#include <cstdlib>
#define int long long
using namespace std;
int n;
bool pan(int x, vector<int> a)
{
int k = x;
while (k)
{
sort(a.begin(), a.end());
bool flag = false;
for (int i = n - 1; i >= 0; i --)
{
if (a[i] <= k)
{
flag = true;
a[i] = 1e9;
break;
}
}
if (!flag) return 0;
a[0] += k;
k --;
}
return true;
}
void solve()
{
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i ++) cin >> a[i];
int k = n;
for (int i = k; i >= 0; i --)
{
if (pan(i, a))
{
cout << i << "\n";
return ;
}
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t --)
{
solve();
}
return 0;
}