Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const int MX = 2009;
- int st[MX] , en[MX] , wakeup[MX] , hide[MX];
- int n , m;
- double when[MX];
- int who[MX];
- bool invalidtest = 0;
- void test(int cat , int rat){
- if(wakeup[rat] > hide[cat] || wakeup[cat] > hide[rat]) return ;
- int stTime = max(wakeup[cat] , wakeup[rat]);
- int dcat = (en[cat] - st[cat])/abs(en[cat] - st[cat]);
- int drat = (en[rat] - st[rat])/abs(en[rat] - st[rat]);
- int poscat = st[cat] + dcat * (stTime - wakeup[cat]);
- int posrat = st[rat] + drat * (stTime - wakeup[rat]);
- if(poscat == posrat){
- if(stTime < when[rat]){
- when[rat] = stTime;
- who[rat] = cat;
- }
- else if(stTime == when[rat])
- invalidtest = 1;
- return;
- }
- if(dcat == drat) return;
- if(dcat == 1 && drat == -1 && poscat > posrat) return;
- if(dcat == -1 && drat == 1 && poscat < posrat) return;
- double intersect = stTime + (abs(poscat - posrat) + 0.0)/2.0;
- if(intersect > hide[rat] + 0.0 || intersect > hide[cat] + 0.0) return;
- if(intersect < when[rat]){
- when[rat] = intersect;
- who[rat] = cat;
- }
- else if(intersect == when[rat])
- invalidtest = 1;
- }
- void solve(){
- scanf("%d %d",&n,&m);
- for(int j = 1 ; j <= n + m ; j++){
- scanf("%d %d %d",&st[j],&en[j],&wakeup[j]);
- hide[j] = wakeup[j] + abs(en[j] - st[j]);
- when[j] = 5e9;
- }
- memset(who , -1 , sizeof(who));
- for(int j = 1 ; j <= n ; j++){
- for(int i = n + 1 ; i <= n + m ; i++){
- test(j , i);
- }
- }
- for(int j = n + 1 ; j <= n + m ; j++){
- cout<<who[j]<<endl;
- }
- }
- int main(){
- // freopen("input.txt","r",stdin);
- int T;
- cin>>T;
- while(T--){
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement