HDU 2701 Lampyridae Teleportae
2015-08-06 10:56
363 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2701
题意:给出1个原点以及依次给出N个点,每一次都从原点向第i点移动L的距离,更新原点,移动后若i点在以原点为圆心半径为1的圆内,则符合条件,否则继续向下一个点进行移动直到符合条件
思路:题目依然很难读,到最后都没发现只要在1的范围内就满足条件,最后是原点的更新出了点问题,我一律按等比例进行更新……利用三角函数求出x和y的比列就好
题意:给出1个原点以及依次给出N个点,每一次都从原点向第i点移动L的距离,更新原点,移动后若i点在以原点为圆心半径为1的圆内,则符合条件,否则继续向下一个点进行移动直到符合条件
思路:题目依然很难读,到最后都没发现只要在1的范围内就满足条件,最后是原点的更新出了点问题,我一律按等比例进行更新……利用三角函数求出x和y的比列就好
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define esp 0.000000001 using namespace std; int main() { int f,cas=0; double x,y; while (scanf("%d%lf%lf",&f,&x,&y)!=EOF) { if (fabs(x)<esp && fabs(y)<esp && fabs(f)<esp) break; cas++; int tx,ty,resx,resy,flag=0; while (scanf("%d%d",&tx,&ty)) { if (tx==-1 && ty==-1) break; double dis=1.0*sqrt(1.0*(x-tx)*(x-tx)+1.0*(y-ty)*(y-ty)); if (dis<=f+1 && !flag) { resx=tx; resy=ty; flag=1; } double a=1.0*tx-x,b=1.0*ty-y; x+=(a/dis*f); y+=(b/dis*f); } if (flag==0) printf("Firefly %d not caught\n",cas); else printf("Firefly %d caught at (%d,%d)\n",cas,resx,resy); } }
相关文章推荐
- 16. Element contentEditable 属性
- 该登录名来自不受信任的域,不能与 Windows 身份验证一起使用。
- AD管理-兰晓宇-专题视频课程
- 【Cocos2d入门教程三】HelloWorld之一目了然
- ulimit -a详解
- hive DATEDIFF NULL
- sql触发器(insert,update,delete)
- Web.xml配置详解之context-param
- HDU 4323
- Basic vi Commands
- Elasticsarch及插件安装
- 对于Unicode编码在js中和html中
- cakePHP 分页栏
- Android:WebView(慕课网)
- redis 内存库设置 教你怎么解决64位Windows版Redis狂占C盘的问题.
- 迁移至个人blog
- Win10正式版死机运行程序无响应该怎么办?
- 为zabbix增加服务器信息统计(服务器品牌、型号、SN号等)
- Asynctask解析以及注意事项
- Ext.Ajax.Request 如何将response.responseText作为函数返回值返回?