切蛋糕(叉积)

这是一篇关于算法问题的博客,探讨如何在圆形蛋糕上沿圆心切出半个蛋糕,使得包含的草莓数量最多。博客通过分析数据范围和关键判断条件,提出使用勾股定理和叉积来确定最优解。通过对每个草莓与圆心连线的叉积判断,可以找到包含草莓最多的半圆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


**

题目*

*:
有一个圆形蛋糕,圆心座标为(xc,yc),半径为R。座标系中有一些草莓。现在要沿圆心切出半个蛋糕,使得包含草莓最多。落在蛋糕边界上也算是包含。

样例解释:

第一个样例最优解:
在这里插入图片描述

第二个样例最优解:
在这里插入图片描述
输入格式

单组测试数据。 第一行有三个浮点数,分别表示xc,yc,R。 第二行有一个整数n(1<=n<=200),表示草莓的数目。 接下来n行,每一行两个浮点数,表示草莓的座标xi,yi。 所有草莓的座标不一样,以上所有浮点数都在0到2000之间。

输出格式

输出一个整数,表示最多能包含的草莓的数目。

输入样例

样例输入1
25 25 3.5
7
25 28
23 27
27 27
24 23
26 23
24 29
26 29
样例输入2
350 200 2.0
5
350 202
350 199
350 198
348 200
352 200

输出样例

样例输出1
3
样例输出2
4

分析


数据范围比较小,时间上不用太担心超时

本题有两个关键:
1.判断点是否在圆内,可用勾股定理判断;
2.判断半圆内的点的个数,根据离散化的思想,最优解半圆的直边上一定存在一个草莓
所以遍历每个点,作点和圆心的连线,求出一边的点的个数,取最大值就是答案
在这里就需要叉积
即若有两个点(x1,y1),(x2,y2)
k=(x1y2)-(x2y1);若k>0,则逆时针旋转;k<0,则为顺时针;k=0,则旋转180度或0度

​题解:

#include<bits/stdc++.h>
using namespace std;
double xc,yc,r;
int n;
double q,p;
struct si{
   
   
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值