http://acm.hdu.edu.cn/showproblem.php?pid=6055

【题意】

给定n个格点,问有多少个正多边形

【思路】

  • 因为是格点,只可能是正方形
  • 枚举正方形的对角线,因为有两条对角线,最后答案要/2
  • 也可以枚举正方形的边,因为有四条边,答案要/4
  • 看当前对角线确定的正方形是否存在,用几何知识求出目标点的坐标,然后二分查找目标点是否存在

【Accepted】

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include<iostream>
#include <vector>
using namespace std ;
#define eqs 1e-9
struct node
{
double x , y ;
} p[] ;
bool cmp(node a,node b)
{
return ( a.x < b.x || ( a.x == b.x && a.y < b.y ) ) ;
}
bool judge(double x,double y,int n)
{
int low = , mid , high = n- ;
while( low <= high )
{
mid = (low + high) / ;
if( fabs(p[mid].x-x) < eqs && fabs(p[mid].y-y) < eqs )
return true ;
else if( p[mid].x-x > eqs || ( fabs(p[mid].x-x) < eqs && p[mid].y-y > eqs ) )
high = mid - ;
else
low = mid + ;
}
return false ;
}
int main()
{
int n,num;
double x,xx,y,yy;
while(scanf("%d", &n)!=EOF&&n)
{
num = ;
for(int i = ; i < n ; i++)
{
cin>>p[i].x>>p[i].y;
}
sort(p,p+n,cmp) ;
for(int i = ; i < n ; i++)
{
for(int j = i+ ; j < n ; j++)
{
if( i == j ) continue ;
x = (p[i].x+p[j].x)/ ;
y = (p[i].y+p[j].y)/ ;
xx = p[i].x - x ;
yy = p[i].y - y ;
if( judge(x+yy,y-xx,n) && judge(x-yy,y+xx,n) )
{
num++ ;
}
}
}
cout<<num/<<endl;
}
return ;
}

【2017多校训练2+计算几何+板】HDU 6055 Regular polygon的更多相关文章

  1. 2017ACM暑期多校联合训练 - Team 2 1011 HDU 6055 Regular polygon (数学规律)

    题目链接 **Problem Description On a two-dimensional plane, give you n integer points. Your task is to fi ...

  2. HDU 6055 - Regular polygon | 2017 Multi-University Training Contest 2

    /* HDU 6055 - Regular polygon [ 分析,枚举 ] 题意: 给出 x,y 都在 [-100, +100] 范围内的 N 个整点,问组成的正多边形的数目是多少 N <= ...

  3. HDU 6055 Regular polygon

    Regular polygon Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  4. hdu 6055 : Regular polygon (2017 多校第二场 1011) 【计算几何】

    题目链接 有个结论: 平面坐标系上,坐标为整数的情况下,n个点组成正n边形时,只可能组成正方形. 然后根据这个结论来做. 我是先把所有点按照 x为第一关键字,y为第二关键字 排序,然后枚举向量 (p[ ...

  5. 2017 Multi-University Training Contest - Team 2 &hdu 6055 Regular polygon

    Regular polygon Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  6. HDU 6055 Regular polygon —— 2017 Multi-University Training 2

    Regular polygon Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  7. HDU 6055 Regular polygon (暴力)

    题意,二维平面上给N个整数点,问能构成多少个不同的正多边形. 析:容易得知只有正四边形可以使得所有的顶点为整数点.所以只要枚举两个点,然后去查找另外两个点就好. 代码如下: #pragma comme ...

  8. 【极角排序+双指针线性扫】2017多校训练七 HDU 6127 Hard challenge

    acm.hdu.edu.cn/showproblem.php?pid=6127 [题意] 给定平面直角坐标系中的n个点,这n个点每个点都有一个点权 这n个点两两可以连乘一条线段,定义每条线段的权值为线 ...

  9. 【(好题)组合数+Lucas定理+公式递推(lowbit+滚动数组)+打表找规律】2017多校训练七 HDU 6129 Just do it

    http://acm.hdu.edu.cn/showproblem.php?pid=6129 [题意] 对于一个长度为n的序列a,我们可以计算b[i]=a1^a2^......^ai,这样得到序列b ...

随机推荐

  1. P1967 货车运输 未完成

    #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #inclu ...

  2. 5款好用的mysql客户端

    1. EMS SQL Manager for MySQL 是一款高性能MySQL数据库服务器系统的管理和开发工具.它支持从MySQL 3.23到6.0的任一版本,并支持最新版本的MySQL的特点,包括 ...

  3. iOS 播放本地,网络视频

    /** *  创建媒体播放控制器MPMoviePlayerControlle 可以控制尺寸 * *  @return 媒体播放控制器 */ -(MPMoviePlayerController *)mo ...

  4. Linux PHP的运行模式

    关系图 首先聊一下服务器,常见的web server类型有apache和nginx Apache工作模式 Apache的工作模式是Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦 ...

  5. 简单修改BOOK主题样式

    body{ font-size: 13px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; margin: 0px; word ...

  6. jquery命名冲突

    nodeName是jquery的关键字

  7. lodash中文说明文档

    lodash中文说明文档 https://www.css88.com/doc/lodash/

  8. java 随机数 <%=System.currentTimeMillis() %>

    java 随机数<c:set var="version" value="<%=System.currentTimeMillis() %>"/& ...

  9. python之路——函数进阶

    阅读目录   楔子 命名空间和作用域 函数嵌套及作用域链 函数名的本质 闭包 本章小结 楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x> ...

  10. 样式化复选框(Styling Checkbox)

    原理:https://www.tuicool.com/articles/y67jee 表现:http://www.freejs.net/demo/381/index.html https://www. ...