HDU 4445 Crazy Tank 枚举角度
来源:互联网 发布:淘宝大学生首饰店推荐 编辑:程序博客网 时间:2024/05/22 10:23
题目大意:
就是现在给定炮台高度H, 友军坦克区间[L2, R2], 敌军坦克区间[L1, R1], 现在又N发炮弹以各自的速度从炮台出射出, 可以自由调整炮台角度但是所有炮弹的角度必须一致
问在没有炮弹掉进友军坦克所在区间的条件下击中敌军坦克区间的炮弹做多能有多少个
大致思路:
刚开始想的是枚举哪个炮弹击中区间的某个边缘然后计算角度, 然后发现计算量很大, 而且精度可能有问题, 后来发现枚举角度是一个很不错的选择, 将角度分成1000份, 由于炮弹只有200个, 一次判断每个炮弹的落点即可
代码如下:
Result : Accepted Memory : 1632 KB Time : 246 ms
/* * Author: Gatevin * Created Time: 2015/3/18 12:27:32 * File Name: Kotori_Itsuka.cpp */#include<iostream>#include<sstream>#include<fstream>#include<vector>#include<list>#include<deque>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<cctype>#include<cmath>#include<ctime>#include<iomanip>using namespace std;const double eps(1e-8);typedef long long lint;int n;double v[220];double H, L1, R1, L2, R2;const double PI = acos(-1.0);const double g = 9.8;int count(double angle){ double vx, vy; double ret = 0; if(angle > PI/2) { angle -= PI/2; for(int i = 0; i < n; i++) { vx = v[i]*cos(angle); vy = v[i]*sin(angle); double t = (sqrt(2*g*H + vy*vy) + vy)/g; double x = vx*t; if(x >= L2 && x <= R2) return 0; if(x >= L1 && x <= R1) ret++; } } else { for(int i = 0; i < n; i++) { vx = v[i]*sin(angle); vy = v[i]*cos(angle); double t = (sqrt(2*g*H + vy*vy) - vy)/g; double x = vx*t; if(x >= L2 && x <= R2) return 0; if(x >= L1 && x <= R1) ret++; } } return ret;}int main(){ while(scanf("%d", &n), n) { scanf("%lf %lf %lf %lf %lf", &H, &L1, &R1, &L2, &R2); for(int i = 0; i < n; i++) scanf("%lf", v + i); int ans = 0; for(double angle = 0; angle <= PI; angle += PI/1000) ans = max(ans, count(angle)); printf("%d\n", ans); } return 0;}
0 0
- HDU 4445 Crazy Tank(枚举角度)
- hdu 4445 Crazy Tank(枚举角度)
- HDU 4445 Crazy Tank 枚举角度
- HDU 4445 Crazy Tank (物理题,枚举角度)
- HDU-4445(CRAZY TANK枚举)
- HDU 4445 Crazy Tank --枚举
- HDOJ 4445 - Crazy Tank 暴力枚举角度...
- HDU 4445 Crazy Tank 三分+枚举+二分
- hdu 4445 Crazy Tank (暴力枚举)
- [物理题+枚举] hdu 4445 Crazy Tank
- hdu 4445 Crazy Tank(枚举)
- HDU 4445 - Crazy Tank(暴力枚举)
- hdu 4445 Crazy Tank
- hdu 4445 Crazy Tank
- HDU 4445 Crazy Tank
- hdu 4445 Crazy Tank
- HDU-4445 Crazy Tank
- HDU 4445 Crazy Tank
- 如何删除 手机中的金山手机助手!
- 黑马程序员__反射
- Android WebView 总结
- LeetCode Insert Interval
- .c和.cpp文件的区别
- HDU 4445 Crazy Tank 枚举角度
- 对于多个按钮要在同一个监听器中实现自己的单击事件的方法小诀窍。
- 一则奇怪的案例处理:ORA-00257: archiver error. Connect internal only, until freed
- 用批处理实现垃圾文件清除/自动关机/清除copy病毒(转)
- extjs4.0 Ext.Array 函数方法大全
- Linux中2>&1 >/dev/null和>/dev/null 2>&1的区别
- Linux安装Tomcat外部不能访问[主要是linux中防火墙规则的配置问题]
- 二、神奇插件Tampermonkey脚本使用及介绍
- 第二周项目二长方体类