列表

详情


NC223520. Convoy

描述

You and your friends have gathered at your house to prepare for the Big Game, which you all plan to attend in the afternoon at the football stadium across town. The problem: you only have k cars between you, with each car seating five people (including the driver), so you might have to take multiple trips to get all n people to the stadium. In addition, some of your friends know the city better than others, and so take different amounts of time to drive to the stadium from your house. You’d like to procrastinate as long as possible before hitting the road: can you concoct a transportation plan that gets all people to the stadium in the shortest amount of time possible? 
More specifically, each person i currently at your house can drive to the stadium in t_i minutes. All k cars are currently parked at your house. Any person can drive any car (so the cars are interchangeable). After a car arrives at the stadium, any person currently at the stadium can immediately start driving back to your house (and it takes person i the same amount of time  to drive back as to drive to the stadium), or alternatively, cars can be temporarily or permanently parked at the stadium. Drivers driving to the stadium can take up to four passengers with them, but drivers driving back can NOT take any passenger. You care only about getting all n people from your house to the stadium—you do NOT need to park all k cars at the stadium, if doing so would require more time than an alternative plan that leaves some cars at your house.

输入描述

The first line of input contains two space-separated integers n and k (1 ≤ n, k ≤ 20 000), the number of people atyour house and the number of available cars. Then follow n lines containing a single integer each; the  such integeris the number of seconds t_i (1 ≤t_i≤ 1 000 000) that it takes person i to drive from your house to the stadium, orvice-versa

输出描述

Print the minimum number of seconds it takes to move all n people from your house to the stadium, if all people coordinate and drive optimally.

示例1

输入:

11 2
12000
9000
4500
10000
12000
11000
12000
18000
10000
9000
12000

输出:

13500

示例2

输入:

6 2
1000
2000
3000
4000
5000
6000

输出:

2000

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 13ms, 内存消耗: 512K, 提交时间: 2021-08-20 09:36:00

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[20005];
int n,k;
int fun(ll x)
{
	ll sum=0;
	for(int i=1;i<=k;i++)
	{
		if(x>=a[i])
		{
			sum=sum+5+(x-a[i])/(2*a[i])*4;
			if(sum>=n)
			return 1;
		}
	}
	return 0;
}
int main()
{
	cin>>n>>k;
	k=min(n,k);
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	} 
	sort(a+1,a+1+n);
	ll l=0,r=1e11,mid;
	while(l<r)
	{
		mid=(l+r)>>1;
		if(fun(mid))
		r=mid;
		else
		l=mid+1;
	}
	cout<<l;
	return 0;
} 

上一题