Advertisement
deadwing97

CATSRATS Tester

Mar 25th, 2019
312
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. typedef long long ll;
  5.  
  6. const int MX = 2009;
  7.  
  8. int st[MX] , en[MX] , wakeup[MX] , hide[MX];
  9.  
  10. int n , m;
  11.  
  12.  
  13. double when[MX];
  14.  
  15. int who[MX];
  16.  
  17.  
  18. bool invalidtest = 0;
  19.  
  20.  
  21. void test(int cat , int rat){
  22.  
  23.     if(wakeup[rat] > hide[cat] || wakeup[cat] > hide[rat]) return ;
  24.  
  25.     int stTime = max(wakeup[cat] , wakeup[rat]);
  26.  
  27.     int dcat = (en[cat] - st[cat])/abs(en[cat] - st[cat]);
  28.  
  29.     int drat = (en[rat] - st[rat])/abs(en[rat] - st[rat]);
  30.  
  31.     int poscat = st[cat] + dcat * (stTime - wakeup[cat]);
  32.  
  33.     int posrat = st[rat] + drat * (stTime - wakeup[rat]);
  34.  
  35.     if(poscat == posrat){
  36.         if(stTime < when[rat]){
  37.             when[rat] = stTime;
  38.             who[rat] = cat;
  39.         }
  40.         else if(stTime == when[rat])
  41.             invalidtest = 1;
  42.         return;
  43.     }
  44.  
  45.     if(dcat == drat) return;
  46.  
  47.     if(dcat == 1 && drat == -1 && poscat > posrat) return;
  48.  
  49.     if(dcat == -1 && drat == 1 && poscat < posrat) return;
  50.  
  51.     double intersect = stTime + (abs(poscat - posrat) + 0.0)/2.0;
  52.  
  53.     if(intersect > hide[rat] + 0.0 || intersect > hide[cat] + 0.0) return;
  54.  
  55.     if(intersect < when[rat]){
  56.         when[rat] = intersect;
  57.         who[rat] = cat;
  58.     }
  59.     else if(intersect == when[rat])
  60.         invalidtest = 1;
  61.  
  62. }
  63. void solve(){
  64.  
  65.     scanf("%d %d",&n,&m);
  66.  
  67.     for(int j = 1 ; j <= n + m ; j++){
  68.         scanf("%d %d %d",&st[j],&en[j],&wakeup[j]);
  69.         hide[j] = wakeup[j] + abs(en[j] - st[j]);
  70.         when[j] = 5e9;
  71.  
  72.     }
  73.  
  74.     memset(who , -1 , sizeof(who));
  75.  
  76.     for(int j = 1 ; j <= n ; j++){
  77.         for(int i = n + 1 ; i <= n + m ; i++){
  78.             test(j , i);
  79.  
  80.         }
  81.     }
  82.  
  83.     for(int j = n + 1 ; j <= n + m ; j++){
  84.         cout<<who[j]<<endl;
  85.     }
  86.  
  87.  
  88. }
  89. int main(){
  90.    // freopen("input.txt","r",stdin);
  91.     int T;
  92.     cin>>T;
  93.     while(T--){
  94.         solve();
  95.     }
  96.  
  97.  
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement