您的位置:首页 > 其它

Problem O

2016-03-26 21:27 162 查看
简单题意

有m辆车,每次最多运n辆过河,过河需要t时间,回来需要t时间,给出m辆车抵达岸边的时间,问使得所有车辆过河所需要的最少次数与最早时间

解题思路形成过程

最少次数当然是每次都满载运的次数当然最少,时间最早就需要考虑了,如果先满载,运完之后最后一次晕剩下的会浪费很多时间,因为剩下的车少,因此运送倒数第二批时,最后一批车辆早就到了,但还要等,但是如果先运送剩下的车辆数,再满载,这样运送时候就可以有时间让被运送的下一批车辆到达。

感想

应该多多联系实际,统筹和规划很重要

AC代码

#include <iostream>

#include <fstream>

using namespace std;

int main(){

    ifstream cin("in.txt");

    int c;

    cin>>c;

    while(c--){

        int n,t,m;

        cin>>n>>t>>m;

        int car[m+1];

        for(int i=1;i<m+1;i++){

            cin>>car[i];

        }

        int time1,time2=0,temp;

        temp=m%n;

        if(temp){

            time1=m/n+1;

        }else{

            time1=m/n;

        }

        if(temp) time2=car[temp]+t*2;

        for(int i=1;i<=m/n;i++){

            if(time2>=car[i*n+temp]){

                time2+=t*2;//如果回来的时候下一批车辆最后一辆车已经到达已经到达

            }else{

                time2=car[i*n+temp]+t*2;//否则需要等到最后一辆车到达的时间

            }

            if(i==m/n)time2-=t;//最后一次只要把最后一辆车运到对岸计算就结束,所以要减去回来的时间

        }

        cout<<time2<<" "<<time1<<endl;

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: