简单题
题目
有一个长度为 nn 的花园,一共有 kk 个水龙头,分别在x_1,x_2, \dots x_kx1,x2,…xk 的位置。第 tt 秒每个水龙头可以浇灌到它的前第 t-1t−1 个方格和它后第 t-1t−1 个方格,第 11 秒时则只浇灌自己所在的方格,问浇灌完花园的时间。
#include<bits/stdc++.h>
using namespace std;
const int N=1000;
int a[N];
int n,k;
int main()
{
int m,p;
cin>>m;
while(m--)
{
queue<int> q;
cin>>n>>k; //n个花园,k个水龙头
memset(a,0,sizeof a);
for(int j=1;j<=k;j++)
{
cin>>p;
a[p]=2;
q.push(p);
}
int time=1;
while(q.size())
{
int flag=1;
int t=q.front();
q.pop();
int temp=time-1;
if(t+temp>0 && t+temp<=n &&a[t+temp]!=2) a[t+temp]=1;
if(t-temp>0 && t-temp<=n &&a[t-temp]!=2) a[t-temp]=1;
for(int i=1;i<=n;i++)
if(a[i]==0) flag=0;
if(flag==1) break;
if(!q.size()) //一趟已经走完;
{
for(int i=1;i<=n;i++)
{
if(a[i]==2) q.push(i); //重新构建队列进行递归
}
time++;
}
}
cout<<time<<endl;
}
return 0;
}