Advertisement
erfanul007

UVa 10901

Sep 14th, 2021
1,090
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long int
  5.  
  6.  
  7. #ifdef ERFANUL007
  8.     #define debug(...) __f(#__VA_ARGS__, __VA_ARGS__)
  9.     template < typename Arg1 >
  10.     void __f(const char* name, Arg1&& arg1){
  11.         cout << name << " = " << arg1 << std::endl;
  12.     }
  13.     template < typename Arg1, typename... Args>
  14.     void __f(const char* names, Arg1&& arg1, Args&&... args){
  15.         const char* comma = strchr(names, ',');
  16.         cout.write(names, comma - names) << " = " << arg1 <<" | ";
  17.         __f(comma+1, args...);
  18.     }
  19. #else
  20.     #define debug(...)
  21. #endif
  22.  
  23. int main(){
  24.     #ifdef ERFANUL007
  25.         clock_t tStart = clock();
  26.         freopen("input.txt", "r", stdin);
  27.         freopen("output.txt", "w", stdout);
  28.     #endif
  29.  
  30.     int t, cs=0;
  31.     cin >> t;
  32.     //debug(t);
  33.  
  34.     while(t--){
  35.         ll l;
  36.         int n, m;
  37.         cin >> n >> l >> m;
  38.         //debug(l, m);
  39.         vector< pair< ll, int > > left, right;
  40.  
  41.         ll ans[m];
  42.         for(int i=0; i < m; i++){
  43.             ll x;
  44.             string s;
  45.             cin >> x >> s;
  46.             //debug(x, s);
  47.             if(s == "left") left.push_back(make_pair(x, i));
  48.             else right.push_back(make_pair(x, i));
  49.             ans[i] = 0;
  50.         }
  51.         int i=0, j=0;
  52.  
  53.         ll cur_time = 0;
  54.  
  55.         bool bank_left = true;
  56.  
  57.         while(i < left.size() || j < right.size()){
  58.             if(bank_left){
  59.                 int niche = 0;
  60.                 while(i < left.size() && left[i].first <= cur_time && niche < n){
  61.                     ans[left[i++].second] = cur_time + l;
  62.                     niche++;
  63.                 }
  64.                 if(niche){
  65.                     cur_time += l;
  66.                     bank_left = false;
  67.                     continue;
  68.                 }
  69.                 if(i < left.size() && j < right.size()){
  70.                     if(left[i].first <= right[j].first){
  71.                         cur_time = max(cur_time, left[i].first);
  72.                     }
  73.                     else{
  74.                         cur_time = max(cur_time + l, right[j].first + l);
  75.                         bank_left = false;
  76.                     }
  77.                 }
  78.                 else if(i < left.size()){
  79.                     cur_time = max(cur_time, left[i].first);
  80.                 }
  81.                 else if(j < right.size()){
  82.                     cur_time = max(cur_time + l, right[j].first + l);
  83.                     bank_left = false;
  84.                 }
  85.             }
  86.             else{
  87.                 int niche = 0;
  88.                 while(j < right.size() && right[j].first <= cur_time && niche < n){
  89.                     ans[right[j++].second] = cur_time + l;
  90.                     niche++;
  91.                 }
  92.                 if(niche){
  93.                     cur_time += l;
  94.                     bank_left = true;
  95.                     continue;
  96.                 }
  97.                 if(i < left.size() && j < right.size()){
  98.                     if(left[i].first < right[j].first){
  99.                         cur_time = max(cur_time + l, left[i].first + l);
  100.                         bank_left = true;
  101.                     }
  102.                     else{
  103.                         cur_time = max(cur_time, right[j].first);
  104.                     }
  105.                 }
  106.                 else if(i < left.size()){
  107.                     cur_time = max(cur_time+l, left[i].first + l);
  108.                     bank_left = true;
  109.                 }
  110.                 else if(j < right.size()){
  111.                     cur_time = max(cur_time, right[j].first);
  112.                 }
  113.  
  114.             }
  115.         }
  116.         if(cs) cout << '\n';
  117.         cs++;
  118.         for(int i=0; i<m; i++){
  119.             cout << ans[i] << '\n';
  120.         }
  121.     }
  122.  
  123.     #ifdef ERFANUL007
  124.         fprintf(stderr, ">>> Runtime : %.9f\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
  125.     #endif
  126.  
  127.     return 0;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement