Advertisement
Guest User

Untitled

a guest
May 21st, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <stdio.h>
  4. #include <cmath>
  5. #include <queue>
  6. #include <iomanip>
  7. #include <algorithm>
  8. #include <vector>
  9. #include <set>
  10. #include <stack>
  11. #include <map>
  12. #include <deque>
  13. #include <cstring>
  14.  
  15. #define f first
  16. #define s second
  17. #define ll long long
  18. #define pb push_back
  19. #define all(x) x.begin(),x.end()
  20. #define mp make_pair
  21. #define y0 wefkljekfjwek
  22. #define y1 wdfefkljekfjwek
  23. #define y2 rfwdfefkljekfjwek
  24.  
  25. using namespace std;
  26.  
  27. const int N=10004;
  28. const double PI=acos(-1.0);
  29. const double EPS=1e-6;
  30.  
  31. int n,w,v;
  32. int ang[N];
  33. int x[N],t[N];
  34. int ans=0;
  35. vector<int> same[N];
  36.  
  37. void new_test()
  38. {
  39. ans=0;
  40. for(int i=0;i<n;i++)
  41. same[t[i]].pop_back();
  42. }
  43.  
  44. double to_rad(int x)
  45. {
  46. return 1.0*x/60*PI/180;
  47. }
  48.  
  49. void process(vector<int> id)
  50. {
  51. double cur_vy = w/t[id[0]];
  52.  
  53. if(w>v*t[id[0]])
  54. {
  55. return;
  56. }
  57.  
  58. double mx_vx=v*cos(asin(1.0*cur_vy/v));
  59.  
  60. double max_dif=mx_vx*t[id[0]];
  61.  
  62.  
  63. vector<pair<double,double> > segs;
  64. vector<double> pts;
  65. for(int i=0;i<id.size();i++)
  66. {
  67. int cur=id[i];
  68.  
  69. pair<double,double> seg;
  70.  
  71. seg.f=x[cur];
  72. double dx=w*tan(to_rad(abs(ang[cur])));
  73.  
  74. if(ang[cur]<0)
  75. seg.s=x[cur]-dx;
  76. else
  77. seg.s=x[cur]+dx;
  78.  
  79. segs.pb(seg);
  80. pts.pb(seg.f);
  81. pts.pb(seg.s);
  82. }
  83.  
  84. sort(all(pts));
  85. sort(all(segs));
  86.  
  87. for(int i=0;i<pts.size();i++)
  88. {
  89. double down=pts[i];
  90. double up=pts[i]+max_dif;
  91. int cur=0;
  92.  
  93. for(int j=0;j<segs.size();j++)
  94. {
  95. if(segs[j].f-EPS<down && segs[j].s>up-EPS)
  96. cur++;
  97.  
  98. if(segs[j].f>down-EPS && segs[j].s-EPS<up)
  99. cur++;
  100.  
  101. }
  102.  
  103. ans=max(ans,cur);
  104.  
  105. down=pts[i];
  106. up=pts[i]-max_dif;
  107. cur=0;
  108.  
  109. for(int j=0;j<segs.size();j++)
  110. {
  111. if(segs[j].f-EPS<down && segs[j].s>up-EPS)
  112. cur++;
  113.  
  114. if(segs[j].f>down-EPS && segs[j].s-EPS<up)
  115. cur++;
  116.  
  117. }
  118.  
  119. ans=max(ans,cur);
  120. }
  121.  
  122.  
  123. }
  124.  
  125. int main()
  126. {
  127. ios_base::sync_with_stdio(0);
  128. //freopen("INPUT.txt","r",stdin);
  129.  
  130. int T;
  131. cin>>T;
  132. while(T--)
  133. {
  134. cin>>n>>w>>v;
  135. for(int i=0;i<n;i++)
  136. {
  137. cin>>x[i]>>t[i]>>ang[i];
  138. same[t[i]].pb(i);
  139. }
  140. for(int i=0;i<N;i++)
  141. if(same[i].size())
  142. process(same[i]);
  143. cout<<ans<<endl;
  144.  
  145. new_test();
  146. }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement