思路:每次倒上饮料后从最远的地方往回走,直到全部服务完或者没有饮料为止,直接模拟即可。
#include<stdio.h>
//模拟题,每次取茶和咖啡都一样,每次取7杯饮料然后从最远的地方往回送,直到全部服务完毕
int main()
{
int t,n,m,i,j,k;
int timepause;
scanf("%d",&t);
while(t--)
{
int time=0;//总时间
int mark[1010]={0};//喝咖啡的人设置为0,茶为1,已被服务-1
scanf("%d%d",&n,&m);//总人数,喝茶人数
j=m;
while(j--)
{
int temp;
scanf("%d",&temp);
mark[temp]=1;
}
int count=0;//统计共服务了多少人
int ans=0;//统计一次服务了多少人(防止一次服务超过七个人)
//先统计喝茶的人
for(i=n;i>=1;i--)
{
if(mark[i]==1)//要喝茶的人
{
if(ans==0)//从饮料机处找出最远的那一个要送饮料的人,再往前送
{
timepause=i;
time+=47;//每次取饮料时间
time+=i;//从饮料机到最远那个人所用的时间
mark[i]=-1;
ans++;//统计一次服务了多少人(防止一次服务超过七个人)
count++;
}
else//从上一个位置往这里送饮料
{
mark[i]=-1;
time+=(timepause-i);
timepause=i;
ans++,count++;
}
if(count==m)//喝茶的人全部服务完毕
{
time+=i;//返回饮料机
break;
}
if(ans==7)
{
time+=i;//返回饮料机
ans=0;
}
}
}
//开始统计喝咖啡的人
ans=0;
for(i=n;i>=1;i--)
{
if(mark[i]==0)//要喝咖啡的人
{
if(ans==0)//找最远的人
{
timepause=i;
time+=47;//每次取饮料时间
time+=i;//从饮料机到最远那个人所用的时间
mark[i]=-1;
ans++;//统计一次服务了多少人(防止一次服务超过七个人)
count++;
}
else
{
mark[i]=-1;
time+=(timepause-i);
timepause=i;
ans++,count++;
}
if(count==n)//全部服务完毕
{
time+=i;//返回饮料机
break;
}
if(ans==7)
{
ans=0;//返回饮料机
time+=i;
}
}
}
time+=(4*n);//最后加上每个人的服务时间
printf("%d\n",time);
}
return 0;
}