题目链接:https://cn.vjudge.net/problem/URAL-2067

具体思路:判断三点共线就可以了,只有一对点能满足,如果一对就没有那就没有满足的.

在计算的时候,要注意,如果是按照斜率算的话,可以把除法转换为乘法,防止精度的损失.

如果是按照距离算的话,一定要注意一点,在枚举的时候我们是选择左下和右上的点,然后再去枚举中间的每一个点,一开始我为了防止精度的损失并没有对每段距离进行开根号,直接按照平方的进行计算,但是要注意一点

假设三个点.分别是 ( x1 , y1 )  ( x2 , y2 ) 和 ( x3 , y3 ),比较的时候比较的应该是

sqrt( (x2-x1)^2 + (y2-y1)^2) + sqrt( (x3-x2)^2 + (y3-y1)^2 ) 和 sqrt( (x3-x1)^2 + (y3-y1)^2)之间的大小.

这个和  (x2-x1)^2 + (y2-y1)^2) +  (x3-x2)^2 + (y3-y1)^2 和  (x3-x1)^2 + (y3-y1)^2  之间的大小.  是完全不一样的. 如果将第一项进行平方的话,和第二项会查着一项.

不过对于这个题的话,用距离算的话,肯定会有精度损失,还是用斜率做比较稳妥.

AC代码:

#include<iostream>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<stdio.h>
#include<cmath>
using namespace std;
# define inf 0x3f3f3f3f
# define ll long long
# define pi acos(-1.0)
const int mod = 1e9 ;
const int maxn = 200000+100;
const int eps = 1e-6;
struct node
{
ll x,y;
int id;
} q[maxn];
bool cmp(node t1,node t2)
{
if(t1.x!=t2.x)return t1.x<t2.x;
return t1.y<t2.y;
}
ll cal(node t1,node t2)
{
return (t1.x-t2.x)*(t1.x-t2.x)+(t1.y-t2.y)*(t1.y-t2.y);
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%lld %lld",&q[i].x,&q[i].y);
q[i].id=i;
}
sort(q+1,q+n+1,cmp);
// for(int i=1;i<=n;i++){
// cout<<q[i].id<<" "<<q[i].x<<" "<<q[i].y<<endl;
// }
int flag=1;
ll ans=cal(q[1],q[n]);
//cout<<ans<<endl;
ll t1=q[1].x-q[n].x;
ll t2=q[1].y-q[n].y;
for(int i=2; i<=n-1; i++)
{
ll s1=q[1].x-q[i].x;
ll s2=q[1].y-q[i].y;
if(s1*t2!=s2*t1){
flag=0;
break;
}
// if(cal(q[i],q[1])+cal(q[i],q[n])>ans)
// {
// flag=0;
// break;
// }
}
if(flag)
{
printf("1\n");
printf("%d %d\n",q[1].id,q[n].id);
}
else
{
printf("0\n");
}
return 0;
}

