传送门

没有题解,来补一篇。

观察到题目中BessieBessieBessie和杀手都在动,所以考虑相对运动,以BessieBessieBessie的位置作为原点,BessieBessieBessie不动,只考虑杀手运动。让BessieBessieBessie不动,直接杀手的位置和速度减去BessieBessieBessie的即可。

考虑杀手攻击半径为RRR,转化一下即进入以Bessie(0,0)Bessie(0,0)Bessie(0,0)为圆心,RRR为半径的圆,就可攻击到BessieBessieBessie。

所以我们只要求出每个杀手进入该圆与离开该圆的时间点即可。最后就可以对所以时间点进行排序,然后对整条时间线进行类似于扫描线的方法统计答案。

显然就是这样一张图:

求出直线与圆的交点即可。

设杀手起点为(x,y)(x,y)(x,y),速度为(vx,vy)(vx,vy)(vx,vy),设在ttt时刻恰好在交点,那么:
(x+t×vx)2+(y+t×vy)2=r2(x+t\times vx)^2+(y+t\times vy)^2=r^2 (x+t×vx)2+(y+t×vy)2=r2
化简得到一个一元二次方程:
(vx2+vy2)×t2+(2x×vx+2y×vy)×t+x2+y2−r2=0(vx^2+vy^2)\times t^2+(2x\times vx+2y\times vy)\times t+x^2+y^2-r^2=0 (vx2+vy2)×t2+(2x×vx+2y×vy)×t+x2+y2−r2=0
解出来即可。(((即程序里的work)work)work)

注意判断vx,vyvx,vyvx,vy均为0的情况。

#include<bits/stdc++.h>
#define ts cout<<"ok"<<endl
#define int long long
#define hh puts("")
using namespace std;
int n,r,top;
double bx,by,bvx,bvy,eps=1e-8,L,R;
struct node{double x,y,vx,vy;
}a[500005];
struct TM{double t;int s;
}b[500005];
inline int read(){int ret=0,ff=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-') ff=-1;ch=getchar();}while(isdigit(ch)){ret=(ret<<3)+(ret<<1)+(ch^48);ch=getchar();}return ret*ff;
}
inline void work(double A,double B,double C){//a*t*t+b*t+c=0if(fabs(A)<eps){if(C<=0) L=0,R=1e9;else L=R=-1;return;}double delta=B*B-4*A*C;if(delta<0){//一元二次方程判根 L=R=-1;return;}L=(-B-sqrt(delta))/(2*A);R=(-B+sqrt(delta))/(2*A);if(L<0) L=0;if(R<0) R=-1;
}
inline bool cmp(TM a,TM b){return a.t<b.t;
}
signed main(){n=read(),r=read();bx=read(),by=read(),bvx=read(),bvy=read();for(int i=1;i<=n;i++){a[i].x=read()-bx;a[i].y=read()-by;a[i].vx=read()-bvx;a[i].vy=read()-bvy;}for(int i=1;i<=n;i++){double ds=a[i].x*a[i].x+a[i].y*a[i].y-r*r;work(a[i].vx*a[i].vx+a[i].vy*a[i].vy,2*a[i].x*a[i].vx+2*a[i].y*a[i].vy,ds);if(R!=-1) b[++top]=(TM){L,1},b[++top]=(TM){R,-1};}sort(b+1,b+top+1,cmp);int sum=0,ans=0;for(int i=1;i<=top;i++){sum+=b[i].s;ans=max(ans,sum);}printf("%lld",ans);return 0;
}

