今天又是愉快的一天,我又开始水题了,但不知道该选什么题,于是随机抽到了这个题,题目如下:
http://www.fjutacm.com/Problem.jsp?pid=1877
Problem Description
小明参加一个跑车竞速比赛,1为起点,2 3 4.........,n为终点。 路程分为n-1段,i到i+1为一段。 正常情况下,跑车以匀速通过跑道。 小明想以最少时间到达终点,现在他的跑车有一个技能,可以在其中一段(i到i+1)以2倍的原速度行驶,但经过下一段路程(i+1到i+2)时将会以1/3的原速度行驶。 之后仍然会以原速度继续行驶,注意的是在比赛中跑车的技能只能使用一次。 现在要你帮小明利用这唯一的一次加速机会找出在哪一段加速可以以最少时间到达终点。 如果有多种方案,小明希望在尽可能早的时候使用掉加速
Input
输入包含多组测试案例, 第一行输入一个整数n(2<=n<=5000), 第二行输入n-1个整数,第i个整数为i到i+1这一段的距离(每个段距离不超过1000)。
Output
对于每一组测试案例, 输出两个整数(整数之间有一个空格)表示小明加速的那一段路(注意是加速的那一段路,不包括减速的),例如“1 2”表示1到2这一段路,详情请看输入输出案例。 输出的引号不算。
SampleInput
5 4 1 2 3 5 10 1 2 3
SampleOutput
4 5 1 2
我的代码:
#include<stdio.h> int main() { int n,i,a[5005];//定义 while(~scanf("%d",&n)){//多组 int s=1; for(i=1;i<n;i++) { scanf("%d",&a[i]); } a[n]=0;//初始化 double m=a[1]+a[2]-a[1]/2.0-a[2]*3; for(i=2;i<n;i++) { if(a[i]+a[i+1]>a[i]/2.0+a[i+1]*3) if(m<a[i]+a[i+1]-a[i]/2.0-a[i+1]*3)//判断最优 { m=a[i]+a[i+1]-a[i]/2.0-a[i+1]*3; s=i; } } printf("%d %d\n",s,s+1);//输出 } return 0; }
浙公网安备 33010602011771号