当前位置: 首页 > news >正文

CF1046I Say Hello - crazy-

二分/三分,模拟

题意

平面上有两个人。有 \(n\) 个时刻,对于每个人,已知他在每个时刻的位置,且他们总会在两个位置间匀速移动。

如果他们的距离小于等于 \(d _ 1\),并且这是他们第一次交谈或者在他们上次互相打招呼后的某个时间点后,他们的距离大于 \(d_2\),那么他们会互相打一次招呼。

计算这两位朋友打招呼的次数。

\(2 \le n \le 10 ^ 5\);

\(0 < d _ 1 < d _ 2 < 1000\)

\(0 \le A _ x, A _ y, B _ x, B _ y \le 1000\)

题解

依据题意模拟即可。需要求出两个线段运动过程中的距离最小值,可以用三分(这里用二分实现)。

显然分为三种情况:距离递减、距离递增、距离先变小后变大。

可以二分峰值。考虑时刻 \(t\in [0,1]\),若 \(t\) 加上一个极小值后比当前更大,那么峰值就在左侧。反之同理。

代码

#include<bits/stdc++.h>
// #define int long long
using namespace std;
const int Maxn=1e5+10;
const double eps=1e-6;
int n,d1,d2,ans,flag;
struct pos
{double x,y;pos(double x=0,double y=0):x(x),y(y) {}
}a[Maxn],b[Maxn];
double dis(pos x,pos y)
{return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y));
}
pos calc(pos x,pos y,double p)
{return pos(x.x+(y.x-x.x)*p,x.y+(y.y-x.y)*p);  
}
double find(pos p1,pos p2,pos q1,pos q2)
{double re=dis(p2,q2),l,r,mid;l=eps,r=1;while(l<r+eps){mid=(l+r)/2;if(dis(calc(p1,p2,mid),calc(q1,q2,mid))<dis(calc(p1,p2,mid+eps),calc(q1,q2,mid+eps))) re=min(re,dis(calc(p1,p2,mid),calc(q1,q2,mid))),r=mid-eps;else l=mid+eps;}return re;
}
pos operator+(pos x,int p) {return pos(x.x+p,x.y+p);}
signed main()
{cin>>n>>d1>>d2;for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y>>b[i].x>>b[i].y;ans=flag=bool(dis(a[1],b[1])<d1+eps);for(int i=2;i<=n;i++){double mx,mn;mx=max(dis(a[i-1],b[i-1]),dis(a[i],b[i]));mn=find(a[i-1],a[i],b[i-1],b[i]);// cout<<i<<" "<<mx<<" "<<mn<<endl;if(fabs(mx-dis(a[i-1],b[i-1]))<eps){if(mx>d2) flag=0;if(!flag && mn<d1+eps && mn<dis(a[i-1],b[i-1])) ans++,flag=(dis(a[i],b[i])+eps<d2);}else{if(dis(a[i-1],b[i-1])>d2) flag=0;if(!flag && mn<d1+eps) ans++,flag=1;if(mx>d2) flag=0;}}cout<<ans<<endl;return 0;
}
http://www.gsyq.cn/news/79848.html

相关文章:

  • Python 函数与 lambda 表达式的结合
  • 中小企业走向境外资本市场:境外上市辅导、美股上市实践与中国境外券商投行机构角色——以顺安资本为例
  • 2025年12月佛山二手房拍卖机构标杆推荐:佛山房屋拍卖推荐佛山市中正易拍拍卖有限公司
  • 第五十七篇
  • 2025年唐老狮:游戏开发教育商业模式深度解析与性价比评估
  • 2025年12月河南驻马店气体配送优质厂家推荐:河南宏源气体,氧气气体配送、氮气气体配送、氦气气体厂家、二氧化碳气体配送、氩气气体公司、高纯气体配送、多品类气体供应新标杆
  • 2025年唐老狮:游戏开发课程体系全景解析与行业应用价值深度评估
  • 链路追踪基础SkyWalking/Zipkin认知与分布式系统问题定位实战
  • 2025年12月东营搬家公司推荐:双福搬家,东营搬家搬厂、东营河口搬家、东营垦利搬家、东营市搬家、东营单位搬家、东营设备搬运、全场景搬迁服务标杆
  • PROFILE
  • 2025年12月阳光房遮阳棚优质厂家推荐,电动凉亭遮阳棚、防风帘遮阳棚、防蚊帘遮阳棚、小型遮雨棚、移动遮雨棚、金属遮雨棚、聚焦舒适节能解锁惬意户外空间
  • 完整教程:MySQL 全体系深度解析(存储引擎、事务、日志、MVCC、锁、索引、执行计划、复制、调优)
  • 2025年热门的流延机设备/高分子材料流延机厂家最新权威推荐排行榜
  • 2025年热门的铝合金隔热条厂家推荐及采购指南
  • 2025年口碑好的电热水袋/防爆热水袋厂家最新用户好评榜
  • 完整教程:Vue-Loader 深度解析:原理、使用与最佳实践
  • #题解#洛谷P1045 麦森数#快速幂#高精度乘法#
  • 一类通过寻找区间关键点从而弱化子区间的限制而优化复杂度的问题
  • C++之函数(六) - Invinc
  • 2025 雅思报班不踩雷!高口碑机构红榜 + 3 类考生适配指南
  • 雅思培训机构怎么选?2025年这5家高性价比机构值得关注
  • 2025年口碑好的双胞胎婴儿车国货
  • vue-dawn-flow 低代码流程插件
  • 百日挑战——单词篇(第二十天) - 指南
  • 洛谷U639786 树的颜色询问 题解 树上启发式合并(dsu on tree)
  • Webpack与Vite的常用设置及主要差异分析
  • 2025 年雅思培训口碑机构 TOP5 推荐
  • 2025年质量好的平版胶印油墨/胶印油墨厂家最新热销排行
  • 【亲测】AI学术搜索哪家强?试了4款国产顶流,结果完全出乎意料!
  • 102302116_田自豪_作业4