XDOJ1042 - Qinz喝饮料

来源:互联网 发布:软件公司 知乎 编辑:程序博客网 时间:2024/04/29 17:15
Description

Qinz这就要乘飞机去参加百度总决赛了!在飞机上的饮料可是免费的,Qinz大牛可不能错过这次好机会。
飞机上共有n个座位,且排成一列,而且这一列上面都已经有乘客了(编号从1到n),每个乘客都需要一杯茶或者一杯咖啡。漂亮的空姐正准备给每位乘客送饮料。
在座位的前方有一个供应饮料的机器,可以提供茶叶和咖啡两种饮料,空姐每次可以在供应机处使用容量为
7的托盘,也就是可以放7杯饮料,且每次只可以装茶或者咖啡一种饮料。
空姐每次可以做如下动作:
1:从供应机处移动到第一个座位或从座位移动到供应机,需要一秒钟。
2:从座位i移动到座位i+1或者从座位i+1移动到座位i,需要一秒钟。
3:给每位乘客提供饮料,需要四秒钟。
4:空姐在返回供应机处取饮料需要47秒钟。

Qinz想要知道空姐给所有乘客供应饮料最少需要多长时间

Input
第一行包含一个整数T,表明有T组输入数据。
接下来的T组输入数据中,每组数据第一行包含两组整数 n(1<=n<=1000) 和 m (1<=m <=n),分别表示总的乘客人数与要喝茶的人数.
接下的一行有 m 个整数,每个整数 i 表示 编号为 i的乘客需要喝茶。其余的 n-m 位乘客喝咖啡。
Output
对于每组输入输出一个整数,表明供应饮料所需的最少时间。
Sample Input
3
2 1
1
2 2
2 1
15 7
1 2 3 4 5 6 7
Sample Output
108
59
261
Hint

在第一组数据中,第一位乘客喝茶而第二位乘客喝咖啡。空姐需要 从供应处取一杯茶,送给乘客1 并返回,这需要47+1+4+1=53.然后从供应处取一杯咖啡送给乘客2并返回。这需要47+2+4+2=55秒钟。
总共需要108秒钟。

#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;  }  


0 0
原创粉丝点击