贪心问题


http://codeup.cn/contest.php?cid=100000584

问题A

题目:看电视(**区间贪心)

题目描述

暑假到了,小明终于可以开心的看电视了。但是小明喜欢的节目太多了,他希望尽量多的看到完整的节目。
现在他把他喜欢的电视节目的转播时间表给你,你能帮他合理安排吗?
输入

输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示小明喜欢的节目的总数。
接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。
当n=0时,输入结束。
输出

对于每组输入,输出能完整看到的电视节目的个数。
样例输入 Copy

12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0
样例输出 Copy

5

分析

每个节目都有开始和结束时间,求最多能看多少节目,问题简化为:区间贪心 问题
在这里插入图片描述

数据结构

typedef struct TV
{
    int si,ei;//开始,结束
}TV;
int n;
int sum,lasttime;

选择左端点最大的区间

//按左端点降序排列(从大到小),若相同按右端点升序排列
bool cmp(TV a,TV b)
{
    if(a.si!=b.si)return a.si>b.si;
    return a.ei<b.ei;
}
//Program[0].ei是时间轴上的最大时间点,选择左端点最大就是在时间轴上从大往小选
sum=0;
lasttime=Program[0].ei;
for(int i=0;i<n;i++){
            if(Program[i].ei<=lasttime){//在尾端之前的最大的被添加
                sum++;
                lasttime=Program[i].si;
            }
        }
        printf("%d\n",sum);

选择右端点最小的区间

//按右端点升序排列(从小到大),若相同按左端点降序排列
bool cmp(TV a,TV b)
{
    if(a.ei!=b.ei)return a.ei<b.ei;
    return a.si>b.si;
}
//0是时间轴上的最小时间点,选择右端点最小就是在时间轴上从小往大选
int sum=0,lasttime=0;
        for(int i=0;i<n;i++){
            if(Program[i].si>=lasttime){//在尾端之后的最小的被添加
                sum++;
                lasttime=Program[i].ei;
            }
        }
        printf("%d\n",sum);

AC代码

左端点最大

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
typedef struct TV
{
    int si,ei;//开始,结束
}TV;
int n;
//按左端点降序排列(从大到小),若相同按右端点升序排列
bool cmp(TV a,TV b)
{
    if(a.si!=b.si)return a.si>b.si;
    return a.ei<b.ei;
}
int main()
{
    while(scanf("%d",&n)!=EOF){
        if(n==0)break;
        TV Program[n];
        for(int i=0;i<n;i++)
            scanf("%d %d",&Program[i].si,&Program[i].ei);
        sort(Program,Program+n,cmp);
        int sum=0,lasttime=Program[0].ei;
        for(int i=0;i<n;i++){
            if(Program[i].ei<=lasttime){//在尾端之前的最大的被添加
                sum++;
                lasttime=Program[i].si;
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

右端点最小

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
typedef struct TV
{
    int si,ei;
}TV;
int n;
bool cmp(TV a,TV b)
{
    if(a.ei!=b.ei)return a.ei<b.ei;
    return a.si>b.si;
}
int main()
{
    while(scanf("%d",&n)!=EOF){
        if(n==0)break;
        TV Program[n];
        for(int i=0;i<n;i++)
            scanf("%d %d",&Program[i].si,&Program[i].ei);
        sort(Program,Program+n,cmp);
        int sum=0,lasttime=0;
        for(int i=0;i<n;i++){
            if(Program[i].si>=lasttime){//在尾端之后的最小的被添加
                sum++;
                lasttime=Program[i].ei;
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

问题B

题目:出租车费(***简单贪心)

题目描述

某市出租车计价规则如下:起步4公里10元,即使你的行程没超过4公里;接下来的4公里,每公里2元;之后每公里2.4元。行程的最后一段即使不到1公里,也当作1公里计费。
一个乘客可以根据行程公里数合理安排坐车方式来使自己的打车费最小。
例如,整个行程为16公里,乘客应该将行程分成长度相同的两部分,每部分花费18元,总共花费36元。如果坐出租车一次走完全程要花费37.2元。
现在给你整个行程的公里数,请你计算坐出租车的最小花费。

输入

输入包含多组测试数据。每组输入一个正整数n(n<10000000),表示整个行程的公里数。
当n=0时,输入结束。
输出

对于每组输入,输出最小花费。如果需要的话,保留一位小数。
样例输入 Copy

3
9
16
0
样例输出 Copy

10
20.4
36

分析

在不分段的情况下:
0~4:10
5~8:8
9~12:9.6
同是4公里,5 ~ 8 或者 9 ~ 12 都比 0 ~ 4要小;
∴在<=8之前不分段就好
在>8之后,要分情况讨论:

9 ~ 13=12就和 0 ~ 4 + 5=12持平了;
接着(9 ~ 14=)14.5 > (0 ~ 4+5 ~ 6=)14
∴若是<=12那么不分段费用最小;否则分段更小

较长的路程如何分段最小呢?
先按照8公里分段,剩下不足8公里的:
若<=4则不分段(相当于<=12的情况)
若>4则把剩下这一部分分段处理0~4+(n-4)

注意

如果需要的话,保留一位小数。
如何判断有无小数

const double eps=1e-6;
int tmp=(int)sum;
		if(sum-tmp<eps) printf("%d\n",tmp);
		else printf("%.1lf\n",sum);

AC代码

#include <iostream>
#include <cstdio>
using namespace std; 
const int nmax=10000000+10;
const double eps=1e-6;
 
int main(int argc, char** argv) {
	int n;
	while(1){
		cin>>n;
		if(n==0){
			break;
		}
		double sum=0;
		if(n<=4){
			sum=10;
		}
		else if(n<=8){
			sum=10+(n-4)*2;
		}
		else{
			while(n>=8){
				sum+=18;
				n-=8;
			}
			if(n<=4){
				sum+=2.4*n;
			}
			else{
				sum+=10+(n-4)*2;
			}
		}
		int tmp=(int)sum;
		if(sum-tmp<eps) printf("%d\n",tmp);
		else printf("%.1lf\n",sum);
	}
	return 0;
}

问题C

题目To Fill or Not to Fill(*****简单贪心)

题目描述

With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from time to time. Different gas station may give different price. You are asked to carefully design the cheapest route to go.

输入

Each input file contains one test case. For each case, the first line contains 4 positive numbers: Cmax (<= 100), the maximum capacity of the tank; D (<=30000), the distance between Hangzhou and the destination city; Davg (<=20), the average distance per unit gas that the car can run; and N (<= 500), the total number of gas stations. Then N lines follow, each contains a pair of non-negative numbers: Pi, the unit gas price, and Di (<=D), the distance between this station and Hangzhou, for i=1,…N. All the numbers in a line are separated by a space.

输出

For each test case, print the cheapest price in a line, accurate up to 2 decimal places. It is assumed that the tank is empty at the beginning. If it is impossible to reach the destination, print “The maximum travel distance = X” where X is the maximum possible distance the car can run, accurate up to 2 decimal places.

样例输入 Copy

59 525 19 2
3.00 314
3.00 0
样例输出 Copy

82.89
提示

该题目所要解决的问题是:给定若干加油站信息,问能否驾驶汽车行驶一定的距离。如果能够行驶完全程,则计算最小花费。若不能行驶完全程,则最远能够行驶多长距离。

拿到这一题,首先判断汽车是否能够行驶到终点。什么情况下汽车无法行驶到终点呢?两种情况:起点根本就没有加油站,汽车无法启动;或者中途两个加油站之间的距离大于加满油后汽车能够行驶的最大距离。前者汽车行驶的最大距离为0.00,而后者最大距离为当前加油站的距离加上在这个加油站加满油后能够行驶的最大距离。在这里,需要将加油站按到杭州的距离从小到大排序。

接下来在能够行驶到终点的情况下计算最小花费。我们首先从路程来考虑,如果在路上,我们能够使用最便宜的汽油,当然就在那个加油站加油了。所以从起点开始遍历每个加油站。假设遍历到了第i个加油站,我们现在来判断在加油站i应该加多少油。设当前汽车离杭州的距离为curLen,当前加油站离杭州的距离为nodes[i].dis,加满油以后汽车能够行驶的最大距离为(dis=cmax*len)。这样就有node[i].dis <= curLen <= nodes[i].dis+dis,否则的话第i个加油站的油是不起作用的。于是在第i个加油站的作用范围内寻找有没有更为便宜的加油站,如果有,则下次使用这个加油站的油(j),这次汽车应该行驶到这个加油站,即touch=nodes[j].dis。如果没有找到更为便宜的加油站则可以在第i个加油站加满油,即touch=nodes[i].dis+dis。然后判断下次应该行驶到的距离与当前距离的关系,如果下次应当行驶到的距离大于当前距离,则汽车行驶,否则不动(也就是说上个加油站的油更便宜,后一个加油站也便宜,根本就不需要在当前加油站加油)。

分析

1.是否能够行驶到终点

拿到这一题,首先判断汽车是否能够行驶到终点。
什么情况下汽车无法行驶到终点呢?两种情况:

  1. 起点根本就没有加油站,汽车无法启动:汽车行驶的最大距离为0.00
  2. 中途两个加油站之间的距离大于加满油后汽车能够行驶的最大距离:最大距离为当前加油站的距离加上在这个加油站加满油后能够行驶的最大距离。
    主函数中
sort(gas,gas+N,cmp);

           /* printf("\n");
            for(int i=0;i<N;i++)
                printf("%.0lf %.2lf\n",gas[i].D,gas[i].P);
            printf("\n");*/

        if(gas[0].D!=0)//如果没有初始站在杭州的,必失败(车子一开始无油)
        //无法行驶到终点情况1
            printf("The maximum travel distance = %.2lf\n",0);
        else{
            bool flag=true;//能否到达终点的标志
            int i;
            for(i=1;i<N;i++){//i代表下一站
                if(Dmax-(D-gas[i-1].D)>=eps)//若满油可直接从这一加油站到达终点
                    break;
                if((gas[i].D-gas[i-1].D)-Dmax>eps)//若满油都无法从这一加油站到达下一加油站
                    {
                        flag=false;
                        break;
                    }
            }
            if(i==N&&(D-gas[i-1].D)-Dmax>eps)//最后一个加油站满油不能到达终点要另外考虑
                flag=false;
            
            if(!flag)
            //无法行驶到终点情况2
                printf("The maximum travel distance = %.2lf\n",Maxlength(gas));
            else{
            //可以行驶到终点
                double sum=0;
                cheap(gas,sum);
                printf("%.2lf\n",sum);
            }
        }

无法行驶到终点情况2的函数

double Maxlength(Gstation gas[])
{
    double sum=0;
    for(int i=1;i<N;i++){
                if((gas[i].D-gas[i-1].D)-Dmax>eps)//若满油不可以从这一加油站到达下一加油站
                  return sum+Dmax;
                sum=gas[i].D;
    }
    //若满油不可以从最后一个加油站到达终点
    return sum+Dmax;
}

在这里,需要将加油站按到杭州的距离从小到大排序。

注意

  1. 起点没有加油站不需计算最大里程,直接输出0
  2. 满油可以在每个加油站之间穿行考虑过之后,还需要考虑能不能从最后一个加油站到达终点【主函数和子函数中都需考虑】
  3. 若能从这个加油站gas[i-1]到达下一个加油站gas[i],那么暂时最大里程数sum就是下一个加油站距离杭州的距离gas[i].D,若不能则为sum+Dmax并退出

2.计算最小花费

接下来在能够行驶到终点的情况下计算最小花费。

我们首先从路程来考虑,如果在路上,我们能够使用最便宜的汽油,当然就在那个加油站加油了。
所以从起点开始遍历每个加油站。 for(int i=0;i<N;)

需要在之前设置的量:
								double C=0,Cept=Cmax;//当前油量C=0,当前可装油Cept=Cmax
    							int next,j;//next下一站

从起点开始遍历每个加油站,假设遍历到了第i个加油站,我们现在来判断在加油站i应该加多少油。
设当前汽车离杭州的距离为Len,当前加油站离杭州的距离为gas[i].D,加满油以后汽车能够行驶的最大距离为Dmax。
这样就有gas[i].D <=Len <= gas[i].D+Dmax,否则的话第i个加油站的油是不起作用的。
		假设下一站next不变,next=i
		于是在第i个加油站的作用范围内寻找有没有更为便宜的加油站。for(j=i+1;(gas[i].D+Dmax-gas[j].D)>=-eps&&j<N;j++)
				如果有,则下次使用这个(j)加油站的油(next=j),
							若手头油足够达到这个加油站则不加油
							若手头油不足,			则加油:    这次汽车应该加油到刚好    行驶到这个加油站
							break;
		如果没有(next==i)找到更为便宜的加油站
				如果当前满油不足以到达终点
							则可以在第i个加油站加满油
							到达下一个加油站再观察next++(然后再到达比这个最便宜加油站略贵的【即在下个加油站范围内最便宜的加油站】加油)
				否则
							加部分油,刚好足够到达终点即可
							返回油费
		下一个i遍历下一站next:i=next
void cheap(Gstation gas[],double &sum)//油费sum
{
    double C=0,Cept=Cmax;//当前油量C=0,当前可装油Cept=Cmax
    int next,j;//next下一站
    for(int i=0;i<N;){
    //从起点开始遍历每个加油站i

        next=i;
        //第i个加油站的范围是gas[i].D~gas[i].D+Dmax
        //gas[j].D<=(gas[i].D+Dmax),因为是浮点数,且包括了等于,所以要相减和-0.000005比
        for(j=i+1;(gas[i].D+Dmax-gas[j].D)>=-eps&&j<N;j++){
        //在第i个加油站的作用范围内[nodes[i].dis,nodes[i].dis+dis]寻找有没有更为便宜的加油站

            if((gas[i].P-gas[j].P)>=eps){
            //如果有,则下次使用这个加油站的油(j),


                if((C*Davg-(gas[j].D-gas[i].D))>eps){
                //若手头油足够达到这个加油站则不加油

                            //printf("不加油         %.0lf~%.0lf:    到%.0lf站%.2lf                    当前油量%.2lf\n",gas[i].D,gas[j].D,gas[j].D,gas[j].D-gas[i].D,C);
                    Cept+=(gas[j].D-gas[i].D)/Davg;C-=(gas[j].D-gas[i].D)/Davg;
                }
                else{
                //若手头油不足,则加油
                //这次汽车应该加油到刚好    行驶到这个加油站

                            //printf("+油钱%.2lf    %.0lf~%.0lf:    到%.0lf站%.2lf《-》需加油%.2lf     当前油量%.2lf\n",(gas[j].D-gas[i].D-C*Davg)/Davg*gas[i].P,gas[i].D,gas[j].D,gas[j].D,gas[j].D-gas[i].D,(gas[j].D-gas[i].D-C*Davg)/Davg,C);
                    sum+=(gas[j].D-gas[i].D-C*Davg)/Davg*gas[i].P;
                    Cept=Cmax;C=0;//到达下一站的情况
                }
                next=j;
                break;
            }
        }
        if(next==i){
        //如果没有找到更为便宜的加油站

            if((D-gas[i].D-Dmax)>eps){
            //如果当前满油不足以到达终点
            //则可以在第i个加油站加满油
                           // printf("+油钱%.2lf    %.0lf~满油:     到下一站即可《-》需加油%.2lf      当前油量%.2lf\n",(Cept)*gas[i].P,gas[i].D,Cept,C);
                sum+=Cept*gas[i].P;
                Cept=(gas[i+1].D-gas[i].D)/Davg;C=Cmax-Cept;//到达下一站的情况

                next++;
            }
            else{
                            // printf("+油钱%.2lf   %.0lf~部分油:   能到终点《-》需加油%.2lf          当前油量%.2lf\n",(D-gas[i].D-C*Davg)/Davg*gas[i].P,gas[i].D,(D-gas[i].D-C*Davg)/Davg,C);
                sum+=(D-gas[i].D-C*Davg)/Davg*gas[i].P;
                return;
            }
        }
        i=next;
    }
}

注意

  1. 浮点数的比较要相减和0.0000005作比较
 const double eps=0.000005;
 double a,b;
 (1)a>b
 	a-b>eps
 (2)a>=b,要包括0,那么就大于-0.00000005
 	a-b>-eps
  1. 里程和油量要分清楚
    里程/Davg=油量

AC代码

#include <bits/stdc++.h>
using namespace std;
const double eps=0.000005;
double Cmax,D,Davg,Dmax;//油箱容量Cmax,距离D,每单元油能跑的平均里程数Davg,在加油站加满油的最大里程数Dmax
int N;//加油站数量N
typedef struct Gstation{
     double P;
     double D;
}Gstation;
bool cmp(Gstation a,Gstation b){//按距离升序排序
    return a.D<b.D;
}
void cheap(Gstation gas[],double &sum)//油费sum
{
    double C=0,Cept=Cmax;//当前油量C=0,当前可装油Cept=Cmax
    int next,j;//next下一站
    for(int i=0;i<N;){
    //从起点开始遍历每个加油站i

        next=i;
        //第i个加油站的范围是gas[i].D~gas[i].D+Dmax
        //gas[j].D<=(gas[i].D+Dmax),因为是浮点数,且包括了等于,所以要相减和-0.000005比
        for(j=i+1;(gas[i].D+Dmax-gas[j].D)>=-eps&&j<N;j++){
        //在第i个加油站的作用范围内[nodes[i].dis,nodes[i].dis+dis]寻找有没有更为便宜的加油站

            if((gas[i].P-gas[j].P)>=eps){
            //如果有,则下次使用这个加油站的油(j),


                if((C*Davg-(gas[j].D-gas[i].D))>eps){
                //若手头油足够达到这个加油站则不加油

                            //printf("不加油         %.0lf~%.0lf:    到%.0lf站%.2lf                    当前油量%.2lf\n",gas[i].D,gas[j].D,gas[j].D,gas[j].D-gas[i].D,C);
                    Cept+=(gas[j].D-gas[i].D)/Davg;C-=(gas[j].D-gas[i].D)/Davg;
                }
                else{
                //若手头油不足,则加油
                //这次汽车应该加油到刚好    行驶到这个加油站

                            //printf("+油钱%.2lf    %.0lf~%.0lf:    到%.0lf站%.2lf《-》需加油%.2lf     当前油量%.2lf\n",(gas[j].D-gas[i].D-C*Davg)/Davg*gas[i].P,gas[i].D,gas[j].D,gas[j].D,gas[j].D-gas[i].D,(gas[j].D-gas[i].D-C*Davg)/Davg,C);
                    sum+=(gas[j].D-gas[i].D-C*Davg)/Davg*gas[i].P;
                    Cept=Cmax;C=0;//到达下一站的情况
                }
                next=j;
                break;
            }
        }
        if(next==i){
        //如果没有找到更为便宜的加油站

            if((D-gas[i].D-Dmax)>eps){
            //如果当前满油不足以到达终点
            //则可以在第i个加油站加满油
                           // printf("+油钱%.2lf    %.0lf~满油:     到下一站即可《-》需加油%.2lf      当前油量%.2lf\n",(Cept)*gas[i].P,gas[i].D,Cept,C);
                sum+=Cept*gas[i].P;
                Cept=(gas[i+1].D-gas[i].D)/Davg;C=Cmax-Cept;//到达下一站的情况

                next++;
            }
            else{
                            // printf("+油钱%.2lf   %.0lf~部分油:   能到终点《-》需加油%.2lf          当前油量%.2lf\n",(D-gas[i].D-C*Davg)/Davg*gas[i].P,gas[i].D,(D-gas[i].D-C*Davg)/Davg,C);
                sum+=(D-gas[i].D-C*Davg)/Davg*gas[i].P;
                return;
            }
        }
        i=next;
    }
}
//最大里程数
double Maxlength(Gstation gas[])
{
    double sum=0;
    for(int i=1;i<N;i++){
                if((gas[i].D-gas[i-1].D)-Dmax>eps)//若满油不可以从这一加油站到达下一加油站
                  return sum+Dmax;
                sum=gas[i].D;
    }
    //若满油不可以从最后一个加油站到达终点
    return sum+Dmax;
}
int main()
{
    while(scanf("%lf %lf %lf %d",&Cmax,&D,&Davg,&N)!=EOF){
        Dmax=Cmax*Davg;//在加油站加满油的最大里程数

        Gstation gas[N];

        for(int i=0;i<N;i++)
            scanf("%lf %lf",&gas[i].P,&gas[i].D);
        sort(gas,gas+N,cmp);

           /* printf("\n");
            for(int i=0;i<N;i++)
                printf("%.0lf %.2lf\n",gas[i].D,gas[i].P);
            printf("\n");*/

        if(gas[0].D!=0)//如果没有初始站在杭州的,必失败(车子一开始无油)
        //无法行驶到终点情况1
            printf("The maximum travel distance = %.2lf\n",0);
        else{
            bool flag=true;//能否到达终点的标志
            int i;
            for(i=1;i<N;i++){//i代表下一站
                if(Dmax-(D-gas[i-1].D)>=eps)//若满油可直接从这一加油站到达终点
                    break;
                if((gas[i].D-gas[i-1].D)-Dmax>eps)//若满油都无法从这一加油站到达下一加油站
                    {
                        flag=false;
                        break;
                    }
            }
            if(i==N&&(D-gas[i-1].D)-Dmax>eps)//最后一个加油站满油不能到达终点要另外考虑
                flag=false;
            
            if(!flag)
            //无法行驶到终点情况2
                printf("The maximum travel distance = %.2lf\n",Maxlength(gas));
            else{
            //可以行驶到终点
                double sum=0;
                cheap(gas,sum);
                printf("%.2lf\n",sum);
            }
        }
    }
    return 0;
}

参照代码

#include<bits/stdc++.h>
#define eps 1e-7
using namespace std;
struct Station{
	double p;
	int l;
};
int cmp(Station a, Station b){
	return a.l < b.l;
}
int main()
{
	double maxOil, Destination, Distance_perOil ;
	Station sta[501];
	int num_gasStation;
	while(scanf("%lf %lf %lf %d", &maxOil, &Destination, &Distance_perOil, &num_gasStation)!=EOF){
		//数据整理
		for(int i=0; i<num_gasStation; i++){
			scanf("%lf %d", &sta[i].p, &sta[i].l);
		}
		sort(sta, sta+num_gasStation, cmp);
		sta[num_gasStation].l=Destination;
		sta[num_gasStation].p=0;
		//计算最小代价
		double sum = 0, cur_remainOil=0;
		int now=0, unreachable=0;
		double Distance_fullOil = maxOil * Distance_perOil;
		while(now < num_gasStation){  //判断是否到达终点
			double expect_remainOil;
			if( fabs(sta[0].l) > eps){
				printf("The maximum travel distance = 0.00\n");
				unreachable = 1;
				break;
			}
			//相邻油站 是否 跨度太长
			if( (sta[now+1].l - sta[now].l) > Distance_fullOil ){
				printf("The maximum travel distance = %.2f\n", sta[now].l+Distance_fullOil);
				unreachable = 1;
				break;
			}
			//寻找 油价最便宜的油站
			int min = now;
			for(int i=now+1; ((sta[i].l - sta[now].l) <= Distance_fullOil) && (i <= num_gasStation); i++){
				if (sta[i].p < sta[now].p ){
					min = i;
					break;
				}
			}
			expect_remainOil = (sta[min].l - sta[now].l)/Distance_perOil; 
			// 找不到,那么加满油
			if( min == now ){expect_remainOil = maxOil;}
			//判断加多少油
			double add_Oil = 0;
			if (cur_remainOil < expect_remainOil) {add_Oil = expect_remainOil - cur_remainOil;}
			//计算油钱
			
			//	printf("油量:%.2lf 加油钱:%.2lf 站内范围最便宜%d\n",expect_remainOil,add_Oil * sta[now].p,min);
			
			sum += add_Oil * sta[now].p;
			//printf("expect_remainOil = %.2f, cur_remainOil = %.2f, add_Oil= %.2f, sum = %.2f", expect_remainOil, cur_remainOil, add_Oil, sum);
			//更新当前剩余油量
			cur_remainOil = cur_remainOil + add_Oil - (sta[now+1].l - sta[now].l) / Distance_perOil;
			// printf("%.2f\n", cur_remainOil);
			now ++;
		}
		//输出总油费
		if(unreachable == 0) printf("%.2f\n", sum);
	}
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章