1017. Queueing at Bank (25)

来源:互联网 发布:nginx 访问图片 404 编辑:程序博客网 时间:2024/06/06 06:50

本题注意窗口可能空闲,计算要区分情况

#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;struct cust{int hh,mm,ss;int start;int need;int wait;};intclose=17*3600;intopen=8*3600;vector<int> win;vector<cust> all_custs;vector<cust> format_custs;bool compare(cust s,cust t){if(s.start<t.start) return 1;else return 0;}int main(){//inputint n,k;int NeedTimeInMinute;scanf("%d%d",&n,&k); for(int i=0;i<n;i++){cust c;cin>>c.hh;getchar();cin>>c.mm;getchar();cin>>c.ss;c.start=c.hh*3600+c.mm*60+c.ss;cin>>NeedTimeInMinute;if(NeedTimeInMinute>60) NeedTimeInMinute=60;c.need=NeedTimeInMinute*60;all_custs.push_back(c);}//filter delete those customers who can not sever in timesort(all_custs.begin(),all_custs.end(),compare);for(int i=0;i<all_custs.size();i++){if(all_custs[i].start<=close){format_custs.push_back(all_custs[i]);}}//设置窗口时间为开门时间08:00 for(int i=0;i<k;i++) win.push_back(open);//对于关门时间之前先后到达的每一位客服,每次找出窗口值最小的窗口 //安排服务,并更新窗口时间,同时记录等待时间 int pos;//vector<int>::iterator minwin=min_element(win.begin(),win.end());//最小值窗口的地址 for(int i=0;i<format_custs.size();i++){//*minwin=*min_element(win.begin(),win.end());pos=distance(win.begin(),min_element(win.begin(),win.end()));//最小值窗口的数组下标if(win[pos]>=format_custs[i].start){//没有窗口空闲需要等待 format_custs[i].wait=win[pos]-format_custs[i].start;//计算等待时间 win[pos]+=format_custs[i].need;//更新窗口时间为当前服务结束时间} else{//有窗口空闲,等待时间为零 format_custs[i].wait=0;win[pos]=format_custs[i].start+format_custs[i].need;//更新窗口时间为当前服务结束时间}//printf("%d %d\n",pos,win[pos]);}//计算平均等待时间并输出int sum=0;double aver;for(int i=0;i<format_custs.size();i++){sum+=format_custs[i].wait;//printf("%d\n",format_custs[i].wait); //printf("%d\n",format_custs[i].need);}if(format_custs.size()!=0){aver=(double)sum/format_custs.size()/60.0;    //printf("%d\n",sum);    //printf("%d\n",format_custs.size());    printf("%.1f\n",aver);} else{printf("0.0\n");}return 0;}


有一个指针问题

#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;vector<int> a;int main(){a.push_back(4);a.push_back(5);a.push_back(3);a.push_back(0);int pos,pos1;vector<int>::iterator min=min_element(a.begin(),a.end());*min=*min_element(a.begin(),a.end());pos=distance(a.begin(),min);printf("%d,%d\n",pos,a[pos]);//<span style="color:#ff0000;">输出3,0 </span>a[3]+=3;for(int i=0;i<a.size();i++) printf("%d\n",a[i]);//<span style="color:#ff0000;">数组改变</span>//vector<int>::iterator min1=min_element(a.begin(),a.end());*min=*min_element(a.begin(),a.end());//<span style="color:#ff6666;">此处地址min值不会改变</span>pos=distance(a.begin(),min);//pos=distance(a.begin(),min_element(a.begin(),a.end()));printf("%d,%d\n",pos,a[pos]);//<span style="color:#ff6666;">输出 3,3</span>}
#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;vector<int> a;int main(){a.push_back(4);a.push_back(5);a.push_back(3);a.push_back(0);int pos,pos1;vector<int>::iterator min=min_element(a.begin(),a.end());*min=*min_element(a.begin(),a.end());pos=distance(a.begin(),min);printf("%d,%d\n",pos,a[pos]);//<span style="color:#ff0000;">输出3,0</span> a[3]+=3;for(int i=0;i<a.size();i++) printf("%d\n",a[i]);//vector<int>::iterator min1=min_element(a.begin(),a.end());//*min=*min_element(a.begin(),a.end());//pos=distance(a.begin(),min);pos=distance(a.begin(),min_element(a.begin(),a.end()));printf("%d,%d\n",pos,a[pos]);//<span style="color:#ff0000;">输出 2,3</span>}



0 0