Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- #include <map>
- using namespace std;
- queue<int> lef;
- queue<int> righ;
- queue<int> lef1;
- queue<int> righ1;
- map<int,int> m;
- int tim;
- int max (int a, int b){
- if (a>b)
- return a;
- else
- return b;
- }
- int main() {
- int ncases;
- cin>>ncases;
- while(ncases--){
- int capacity, t, ncars,llegada,bank;
- string bankside;
- cin>>capacity>>t>>ncars;
- for (int i=0;i<ncars;i++){
- cin>>llegada>>bankside;
- if (i==0){
- tim=llegada;
- }
- if (bankside=="left"){
- lef1.push(i);
- lef.push(llegada);}
- else{
- righ1.push(i);
- righ.push(llegada);}
- }
- //0 es izq y 1 es der;
- bank=0;
- while (!lef.empty() || !righ.empty()){
- if (bank==0){
- int j=0;
- int flag=0;
- if (!lef.empty()){
- //cout<<"left front "<<lef.front()<<endl;
- if (lef.front()>tim && ((!righ.empty() && lef.front()<righ.front()) || righ.empty())){
- flag=1;
- tim=lef.front();
- }
- while (!lef.empty() && j<capacity && lef.front()<=tim){
- //cout<<lef.front()<<endl;
- //cout<<"time: "<<tim+t<<endl;
- flag=1;
- m[lef1.front()]=tim+t;
- lef.pop();
- lef1.pop();
- j++;
- }
- }
- if (flag==1)
- tim=tim+t;
- else
- tim=max(righ.front(),tim)+t;
- //cout<<"tim es "<<tim<<endl;
- bank=1;
- }
- else{
- int j=0;
- int flag=0;
- if (!righ.empty()){
- if (righ.front()>tim && ((!lef.empty() && lef.front()>righ.front()) || lef.empty())){
- flag=1;
- tim=righ.front();
- }
- while (!righ.empty() && j<capacity && righ.front()<=tim){
- //cout<<righ.front()<<'r'<<endl;
- flag=1;
- m[righ1.front()]=tim+t;
- righ1.pop();
- righ.pop();
- j++;
- }
- }
- if (flag==1)
- tim=tim+t;
- else
- tim=max(lef.front(),tim)+t;
- bank=0;
- }
- }
- for (int i=0;i<ncars;i++){
- cout<<m[i]<<endl;
- }
- if (ncases>0)
- cout<<endl;
- m.clear();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment