CF498A题解
简单解析几何。
做这道题之前,你需要知道:
-
根据两点求直线一般式。
-
根据两条直线求交点坐标。
这里直接丢公式了,百度上也有证明过程,自己推导难度也不大。
-
若两点坐标为
,则直线方程为: ,其中 。 -
若两条直线方程为
,若 则两直线平行,否则这两条直线有交点为 。
那直接暴力把每条直线的交点求出来,判断是否在
为了避免实数比大小,可以把交点的分母移到不等式另外一边,但是要注意分母正负对不等号方向的影响。
观察到坐标范围能到 ll
。
#include<cstdio>
#define ll long long
ll x1,y1,x2,y2;
ll A,B,C;
int n,cnt;
ll a,b,c;
ll fm,x,y;
int main()
{
scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2);
A=y2-y1,B=x1-x2,C=x2*y1-x1*y2;
if(x2<x1)
{
int t=x2;
x2=x1;
x1=t;
}
if(y2<y1)
{
int t=y2;
y2=y1;
y1=t;
}
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%lld",&a,&b,&c);
fm=A*b-a*B,x=c*B-C*b,y=C*a-c*A;
if(fm==0) continue;
if(fm>0&&x1*fm<=x&&x<=x2*fm&&y1*fm<=y&&y<=y2*fm) cnt++;
if(fm<0&&x1*fm>=x&&x>=x2*fm&&y1*fm>=y&&y>=y2*fm) cnt++;
}
printf("%d",cnt);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构