Accelerator pku 3232

本文介绍了一种算法,用于解决赛车游戏中团队如何使用有限数量的加速器来最小化完成比赛所需的时间。考虑了不同位置的赛车手及其剩余比赛距离,以及加速器的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Accelerator
Time Limit:4000MS  Memory Limit:65536K
Total Submit:2011 Accepted:428

Description

 

Input

 

Output
For each of test cases print a single integer on a single line, the minimal possible number of time units required to finish the race all team.

Sample Input

 

Sample Output

 

Source
South Central China 2007 hosted by NUDT

#include  < iostream >
#include 
< cstdio >
using   namespace  std;

int  riders[ 100005 ];
int  n,t,m,k;
bool  IsOk( int  times)
{
    
long long need=0,i;
    
int flag;
    
for(i=0;i<n;i++)
   
{  
     flag
=(riders[i]-times+k-2)/(k-1);
     
if(flag>0)
       need
+=flag;
     
if(flag>times)
         
return false;
   }

    
if(need<=(long long)m*times)
       
return true;
    
else return false;
}

void  Init()
{
    
int i;
    scanf(
"%d",&n);
    
for(i=0;i<n;i++)
     scanf(
"%d",&riders[i]);
    scanf(
"%d%d",&m,&k);    
}

int  main()
{
    cin
>>t;
    
while(t--)
    
{
     Init();  
     
if(k==1)
       
{
            
int tmp=-1;
            
for(int i=0;i<n;i++)
             
if(riders[i]>tmp)
              tmp
=riders[i];
             cout
<<tmp<<endl; 
         
continue;    
        }

     
int min=0,max=100000000,mid;  
        
while(min<max)
        
{
              mid
=(min+max)/2;
              
if(IsOk(mid))
                 max
=mid;
              
else 
                  min
=mid+1;
        }

      cout
<<min<<endl; 
    }

  
return 0;
}


3
2

2
3
2 3 9
1 5
3
2 3 6
1 5

The input file has T (1<T<20) test cases, and the first line of the file will show the T.

Each of test cases, will be the N (1<= N <= 100000) rider, and N numbers Ai (1<= Ai <= 10^8) show how long will the rider have to finish the race. And the M and the K (1<= K*M <=10^8) for the accelerators.

Shiming (alpc02) is a boy likes to play PopKart very much. He is a good rider in this game. And one day he thought that he became a team leader of a team of N Kart riders.

Today, after the game begins, the riders of his team are now at different places at the racetrack, for that some of the riders got some short cut.

However, we know actually how long has each rider left to run along, and they will ride actually one meter per one time unit (maybe 10ms).

Luckily, Shiming now gets M accelerators, the accelerator can help one rider to ride k meters per one time unit. And all the accelerators are as the same. But one rider can't use more than one accelerator at one time unit.

Shiming is the team leader, and he wants all the team members to finish in the minimal time not just the fastest one to finish the race. He will distribute all the accelerators to the riders.

Note: Here some rules are not as the same as the game we played. At a time unit, Shiming distributes the accelerators to riders for one rider one accelerator, and at the next time unit, all the accelerator can be reused, and Shiming can re-distributes all the accelerators to riders also for one rider one accelerator and the distribution is no relationship with the last time unit.

So you will program to help Shiming to get the actually minimal time the team will use to finish the race.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值