Friends and Berries URAL - 2067 (计算三点共线和计算的时候的注意点)的更多相关文章

  1. python小练习:使用循环和函数实现一个摇骰子小游戏。游戏规则如下:游戏开始,首先玩家选择Big or Small(押大小),选择完成后开始摇三个骰子,计算总值,11<=总值<=18为“大”,3<=总值<=10为“小”。然后告诉玩家猜对或者是猜错的结果。

    python小练习:使用循环和函数实现一个摇骰子小游戏.游戏规则如下:游戏开始,首先玩家选择Big or Small(押大小),选择完成后开始摇三个骰子,计算总值,11<=总值<=18为“ ...

  2. nyis oj 68 三点顺序 (计算几何基础)

    三点顺序 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 如今给你不共线的三个点A,B,C的坐标,它们一定能组成一个三角形,如今让你推断A,B,C是顺时针给出的还是逆 ...

  3. 使用函数计算三步实现深度学习 AI 推理在线服务

    目前深度学习应用广发, 其中 AI 推理的在线服务是其中一个重要的可落地的应用场景.本文将为大家介绍使用函数计算部署深度学习 AI 推理的最佳实践,  其中包括使用 FUN 工具一键部署安装第三方依赖 ...

  4. 复杂分布式架构下的计算治理之路:计算中间件 Linkis

    前言 在当前的复杂分布式架构环境下,服务治理已经大行其道.但目光往下一层,从上层 APP.Service,到底层计算引擎这一层面,却还是各个引擎各自为政,Client-Server 模式紧耦合满天飞的 ...

  5. hdu 4885 (n^2*log(n)推断三点共线建图)+最短路

    题意:车从起点出发,每次仅仅能行驶L长度,必需加油到满,每次仅仅能去加油站或目的地方向,路过加油站就必需进去加油,问最小要路过几次加油站. 開始时候直接建图,在范围内就有边1.跑最短了,再读题后发现, ...

  6. hdu 4885 (n^2*log(n)判断三点共线建图)+最短路

    题意:车从起点出发,每次只能行驶L长度,必需加油到满,每次只能去加油站或目的地方向,路过加油站就必需进去加油,问最小要路过几次加油站. 开始时候直接建图,在范围内就有边1.跑最短了,再读题后发现,若几 ...

  7. ural 2067. Friends and Berries

    2067. Friends and Berries Time limit: 2.0 secondMemory limit: 64 MB There is a group of n children. ...

  8. URAL 2067 Friends and Berries (推理,数学)

    题意:给定 n 个人,每个人两个值s, r,要满足,p(v, u) = sqrt((sv − su)^2 + (rv − ru)^2), p(v,u,w) = (p(v,u) + p(v,w) + p ...

  9. 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数

    整个引擎代码在github上,地址为:https://github.com/sun2043430/RegularExpression_Engine.git nullable, firstpos, la ...

随机推荐

  1. centOS7设置静态ip后无法上网的解决,【亲可测】

    最近在VMware虚拟机里玩Centos,装好后发现上不了网.经过一番艰辛的折腾,终于找到出解决问题的方法了.最终的效果是无论是ping内网IP还是ping外网ip,都能正常ping通.方法四步走: ...

  2. IDEA设置头注释—自定义author和date

    IDEA设置头注释,自定义author和date的方法如下所示: 去掉波浪线的方式:鼠标选中单词 --> 点击鼠标右键 --> spelling --> save 'xxx' to ...

  3. IE 代理服务器设置程序实现

    IE 代理服务器设置程序实现 分类: Delphi2003-08-02 18:42 1398人阅读 评论(0) 收藏 举报 服务器ieinternetstringconstructordelphi 本 ...

  4. Linux下objdump查看C程序编译后的汇编代码

    http://m.blog.csdn.net/article/details?id=47747047 Uboot中start.S源码的指令级的详尽解析 http://www.crifan.com/fi ...

  5. 大家好,请问在DELPHI中#13和#10是表示什么含义的?

    #13: 表示"回车"#10: 表示"换行" ASCII码    Delphi字符     C程序      含义-------    ----------     -----     ------  ...

  6. 第144天:PS切图方法总结

    一.切图方法分类 PhotoShop从CS版本演变到现在的CC版本,切图功能发生了比较大的变化,我们可以把PhotoShop CS版本时的切图功能称为传统切图,而从PhotoShop CC版本开始PS ...

  7. 【Python】内置函数

    一.内置函数表格 详细信息 二.内置函数详情 2.1 abs(x) 返回绝对值 1 2 >>> abs(-5) 5 2.2 all(iterable) 如果这个可迭代的元素都为真,就 ...

  8. HDU4786_Fibonacci Tree

    题目很新颖的,略带智商,很好. 题目的意思是给你一些白色边和黑色边,现在问你能否用两色边构造出一颗生成树,且树中白色边的数量为一个Fibonacci数. 其实在没做题目之前我就已经听说了这个题目的解题 ...

  9. 《Java程序设计》第8周学习总结 20165218 2017-2018-1

    20165218 2017-2018-1 <Java程序设计>第8周学习总结 教材学习内容总结 第12章 java多线程机制 java中的线程 计算机在任何给定时刻只能执行一个线程,多线程 ...

  10. MapReduce(三) 典型场景(一)

    一.mapreduce多job串联 1.需求 一个稍复杂点的处理逻辑往往需要多个 mapreduce 程序串联处理,多 job 的串联可以借助 mapreduce 框架的 JobControl 实现 ...