1332

来源:互联网 发布:淘宝天猫销售额 编辑:程序博客网 时间:2024/05/21 11:04
#include <iostream>#include <string.h>#include <queue>#include <string>#include <vector>using namespace std;#define ll long#include <map>#include <set>/***********************************///           jincheng diaodustruct node{    ll time,rt,gt;    ll sp,ep;    string id;    node(ll ti,ll v,ll g,string i,ll s,ll e)    {        time=ti,rt=v,gt=g,id=i;        sp=s,ep=e;    }};vector<node> ipcb;map<string,int> named;int num;ll times,endtimes;void addpcb(){    ll t;    string id;    cout<<"id: ";    cin>>id;    cout<<"sum time: ";    cin>>t;    cout<<endl;    if(named[id])    { cout<<"the id is exsid " <<endl;  return ;}    num++;    named[id]++;    node p(t,t,times,id,endtimes,endtimes+ t/num);    endtimes+=t/num;    ipcb.push_back(p);}void runing(){    if(ipcb.empty())        return ;    node p=ipcb.front();    ipcb.erase(ipcb.begin());    ll temp=p.ep-p.sp;    p.rt-=temp;    endtimes+=temp;    times+=temp;    if(p.rt<=0.0)    {        num--;        named[p.id]--;        return ;    }    p.sp=times;    p.ep=times+p.time/num;    if(p.time/num>p.rt)    {        p.ep=p.sp+p.rt;        endtimes+=p.rt;    }    else endtimes+=p.time/num;    ipcb.push_back(p);}void pcbshow(){    cout<<"id   ArriveTime  time  StartTime  EndTIme  RestTime"<<endl;    for(int i=0;i<ipcb.size();i++)    {        node p=ipcb[i];        cout<<p.id<<"        "<<p.gt<<"       "<<p.time<<"      "<<p.sp<<"        "<<p.ep<<"       "<<p.rt<<endl;    }    cout<<"                 now time:"<<times<<endl;}void pcbwork(){    string way;    while(true)    {  //      cout<<"\033c";        cout<<"1. add pcb"<<endl;        cout<<"2. run"<<endl;        cin>>way;        if(way[0]=='1')            addpcb();        else if(way[0]=='2') runing();     //   else {  cout<<"\033c"; continue; }        pcbshow();    }}/**************************************************///           zuoye diaodustruct jcb{    ll gt,time;    string id;    bool operator<(const jcb b) const    {        return this->time < b.time;    }    jcb(string d,ll t,ll g)    {        id=d,time=t,gt=g;    }};multiset<jcb> jcbs;void addjcb(){    string id;    ll ti;    cout<<"id : ";    cin>>id;    cout<<"time :";    cin>>ti;    jcb p(id,ti,times);    jcbs.insert(p);}void jcbwork(){    ll i,l,r;    while(true)    {        cout<<"1. add work  2. run"<<endl;        cin>>i;        if(i==1)            addjcb();        else        {            times+= (jcbs.begin())->time;            jcbs.erase(jcbs.begin());        }        multiset<jcb>::iterator it=jcbs.begin();        //show  jcbs        l=r=times;        while(it!=jcbs.end())        {            l=r;            r+=it->time;            ll k=r-(it->gt);            cout<< it->id <<"   "<<it->gt<<"    "<<it->time<<"   "<<l<<"   "<<r<<"  "<<k<<"   "<<(double)k/(it->time)<<endl;            it++;        }    }}/***************************************************/int main(){    ipcb.clear();    named.clear();    jcbs.clear();    num=0;    times=endtimes=0;    cout<<"1. pcbwork 2.jcbwork"<<endl;    ll way;    cin>>way;    if(way==1)        pcbwork();    else jcbwork();    return 0;}