编程介的小学生 2020-01-16 11:39 采纳率: 20.5%
浏览 77

Walking the Plank 遍历的问题

Problem Description
A bunch of pirates have successfully conquered a commercial vessel. The ship itself is too badly damaged, so the entire shipload needs to be transferred to the pirate ship.
The pirates have anchored a plank to both ships, which the pirates can use to go from one ship to the other, but it can only support one pirate at a time.
Each pirate executes the following routine:
1. Walk across the plank from the pirate ship to the commercial ship
2. Pick up an item from the cargo hold and return to the plank
3. Cross the plank back to the pirate ship with the item
4. Put the item in the cargo hold and return to the plank
Each of these four steps takes a given amount of time for each pirate. Every pirate will repeat these steps until the number of pirates on the commercial ship equals the number of items there (i.e. there's nothing more for the pirate to collect).
If a pirate gets to the plank and it's in use by another pirate, he will wait at his side of the plank. When the plank is vacated and there are pirates on both sides of the plank, the pirates on the side of the commercial vessel (carrying some item) will get to go first. At both sides of the plank, the pirates queue up, i.e. the first one to get there will be the first one to cross. Should two or more pirates arrive at the same side of the plank at the exact same time, the pirate who was slowest (i.e. the one who has taken the most time to and from the cargo hold on this ship) gets to go first.Can you determine how long it takes before the last pirate has crossed the plank with the last item?

Input
The first line of the input contains a single number: the number of test cases to follow. Each test case has the following format:
1.One line with two integers N and P, satisfying 1 <= N <= 100,000 and 1 <= P <= 1,000: the number of items on the commercial vessel and the number of pirates, respectively.
2.P lines, each with 4 integers t1 through t4, satisfying 1 <= ti <= 1,000: the time in seconds it takes this pirate to complete each step (as listed above).
At the start, all pirates are queued up at the plank on the pirate ship in the order given in the input (the first pirate is the first to cross over).

Output
For every test case in the input, the output should contain one integer on a single line: the time in seconds between the time the first pirate starts crossing the plank and the time the last pirate has crossed the plank carrying the last item.

Sample Input
3
3 3
10 3 10 3
10 3 10 3
10 3 10 3
3 2
10 10 10 10
1 9 1 8
3 2
3 2 3 6
4 2 5 5

Sample Output
63
50
24

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
    • ¥15 牛顿斯科特系数表表示
    • ¥15 arduino 步进电机
    • ¥20 程序进入HardFault_Handler
    • ¥15 oracle集群安装出bug
    • ¥15 关于#python#的问题:自动化测试
    • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
    • ¥15 教务系统账号被盗号如何追溯设备
    • ¥20 delta降尺度方法,未来数据怎么降尺度
    • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效