练习二 1004 Toxophily
来源:互联网 发布:淘宝达人怎么发帖 编辑:程序博客网 时间:2024/06/11 01:54
<span style="font-size:14px;">题目:</span>
<span style="font-size:14px;"></span><div class="panel_content">The recreation center of WHU ACM Team has indoor billiards, Ping Pang, chess and bridge, toxophily, deluxe ballrooms KTV rooms, fishing, climbing, and so on.<br>We all like toxophily.<br><br>Bob is hooked on toxophily recently. Assume that Bob is at point (0,0) and he wants to shoot the fruits on a nearby tree. He can adjust the angle to fix the trajectory. Unfortunately, he always fails at that. Can you help him?<br><br>Now given the object's coordinates, please calculate the angle between the arrow and x-axis at Bob's point. Assume that g=9.8N/m. <br></div><div class="panel_bottom"> </div><div class="panel_title" align="left">Input</div><div class="panel_content">The input consists of several test cases. The first line of input consists of an integer T, indicating the number of test cases. Each test case is on a separated line, and it consists three floating point numbers: x, y, v. x and y indicate the coordinate of the fruit. v is the arrow's exit speed.<br>Technical Specification<br><br>1. T ≤ 100.<br>2. 0 ≤ x, y, v ≤ 10000. <br></div><div class="panel_bottom"> </div><div class="panel_title" align="left">Output</div><div class="panel_content">For each test case, output the smallest answer rounded to six fractional digits on a separated line.<br>Output "-1", if there's no possible answer.<br><br>Please use radian as unit. <br></div><div class="panel_bottom"> </div><div class="panel_title" align="left">Sample Input</div><div class="panel_content"><pre><div style="FONT-FAMILY: Courier New,Courier,monospace">3<br>0.222018 23.901887 121.909183<br>39.096669 110.210922 20.270030<br>138.355025 2028.716904 25.079551<br></div>
Sample Output
1.561582<br>-1<br>-1<br>
<span style="font-size:14px;">题意:bob在(0,0)点想射到在点(x,y)的水果,初速度是v,且g=9.8,求能射到苹果的最小角度。</span>
<span style="font-size:14px;">解题思路:由题意可写出物理关系式y=tan(t)*x+g*x*x/(2*v*v*cos(t)*cos(t)),t就是速度方向与x的夹角,由关系式可知在(0,π/2)内先增后减</span>
<span style="font-size:14px;">可以先用三分求出t的最大值,然后再用二分在(0,t0)内求出符合要求的值。</span>
<span style="font-size:14px;">感想:二分加三分,三分用的还是不好。</span>
<span style="font-size:14px;">代码:</span>
<span style="font-size:14px;">#include<iostream> #include<cstdio> #include<iomanip> #include<cmath> using namespace std; const double PI=acos(-1.0); const double g=9.8; double x,y,v; double f(double t) { return x*tan(t)-g*x*x/2/(v*v*cos(t)*cos(t)); } double ef(double left,double right){double mid;while(right-left>=1e-9){mid=(left+right)/2;if(f(mid)>=y)right=mid;else left=mid;}return left;}double sf(double left,double right) { double mid,midmid;while(right-left>=1e-9) { mid=left+(right-left)/3; midmid=right-(right-left)/3; if(f(mid)<=f(midmid)) left=mid; else right=midmid; } return (mid+midmid)/2; } int main() { int t; double t0; cin>>t; while(t--) { cin>>x>>y>>v; t0=sf(0,PI/2); if(f(t0)<y) cout<<"-1"<<endl;else cout<<fixed<<setprecision(6)<<ef(0,t0)<<endl; } return 0; } </span>
0 0
- 练习二 1004 Toxophily
- 1004 Toxophily
- 1004 Toxophily
- 1004 Toxophily
- 1004Toxophily
- 1004-Toxophily
- acm 2 1004 Toxophily
- HDU 1004 Toxophily
- Toxophily
- Toxophily
- Toxophily
- Toxophily
- 练习二1004
- hdu2298.Toxophily
- 4Toxophily
- Toxophily HDU
- 练习二 1004 射箭问题
- 练习(二)
- PHP编程----for循环的妙用
- gradle 入门
- 关于变量的讨论程序
- 表单对齐方式
- 策略模式
- 练习二 1004 Toxophily
- Android 怎么向打开的网页中自动填充用户名和密码?
- ZeroNet如何快速发布并推送文章
- 死锁
- View动画(补间动画)
- Quick Leaner学Python
- Android6.0以后,如何获取当前运行的app
- Android实现IOS向右滑动退出当前Activity
- java源码分析(1)-Integer