题目描述:
There is a ferry across the river that can take n cars across the river in t minutes and return in t minutes. m cars arrive at the ferry terminal by a given schedule. What is the earliest time that all the cars can be transported across the river? What is the minimum number of trips that the operator must make to deliver all cars by that time?
2 2 10 10 0 10 20 30 40 50 60 70 80 90 2 10 3 10 30 40
100 5 50 2
大意:m个人,一辆车送n个人,运送一个来回2t时间,求最短时间和最少运送次数。。
想法:m是n的倍数,此时就是商,时间依此求出。。m<n,次数一次,时间也能求。。剩下那种情况,先把m%n当第一次,剩下的就是那个商了。。
代码:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int i,n,t,m;
int time[10000];
int C;
//freopen("r.txt", "r", stdin);
cin>>C;
while(cin>>n>>t>>m&&C!=0)
{
C=C-1;
int sum,sum1;
for(i=1;i<=m;i++)
{
cin>>time[i];
}
int t1=0;
if(m%n!=0)
sum=m/n+1;
else
sum=m/n;
if(m<=n)
sum1=time[m]+t;
else if(m%n==0)
{
for(i=n;i<m;i+=n)
{
if((time[i+n]-time[i])>2*t)
t1=t1+(time[i+n]-time[i]-2*t);
}
sum1=t+t1+2*t*(m/n-1)+time[n];
}
else
{
for(i=m%n;i<m;i+=n)
{
if((time[i+n]-time[i])>2*t)
t1=t1+(time[i+n]-time[i]-2*t);
}
sum1=t+t1+2*t*(m/n)+time[m%n];
}
cout<<sum1<<" "<<sum<<endl;
}
}
感想:这题感觉还是挺难的,一开始最后一种情况没考虑好,导致总是错误,后来改了好多改才成功。。