题目链接
本来以为会是个高深的动态问题,没想到还是贪心(
枚举离洞最近的老鼠,模拟猫和老鼠的行动即可
#include<bits/stdc++.h>
using namespace std;
#define N 400005
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n,a[N],m;
cin>>m>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n,cmp);
int ans,flag;//ans存遍历下标,flag存猫的位置
for(ans=0,flag=0;ans<n;ans++)//从最近的老鼠开始遍历
{
if(flag>=a[ans]) break;//开始时判断:如果猫的位置在老鼠位置上或者右边就跳出
while(a[ans]<m)//暴力枚举出奇迹
{
a[ans]++;//老鼠走一步
flag++;//猫走一步
}
}
cout<<ans<<endl;
}
return 0;
}