Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <stdio.h>
- #include <cmath>
- #include <queue>
- #include <iomanip>
- #include <algorithm>
- #include <vector>
- #include <set>
- #include <stack>
- #include <map>
- #include <deque>
- #include <cstring>
- #define f first
- #define s second
- #define ll long long
- #define pb push_back
- #define all(x) x.begin(),x.end()
- #define mp make_pair
- #define y0 wefkljekfjwek
- #define y1 wdfefkljekfjwek
- #define y2 rfwdfefkljekfjwek
- using namespace std;
- const int N=10004;
- const long double PI=acos(-1.0);
- long double n,w,v;
- long double ang[N];
- int x[N],t[N];
- int ans=0;
- vector<int> same[N];
- void new_test()
- {
- ans=0;
- for(int i=0;i<n;i++)
- same[t[i]].pop_back();
- }
- long double to_rad(int x)
- {
- return 1.0*x/60*PI/180;
- }
- void rr(long double &a)
- {
- a=floor(a*1e12+0.5)/1e12;
- }
- void process(vector<int> id)
- {
- long double cur_vy = w/t[id[0]];
- rr(cur_vy);
- if(w>v*t[id[0]])
- {
- return;
- }
- long double mx_vx=v*cos(asin(1.0*cur_vy/v));
- rr(mx_vx);
- long double max_dif=mx_vx*t[id[0]];
- rr(max_dif);
- vector<pair<long double,long double> > segs;
- vector<long double> pts;
- for(int i=0;i<id.size();i++)
- {
- int cur=id[i];
- pair<long double,long double> seg;
- seg.f=x[cur];
- long double dx=w*tan(to_rad(abs(ang[cur])));
- rr(dx);
- if(ang[cur]<0)
- seg.s=x[cur]-dx;
- else
- seg.s=x[cur]+dx;
- rr(seg.s);
- segs.pb(seg);
- pts.pb(seg.f);
- pts.pb(seg.s);
- }
- sort(all(pts));
- sort(all(segs));
- for(int i=0;i<pts.size();i++)
- rr(pts[i]);
- for(int i=0;i<segs.size();i++)
- {
- rr(segs[i].f);
- rr(segs[i].s);
- }
- for(int i=0;i<pts.size();i++)
- {
- long double down=pts[i];
- long double up=pts[i]+max_dif;
- rr(up);
- rr(down);
- int cur=0;
- for(int j=0;j<segs.size();j++)
- {
- if(segs[j].f<=down && segs[j].s>=up)
- cur++;
- else if(segs[j].f>=down && segs[j].s<=up)
- cur++;
- }
- ans=max(ans,cur);
- down=pts[i];
- up=pts[i]-max_dif;
- rr(up);
- rr(down);
- cur=0;
- for(int j=0;j<segs.size();j++)
- {
- if(segs[j].f<=down && segs[j].s>=up)
- cur++;
- else if(segs[j].f>=down && segs[j].s<=up)
- cur++;
- }
- ans=max(ans,cur);
- }
- for(int i=0;i<pts.size();i++)
- {
- long double up=pts[i];
- long double down=pts[i]+max_dif;
- rr(up);
- rr(down);
- int cur=0;
- for(int j=0;j<segs.size();j++)
- {
- if(segs[j].f<=down && segs[j].s>=up)
- cur++;
- else if(segs[j].f>=down && segs[j].s<=up)
- cur++;
- }
- ans=max(ans,cur);
- up=pts[i];
- down=pts[i]-max_dif;
- rr(up);
- rr(down);
- cur=0;
- for(int j=0;j<segs.size();j++)
- {
- if(segs[j].f<=down && segs[j].s>=up)
- cur++;
- else if(segs[j].f>=down && segs[j].s<=up)
- cur++;
- }
- ans=max(ans,cur);
- }
- }
- int main()
- {
- ios_base::sync_with_stdio(0);
- //freopen("INPUT.txt","r",stdin);
- int T;
- cin>>T;
- while(T--)
- {
- cin>>n>>w>>v;
- for(int i=0;i<n;i++)
- {
- cin>>x[i]>>t[i]>>ang[i];
- same[t[i]].pb(i);
- }
- for(int i=0;i<N;i++)
- if(same[i].size())
- process(same[i]);
- cout<<ans<<endl;
- new_test();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement