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 位乘客喝咖啡。
接下来的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
2 1
1
2 2
2 1
15 7
1 2 3 4 5 6 7
Sample Output
108
59
261
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
- XDOJ1042 - Qinz喝饮料
- XDU 1042 Qinz喝饮料(模拟)
- 喝饮料问题
- 以后少喝碳酸饮料
- 你喝过这样一种饮料么?
- 程序员必喝的健康饮料
- 那些年喝过的饮料
- UESTC 1606 难喝的饮料
- 吸管除了喝饮料还能干嘛?做机器人呀~
- 300瓶饮料喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料?
- 三个空饮料瓶可以换一瓶饮料,给你1箱(50瓶)饮料,你能喝多少瓶饮料?
- 三个空饮料瓶可以换一瓶饮料,给你1箱(50瓶)饮料,你能喝多少瓶饮料?
- java 假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料?
- 假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料?
- UESTC 1606 难喝的饮料 0-1背包+完全背包
- 喝
- 喝
- 喝
- 数据结构的Java实现——顺序表
- 准备使用kbengine做项目
- 在Linux屏幕上画框和抛物线(framebuffer,mapped)
- C# WebQQ协议群发机器人(二)
- 7 Signs it is Time to Quit your Job
- XDOJ1042 - Qinz喝饮料
- UIButton 使用不规则图片,以及 长按短按事件
- 默认编码问题
- 我们需要什么样智能恒温器?
- 版本宏判断
- TI BLE-CC254x-1.3.2 SimpleBLEPeripheral MINI Keyfob 编译错误
- 当出现error: Unable to find vcvarsall.bat该如何处理
- mysql导入到处数据(实用版)
- typedef void * POINTER_64 PVOID64错误