题解 luoguP2928 【[USACO09HOL]牛的打手Cattle Bruisers】相关推荐

  1. bzoj [Usaco2009 Hol]Cattle Bruisers 杀手游戏

    Description Input 第1行输入N,R,BX,BY, BVX,BVY,之后N行每行输入四个整数Xi,Yi,VXi,VYi. Output 一个整数,表示在逃脱过程中,某一个时刻最多有这个 ...

  2. 题解 | Coffee Chicken-2019牛客暑期多校训练营第十场B题

    题目来源于牛客竞赛:https://ac.nowcoder.com/acm/contest/discuss 题目描述: 输入描述: 输出描述: 示例1: 题解: 代码: #!/usr/bin/pyth ...

  3. 题解 | Popping Balloons-2019牛客暑期多校训练营第十场F题

    题目来源于牛客竞赛:https://ac.nowcoder.com/acm/contest/discuss 题目描述: 输入描述: 输出描述: 示例1: 示例2: 题解: 代码: #include&l ...

  4. 卡通牛(Cartoon cattle)

    卡通牛(Cartoon cattle) 示例 HTML css JS 更多有趣示例 尽在 知屋安砖社区 示例 HTML <div id="world"></div ...

  5. 【题解】[USACO06JAN]牛的舞会The Cow Prom(tarjan)

    题目描述 约翰的N (2 <= N <= 10,000)只奶牛非常兴奋,因为这是舞会之夜!她们穿上礼服和新鞋子,别 上鲜花,她们要表演圆舞. 只有奶牛才能表演这种圆舞.圆舞需要一些绳索和一 ...

  6. 2020牛客暑期多校训练营(第一场)

    文章目录 A B-Suffix Array B Infinite Tree C Domino D Quadratic Form E Counting Spanning Trees F Infinite ...

  7. csust第六次周赛题解全集

    难度定义(个人) D<B<A<E<<C 传送门题目链接 D题解: 简单的思维题,自己观察一下n=1到n=5基本上可以发现规律 (没发现就打表看看吧 si =s(i-1) ...

  8. 题解 | #第二快/慢用时之差大于试卷时长一半的试卷#简单解

    题解 | #第二快/慢用时之差大于试卷时长一半的试卷# 思路:1. 使用窗口函数为每个exam_id组中的每个试卷记录赋予用时排名;分为正向用时和反向用时;计算每份试卷记录的答题用时列time_dif ...

  9. 用PHP代码实现简单的工厂模式,用PHP代码实现简单的工厂模式

    PHP代码实现简单的工厂模式方法 1.定义抽象基类 //家禽类 abstract class Fowl { abstract public function eat();//吃方法 } 2.定义子类 ...

  10. Codeforces 833D Red-Black Cobweb 边分治

    题意 一颗树,有边权,和颜色(红或黑) 求,所有的路径中,满足两种颜色的个数差不超过少的颜色的两倍的路径的权值的乘积 路径的权值为经过的边的权值的乘积 题解 边分治牛逼!!! 出现了两个错误,一个是, ...

最新文章

  1. WinAPI: SetWindowPos - 改变窗口的位置与状态
  2. QT绘制变焦线(Zoom Line)
  3. python调用什么函数实现对文件内容的读取_Python 文件读取函数 read(), readline(), readlines()...
  4. 关于Django中JsonResponse返回中文字典编码错误的解决方案
  5. SAP License:市场需要双重SAP顾问
  6. 2. 块和布局,小部件
  7. What is Dymola?---Dymola的特点和架构
  8. DAX计算月末一次加权平均出库金额
  9. 100G QSFP28 AOC有源光缆的分类及应用
  10. win10任务管理器中的专用GPU内存 vs 共享GPU内存
  11. 大厂前端面试考什么?
  12. R-S编码译码-缩短码(10,6)
  13. Nodejs安装在D盘酱紫报错?
  14. Kubernetes CKA认证运维工程师笔记-Kubernetes故障排查
  15. linux小米随身wifi密码,Ubuntu用小米随身WiFi
  16. linux基本功系列之pwd命令实战
  17. 移植ffplay媒体播放器和sdl2到Android平台
  18. git常见操作和常见错误
  19. 【Java.bug】(1)Can‘t find bundle for base name xxx, locale zh_CN
  20. 发那科 fanuc FANUC 驱动图纸,电路图

热门文章

  1. 合作模式歌利亚机器人_《歌利亚》画面战斗及机器人制作试玩图文心得 歌利亚好玩吗...
  2. python剔除st股_通达信剔除st的指标,通达信条件预警中如何剔除st股票
  3. 《Say As You Wish: Fine-grained Control of Image Caption Generation with Abstract Scene Graphs》阅读笔记
  4. Laravel学习笔记汇总——Eloquent Model模型和数据库操作
  5. L1-041 寻找250 (10分)
  6. 2020国内可用的android镜像网站
  7. STM32WB系列MCU蓝牙协议栈烧录
  8. New File(.)
  9. word2016 页码问题
  10. vue脚手架下载及使用