题目描述
随着移动互联网的发展,人们的出行方式也变得越来越方便,相信很多人都用过手机打车软件,请你设
计一个简单的订单调度系统,当用户打车时能够计算出最快接到乘客的司机。
乘客叫车时,系统获取出当前区域内司机情况如下:
1.乘客到各个司机的路程长度分别是D1、D2. .DN,单位是米。
2.这些路程中可能存在拥堵路段,各司机路程中的拥堵长度分别是C1、C...CN, 如果到某司机的路段
不存在拥堵,则值为0。
3.路程中还可能存在红绿灯路口,各司机路程经过的红绿灯的个数分别是L1、L..L.N, 如果无红绿灯
则为0,假设每个红绿灯路口碰到红灯的概率都为50%,每个红灯要等待15秒。
4.所有司机在正常路段的行驶速度是10m/s,在拥堵路段的行驶速度是2m/s.
5.各个司机评分级别分别是L1、L2、 ..L.N. 评分等级反映服务质量,是1-10的整数。
调度系统需综合考虑接载速度和服务质量,假设通过以上数据计算得到最快接载司机是M司机,其用时
为T,单位是秒,如果在[T,T+60)时间范围内存在评分级别更高的司机,则安排该时间范围内评分更高的
司机接载。
输入描述:
输入包括4行数据,格式说明如下:
第1行是乘客到各司机的路程长度,都是整数,用英文半角逗号分隔。第1个整数表示1号司机的距
离,第2个整数表示2号司机的距离,以此类推●
第2行是各司机路程中的拥堵路段长度,都是整数,用英文半角逗号分隔。与第一行对应,按照司机
编号排列●
第3行是各司机路程中红绿灯路口的个数,都是整数,用英文半角逗号分隔。与第一行对应,按照司
机编号排列●
第4行是各司机的评分等级,共有10级,分别用整数1到10表示,数字越大表示级别越高,服务质量;
越好。与第一行对应,按照司机编号排列●
输出描述:
输出系统所计算出的接单的司机编号(司机编号从1开始)及其接载所用时长(单位是秒),用逗号
分隔.例如: 4,398●
输入
1530, 1760, 2300, 1990
240,320,0,0
2,1,0,0
8,10,10,9
输出
3,230
#include <stdio.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<limits.h>
#include<queue>
#include<stack>
#include<map>
#include <math.h>
using namespace std;
vector<int> get_input(){
string s;
cin>>s;
int sum=0;
s=s+",";
vector<int> v;
for(int i=0;i<s.size();i++){
if(s[i]!=','){
sum=sum*10+(s[i]-'0');
}
else{
v.push_back(sum);
sum=0;
}
}
return v;
}
bool cmp(vector<int> a,vector<int> b){
if(a[0]!=b[0]) return a[0]<b[0];
else return a[1]<b[1];
}
int main(){
vector<int> distance=get_input();
vector<int> jam=get_input();
vector<int> light=get_input();
vector<int> quality=get_input();
int n=jam.size();
vector<vector<int>> time(n,vector<int>(3,0));
int min_time=INT_MAX,q,res_q;
for(int i=0;i<n;i++){
time[i][0]=(jam[i])*1.0/2+(distance[i]-jam[i])*1.0/10+light[i]*15;
time[i][1]=quality[i];
time[i][2]=i;
if(time[i][0]<min_time) {
min_time=time[i][0];
q=time[i][1];
res_q=time[i][2];
}
}
sort(time.begin(),time.end(),cmp);
int res_time=min_time;
for(long long int i=1;i<n;i++){
if(time[i][0]<min_time+60){
if(time[i][1]>q){
res_time=time[i][0];
res_q=time[i][2];
q=time[i][1];
}
}
else break;
}
cout<<res_q+1<<","<<res_time<<endl;
}