Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define st first
- #define nd second
- using namespace std;
- using pii = pair<int, int>;
- const int N = 1e5 + 10, INF = 1e9 + 7;
- pair<pii, int> car[N];
- char side[10];
- int ans[N];
- void solve(){
- int n, t, m;
- queue<pii> port[2];
- scanf("%d %d %d", &n, &t, &m);
- for(int i =1;i <= m; i++){
- scanf("%d %s", &(car[i].st.st) , side);
- car[i].st.nd = side[0] == 'r';
- car[i].nd = i;
- }
- sort(car + 1, car + m + 1);
- for(int i = 1; i <= m; i++){
- port[car[i].st.nd].push({car[i].st.st, car[i].nd});
- }
- int currentTime = 0, currentSide = 0;
- while(!port[0].empty() || !port[1].empty()){
- int Time[2] = {port[currentSide].empty() ? INF : port[currentSide].front().st, port[1 - currentSide].empty() ? INF : port[1 - currentSide].front().st};
- if(!port[currentSide].empty() && (Time[0] <= currentTime || Time[0] <= Time[1] )){
- currentTime = max(currentTime, Time[0]);
- for(int i = 1; i <= n; i++){
- ans[port[currentSide].front().nd] = currentTime + t;
- port[currentSide].pop();
- if(port[currentSide].empty() || port[currentSide].front().st > currentTime) break;
- }
- currentTime += t;
- }
- else{
- currentTime = max(currentTime, Time[1]) + t;
- }
- currentSide = 1 -currentSide;
- }
- for(int i = 1; i <= m; i++){
- printf("%d\n",ans[i]);
- }
- }
- int main(){
- queue<int> pier[2];
- int testCase;
- scanf("%d",&testCase);
- while(testCase--){
- solve();
- if(testCase != 0) printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement