Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define st first
  3. #define nd second
  4. using namespace std;
  5. using pii = pair<int, int>;
  6. const int N = 1e5 + 10, INF = 1e9 + 7;
  7. pair<pii, int> car[N];
  8. char side[10];
  9. int ans[N];
  10. void solve(){
  11.     int n, t, m;
  12.     queue<pii> port[2];
  13.     scanf("%d %d %d", &n, &t, &m);
  14.     for(int i =1;i <= m; i++){
  15.         scanf("%d %s", &(car[i].st.st) , side);
  16.         car[i].st.nd = side[0] == 'r';
  17.         car[i].nd = i;
  18.     }
  19.     sort(car + 1, car + m + 1);
  20.     for(int i = 1; i <= m; i++){
  21.         port[car[i].st.nd].push({car[i].st.st, car[i].nd});
  22.     }
  23.     int currentTime = 0, currentSide = 0;
  24.     while(!port[0].empty() || !port[1].empty()){
  25.         int Time[2] = {port[currentSide].empty() ? INF : port[currentSide].front().st, port[1 - currentSide].empty() ? INF : port[1 - currentSide].front().st};
  26.         if(!port[currentSide].empty() && (Time[0] <= currentTime || Time[0] <= Time[1] )){
  27.             currentTime = max(currentTime, Time[0]);
  28.             for(int i = 1; i <= n; i++){
  29.                 ans[port[currentSide].front().nd] = currentTime + t;
  30.                 port[currentSide].pop();
  31.                 if(port[currentSide].empty() || port[currentSide].front().st > currentTime) break;
  32.             }
  33.             currentTime += t;
  34.         }
  35.         else{
  36.             currentTime = max(currentTime, Time[1]) + t;
  37.         }
  38.         currentSide = 1 -currentSide;
  39.     }
  40.     for(int i = 1; i <= m; i++){
  41.         printf("%d\n",ans[i]);
  42.     }
  43.  
  44. }
  45. int main(){
  46.     queue<int> pier[2];
  47.     int testCase;
  48.     scanf("%d",&testCase);
  49.     while(testCase--){
  50.         solve();
  51.         if(testCase != 0) printf("\n");
  52.     }
  53.  
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement