Boundary(2020多校第二场B)

Boundary(2020多校第二场B)

文章目录

    • 题意:
    • 题解:
      • 思路1:
        • 代码:
      • 思路二
        • 代码

题意:

坐标平面有n个点(不与原点(0,0)重复),现考虑一个圆,(0,0)点在圆的边界,问这个圆的边界上最多能有多少其他的点(不含原点)?
我们看一下样例:

4
1 1
0 2
2 0
2 2

如图所示,我们选(0,2)为P,线段op对应的角中,∠PA2O=∠OA3P,说明A2,A3也在圆上,再加上p点,一共是三个,答案就是三
在这里插入图片描述

题解:

我一开始是暴力求解,直接枚举两个点,再枚举其他点看在不在边界上,复杂度是O(n3),但显然不行

思路1:

原点肯定在边界,我们可以先枚举一个点p,原点O与p组成线段op,op是圆上的一个弦,再枚举其他点A,根据“同弧所对的圆周角相等”,我们计算出∠OAP,然后找到最多数(众数)即可。但是度数相同不一定在同一个圆上(如图),会关于OP对称,我们只需规定A只能在OP下方,这样就确定位置,即OP(向量) * OA(向量) < 0
时间复杂度O(n2log n)
在这里插入图片描述

代码:

#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
typedef __int128_t LLL;
#define N 2000 + 5int n, ans = 1, X[N], Y[N];struct Frac
{LL fz, fm;Frac() : Frac(0, 1){}Frac(LL fz, LL fm) : fz(fz), fm(fm) {}bool operator < (const Frac &rhs){return (LLL) fz * rhs.fm < (LLL) fm * rhs.fz;//判断谁的角大 }bool operator == (const Frac &rhs)//判断角是否相等 {return (LLL) fz * rhs.fm == (LLL) fm * rhs.fz;}
}A[N];int Cross(int lhs, int rhs)//判断是否平行 
{return X[lhs] * Y[rhs] - X[rhs] * Y[lhs];
}int Dis2(int lhs, int rhs)//两点的距离的平方和 
{int dx = X[lhs] - X[rhs], dy = Y[lhs] - Y[rhs];return dx * dx + dy * dy;
}int Sgn(int x)//用以调整x的正负 
{if (x > 0) return 1;if (x < 0) return -1;return 0;
}Frac GetCosAngle2(int i, int j)
{int a2 = Dis2(0, i);//求边 int b2 = Dis2(i, j);int c2 = Dis2(0, j);int sgn = Sgn(b2 + c2 - a2);return Frac(1LL * sgn * (b2 + c2 - a2) * (b2 + c2 - a2), 4LL * b2 * c2);//赋值 //余弦定理 cosA=(b2+c2-a2)/2bc 
}int main()
{scanf("%d", &n);for (int i = 1; i <= n; i ++)scanf("%d%d", X + i, Y + i);for (int i = 1; i <= n; i ++){int cnt = 0;for (int j = 1; j <= n; j ++)if (Cross(i, j) > 0)A[++ cnt] = GetCosAngle2(i, j);sort(A + 1, A + cnt + 1);for (int l = 1, r; l <= cnt; l = r){for (r = l; A[l] == A[r] && r <= cnt; r ++) ;ans = max(ans, r - l + 1);}}printf("%d\n", ans);return 0;
}

思路二

任意两个线段的中垂线的交点作圆心,圆肯定过两个线段的四个点,又因为必过原点,所以枚举每一个点,求它与原点所做线段的中垂线,然后求中垂线的所有交点,记录交点数
也就是求每个三角形的外心
特判中垂线都平行的情况
具体求外心的方法:
a(x1,y1) b(x2,y2) c(x3,y3)
外心o(x,y)
外心是垂直平分线的交点,也就是外心到各点距离相等
(x1-x) * (x1-x)-(y1-y) * (y1-y)=(x2-x) * (x2-x)+(y2-y) * (y2-y);
(x2-x) * (x2-x)+(y2-y) * (y2-y)=(x3-x) * (x3-x)+(y3-y) * (y3-y);
化简:
2*(x2-x1)x+2(y2-y1)y=x22+y22-x12-y12;
2*(x3-x2)x+2(y3-y2)y=x32+y32-x22-y22;
A1=2*(x2-x1);
B1=2*(y2-y1);
C1=x22+y22-x12-y12;
A2=2*(x3-x2);
B2=2*(y3-y2);
C2=x32+y32-x22-y22;
所以
A1x+B1y=C1;
A2
x+B2y=C2;
结论:
x=((C1B2)-(C2B1))/((A1B2)-(A2B1));
y=((A1C2)-(A2C1))/((A1B2)-(A2B1));

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
const ll mod=998244353;
double eqs=1e-6;
struct Point{double x,y;Point(){}Point(double xx,double yy){x=xx;y=yy;}
}e[maxn];
Point operator+(Point a,Point b){  //向量加return Point(a.x+b.x,a.y+b.y);
}
Point operator-(Point a,Point b){ //向量减return Point(a.x-b.x,a.y-b.y);
}
double sqr(double x){return x*x;
}
double dis(Point a,Point b){ //求ab的长度return sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));
}
Point Circum(Point a,Point b,Point c){ //三角形外心double x1=a.x,y1=a.y;double x2=b.x,y2=b.y;double x3=c.x,y3=c.y;double a1=2*(x2-x1);double b1=2*(y2-y1);double c1=x2*x2+y2*y2-x1*x1-y1*y1;// double a2=2*(x3-x2);double b2=2*(y3-y2);double c2=x3*x3+y3*y3-x2*x2-y2*y2;double x=(c1*b2-c2*b1)/(a1*b2-a2*b1);double y=(a1*c2-a2*c1)/(a1*b2-a2*b1);return Point(x,y);
}
map<pair<double,double>,int> m;
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lf %lf",&e[i].x,&e[i].y);}Point o=Point(0,0);int ans=0;for(int i=1;i<=n;i++){m.clear();for(int j=1;j<=n;j++){if(e[i].x*e[j].y-e[j].x*e[i].y<=eqs) continue;//如果平行 Point oo=Circum(o,e[i],e[j]);ans=max(++m[make_pair(oo.x,oo.y)],ans);}}printf("%d\n",ans+1);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core开发日志——Linux版本的SQL Server

SQL Server 2017版本已经可以在Linux系统上安装&#xff0c;但我在尝试.NET Core跨平台开发的时候使用的是Mac系统&#xff0c;所以这里记录了在Mac上安装SQL Server的过程。最新的SQL Server没有专门为Mac系统准备安装包&#xff0c;但由于Mac系统上支持Docker&#xff0c;所以…

【倍增】【线段树】雨林跳跃(luogu 7599[APIO 2021 T2])

正题 luogu 7599[APIO 2021 T2] 题目大意 给你一排树中每棵树的高度&#xff0c;每次跳跃可以跳到左/右边第一棵比该树高的树&#xff0c;问你从A-B中某棵树跳到C-D中的某棵树的最小步数&#xff08;A⩽B<C⩽DA\leqslant B< C\leqslant DA⩽B<C⩽D&#xff09; 解题…

dotnetClub 的前世今生

三年之前&#xff0c;我做过一个在线调查&#xff0c;当时有不少人还是对一个在线社区表示出期待。.NET Core 技术正风声水起&#xff0c;所以我就开始了用它来开发一个论坛的计划。最近正式将项目推动到了一个 MVP 的状态。感兴趣的朋友&#xff0c;现在可以访问 preview.dotn…

【每日一题】7月13日题目精讲—Kingdom

【每日一题】7月13日题目精讲—Kingdom 文章目录题目描述题解&#xff1a;代码:时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 1048576K&#xff0c;其他语言2097152K 64bit IO Format: %lld题目描述 X王国有n位官员&#xff0c;编号从1到n。国…

CanalSharp-mysql数据库binlog的增量订阅消费组件Canal的.NET客户端

一.前言CanalSharp是阿里巴巴开源项目mysql数据库binlog的增量订阅&消费组件 Canal 的.NET客户端&#xff0c;关于什么是 Canal&#xff1f;又能做什么&#xff1f;我会在后文为大家一一介绍。CanalSharp 这个项目&#xff0c;是由我和 WithLin(主要贡献) 完成&#xff0c;…

【每日一题】7月14日题目精讲—压缩

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 给一个由小写字母组成的字符串&#xff0c;我们可以用一种简单的方法来压缩其中的重复…

【DevOps+LIVE】直播复盘 – DevOps能力成长模型2018首发

昨天晚上小编和DevOpsDays中国核心组织者刘征老师和张乐老师一起嗨了一把&#xff0c;本来规划进行1小时的直播结果延长到了2个小时才结束&#xff0c;观众人数在前半段一直处于增长状态&#xff0c;直到开播一小时到达顶峰。小伙伴也非常给力&#xff0c;一共提出了40多个问题…

Emit动态代理.NetCore迁移之旅

前言】前面我们介绍了Aop 从静态代理到动态代理&#xff1a;https://www.cnblogs.com/7tiny/p/9657451.html我们在.NetFramework平台下使用微软提供的Emit技术实现了动态代理类的生成。但是.NetCore作为微软.Net平台的春天&#xff0c;如果类库光支持.NetFramework&#xff0c;…

asp.net core结合Gitlab-CI实现自动化部署

一、前言在之前的文章中写过k8sJenkinsGitLab-自动化部署asp.net core项目 的topic&#xff0c;这次讲解一下gitlab-ci的CI/CD&#xff0c;说实话&#xff0c;自动化部署是在是非常的舒服&#xff0c;而且gitlab-ci很适合中小项目的部署&#xff0c;大项目推荐使用k8s。阅读目录…

[译]ABP vNext介绍

译者注ASP.NET Boilerplate是.Net平台非常优秀的一个开源Web应用程序框架,在国内也有大量的粉丝.近日, 本人在github上闲逛, 发现ASP.NET Boilerplate团队又悄悄的建立了一个新项目: ABP vNext从名称可以看出来, 这是ASP.NET Boilerplate的下一代框架. 那么, 为什么要开发这个新…

【KMP】重复子串(ybtoj KMP-2)

正题 ybtoj KMP-2 题目大意 问你一个字符串最多由多少个相同的字符串组合而成 解题思路 如下图&#xff0c;先用KMP求出nx数组&#xff0c;那么有1∼nxn1\sim nx_n1∼nxn​和(n−nxn)∼n(n-nx_n)\sim n(n−nxn​)∼n相匹配 不难推出1∼(n−nxn)1\sim (n-nx_n)1∼(n−nxn​)…

C# 8小特性

对于C# 8&#xff0c;有吸引了大多数注意力的重大特性&#xff0c;如默认接口方法和可空引用&#xff0c;也有许多小特性被考虑在内。本文将介绍几例可能加入C#未来版本的小特性。新的赋值运算符&#xff1a;&&和||从第一个版本开始&#xff0c;C#就支持把等号和另外一…

【KMP】周期长度和(luogu 3435/ybtoj KMP-3)

正题 luogu 3435 ybtoj KMP-3 题目大意 定义S的proper前缀为S中非空且len<|S|的前缀&#xff0c;若Q是A的proper前缀&#xff0c;且A是QQ的前缀 现在问你字符串S所有前缀的最大周期之和 解题思路 如上图&#xff0c;对于一个字符串S&#xff0c;如果有周期Q&#xff0c;那…

dotnet core 开发无缝兼容Http和Websocket协议的接口服务

在应用接口开发中往往要针对不同协义开发相应的代理服务&#xff0c;但对于Websocket和http这两种协议来说就有些不同&#xff0c;从实现上来看Websocket可以说是Http的升级子协议&#xff0c; 两者在协议处理上基本一致&#xff0c;具体可以在解释Body上有所不同。FastHttpApi…

centos7 lldb 调试netcore应用的内存泄漏和死循环示例(dump文件调试)

写个demo来玩一玩linux平台下使用lldb加载sos来调试netcore应用。当然&#xff0c;在真实的产线环境中需要分析的数据和难度远远高于demo所示&#xff0c;所以demo的作用也仅仅只能起到介绍工具的作用。通常正常情况下&#xff0c;分析个几天才能得出一个结论的的结果都还是比较…

.NET微服务方案调查

.NET Core就是专门针对模块化的微服务架构而设计&#xff0c;调查下大家选择.NET微服务情况&#xff0c;如果你有微服务方面的需求可以找我哦&#xff0c;可加我微信geffzhang&#xff1a;相关文章&#xff1a;Service Fabric 与Ocelot 的集成Ocelot简易教程&#xff08;二&…

中国开源年会 COSCon 2018 今起接受报名!

大会官网二维码名片&#xff1a;点击文末左下角阅读原文&#xff0c;直达报名链接写在大会前开源 20 年&#xff0c;我们遇到了什么问题&#xff1f;‍围绕开源的方式来开发软件项目&#xff0c;正在走向业界的主流。随着开源的崛起&#xff0c;相应的问题也来了&#xff1a;Re…

.Net Core应用框架Util介绍(四)

上篇介绍了Util Angular Demo的目录结构和运行机制&#xff0c;本文介绍Util封装Angular的基本手法及背后的动机。Angular应用由Ts和Html两部分构成&#xff0c;本文介绍第一部分。Angular Ts的封装Ts是Angular的代码部分&#xff0c;用于编写页面逻辑。依赖注入( Dependency I…

2020牛客暑期多校训练营(第四场)

2020牛客暑期多校训练营&#xff08;第四场&#xff09; 这场属实有点难受 文章目录A Ancient DistanceB Basic Gcd Problem题目代码&#xff1a;C Count New StringD Dividing StringsE EliminateF Finding the Order题意&#xff1a;题解&#xff1a;代码&#xff1a;G Geome…

《C# 程序员的自我修养》送书活动结果公布

截止到9月28日24&#xff1a;00 &#xff0c;本次送书活动《C# 程序员的自我修养》共收到150多位同学参与回复。以下5位同学将获赠书籍一本&#xff1a;夏树、Damon、水墨清华、天天、kang以上同学请加小二微信领取赠书小二微信&#xff1a;geffzhang.NET社区新闻&#xff0c;深…