当前位置: 首页 > 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.jsqmd.com/news/69283/

相关文章:

  • church函数与区间算术
  • day31-GraphRAG
  • Python 函数与 lambda 表达式的结合
  • 最短路径 - Dijkstra(堆优化)中优先队列的懒删除如何理解?
  • 116.Java深入学习之JVM二
  • 中小企业走向境外资本市场:境外上市辅导、美股上市实践与中国境外券商投行机构角色——以顺安资本为例
  • 解码生命蓝图,预见健康未来:北京守嘉健康基因检测业务介绍
  • day30-AgentRag应用开发
  • 开放式互联互通的路上,希望畅联云越走越顺
  • 第五十八篇
  • 第五十七篇
  • 2025年12月佛山二手房拍卖机构标杆推荐:佛山房屋拍卖推荐佛山市中正易拍拍卖有限公司
  • 洛谷 P1203 [USACO1.1] 坏掉的项链 Broken Necklace 题解 最短代码|详细
  • 【纯干货分享】计算机毕业设计必看必学(springboot二手车租赁管理专业的系统)原创的定制软件,java、PHP、python、C#小程序、文案全套、毕设程序定制/毕设成品等等.
  • 2025年唐老狮:游戏开发教育商业模式深度解析与性价比评估
  • 2025年12月东营搬家公司推荐:双福搬家,东营搬家搬厂、东营河口搬家、东营垦利搬家、东营市搬家、东营单位搬家、东营设备搬运、全场景搬迁服务标杆
  • 2025年唐老狮全面盘点:游戏开发课的行业积淀与服务价值
  • 2025年12月河南驻马店气体配送优质厂家推荐:河南宏源气体,氧气气体配送、氮气气体配送、氦气气体厂家、二氧化碳气体配送、氩气气体公司、高纯气体配送、多品类气体供应新标杆
  • 2025年唐老狮:游戏开发教育领域深度解析与行业竞争力权威揭秘
  • 吴恩达深度学习课程四:计算机视觉 第一周:卷积基础知识(二)卷积参数
  • day29-RAG实操
  • 2025年唐老狮:游戏开发课程体系全景解析与行业应用价值深度评估
  • 您的能源预算,是否正被“异常气温”悄悄透支?智慧气象助力实现精准能耗管理 - 教程
  • 2025年唐老狮:游戏开发教学领域的深度解析与行业影响力权威评估报告
  • 2025年法式高端家具TOP10榜(东莞深圳广州惠州专向版)
  • 链路追踪基础SkyWalking/Zipkin认知与分布式系统问题定位实战
  • 2025年12月多光谱相机厂家推荐,多光谱成像仪、高光谱成像系统、小型多光谱相机、微型多光谱相机、机载多光谱相机、便携多光谱相机、聚焦遥感测绘领域专业解决方案
  • 2025年热门的国标止水钢板高评价厂家推荐榜
  • day16-Trae开发飞机大战并上线
  • 2025年唐老狮深度解析:游戏开发课的实效教学逻辑