博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 961D Pair Of Lines
阅读量:6242 次
发布时间:2019-06-22

本文共 1673 字,大约阅读时间需要 5 分钟。

题目链接:

题意:给你n个二维坐标点,xi,yi的绝对值在1e9以内,然后问你能不能用两条直线穿过所有点。可以输出YES,不可以输出NO。

分析:当n<=4时,我们知道肯定是输出YES的。当n>4时,如果一条之间可以直接穿过所有点,那么就直接输出YES,否则选不共线的三个点,可以确定三条直线。比如选取1,2,3三个点,那么我们以1和2确定一条直线,判断这个n个点,如果有某个点不在这条直线上,我们就让他和3重新构成一条直线。如果这两条直线能穿过所有点,那么久输出YES,如果没能穿过所有点,我们就枚举剩下的情况,分别以1,3和2,3来当初始确定的直线。如果这三种情况都不可以,那么就输出NO。判断点在直线上应该比较简单,这里就不细说了。

AC代码:

1 #include
2 3 using namespace std; 4 5 struct st{ 6 long long x,y; 7 }a[100005]; 8 int n; 9 int judge(int c1,int c2,int c3){ 10 long long x1=a[c2].x-a[c1].x; 11 long long y1=a[c2].y-a[c1].y; 12 long long x2=0; 13 long long y2=0; 14 long long d=__gcd(x1,y1); 15 x1/=d; 16 y1/=d; 17 if(x1<0){ 18 x1*=-1; 19 y1*=-1; 20 } 21 int ans1=0,ans2=0; 22 for(int i=1;i<=n;i++){ 23 if(i!=c1&&i!=c2&&i!=c3){ 24 long long x3=a[i].x-a[c1].x; 25 long long y3=a[i].y-a[c1].y; 26 long long x4,y4; 27 if(x2!=0||y2!=0){ 28 x4=a[i].x-a[c3].x; 29 y4=a[i].y-a[c3].y; 30 d=__gcd(x4,y4); 31 x4/=d; 32 y4/=d; 33 if(x4<0){ 34 x4*=-1; 35 y4*=-1; 36 } 37 } 38 d=__gcd(x3,y3); 39 x3/=d; 40 y3/=d; 41 if(x3<0){ 42 x3*=-1; 43 y3*=-1; 44 } 45 //cout<
<
>n; 73 for(int i=1;i<=n;i++){ 74 cin>>a[i].x>>a[i].y; 75 } 76 if(n<=4){ 77 cout<<"YES"<
View Code

 

转载于:https://www.cnblogs.com/ls961006/p/8782688.html

你可能感兴趣的文章
[Android]使用Kotlin开发Android(二)
查看>>
php将对象数组转成普通数组
查看>>
org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files (x86)\Java\jdk1.7.0_7
查看>>
Python 中的 if __name__ == '__main__' 该如何理解(1)
查看>>
Qt之对话框设计——利用QPalette改变控件颜色
查看>>
#lspci | grep Eth
查看>>
Linux下svn常用指令【转】
查看>>
C#下2\10\16进制互转代码总汇
查看>>
人工智能和机器学习领域的一些有趣的开源项目
查看>>
Objective-C:继承的体现
查看>>
三星发布Exynos 7872移动处理器 定位中端市场
查看>>
面试题大全
查看>>
设计模式系列-命令模式
查看>>
Java中的流
查看>>
如何启动或关闭oracle的归档(ARCHIVELOG)模式
查看>>
[LintCode] Paint Fence 粉刷篱笆
查看>>
mysql中实现类似oracle中的nextval函数
查看>>
使用按键精灵+umdh定位内存泄露问题的方式
查看>>
RecyclerView实现ViewPager效果
查看>>
Bandicam视频录制技巧总结+小丸工具箱压缩视频解决视频体积问题
查看>>