Squares-暴力枚举或者二分
2015-07-24 17:47
501 查看
B - Squares
Time Limit:3500MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit Status Practice POJ
2002
Description
A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that rotating about its centre by 90 degrees gives the same polygon. It is not the only polygon with the latter property, however,
as a regular octagon also has this property.
So we all know what a square looks like, but can we find all possible squares that can be formed from a set of stars in a night sky? To make the problem easier, we will assume that the night sky is a 2-dimensional plane, and each star is specified by its x
and y coordinates.
Input
The input consists of a number of test cases. Each test case starts with the integer n (1 <= n <= 1000) indicating the number of points to follow. Each of the next n lines specify the x and y coordinates (two integers) of each point. You may assume that the
points are distinct and the magnitudes of the coordinates are less than 20000. The input is terminated when n = 0.
Output
For each test case, print on a line the number of squares one can form from the given stars.
Sample Input
Sample Output
Time Limit:3500MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit Status Practice POJ
2002
Description
A square is a 4-sided polygon whose sides have equal length and adjacent sides form 90-degree angles. It is also a polygon such that rotating about its centre by 90 degrees gives the same polygon. It is not the only polygon with the latter property, however,
as a regular octagon also has this property.
So we all know what a square looks like, but can we find all possible squares that can be formed from a set of stars in a night sky? To make the problem easier, we will assume that the night sky is a 2-dimensional plane, and each star is specified by its x
and y coordinates.
Input
The input consists of a number of test cases. Each test case starts with the integer n (1 <= n <= 1000) indicating the number of points to follow. Each of the next n lines specify the x and y coordinates (two integers) of each point. You may assume that the
points are distinct and the magnitudes of the coordinates are less than 20000. The input is terminated when n = 0.
Output
For each test case, print on a line the number of squares one can form from the given stars.
Sample Input
4 1 0 0 1 1 1 0 0 9 0 0 1 0 2 0 0 2 1 2 2 2 0 1 1 1 2 1 4 -2 5 3 7 0 0 5 2 0
Sample Output
1 6 1
/* Author: 2486 Memory: 24256 KB Time: 375 MS Language: C++ Result: Accepted */ //此题目暴力暴力枚举 //通过已经确定好的两点,算出剩下的两点 //(有两种情况) //一个在上面,一个下面 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=20000+5; struct point{ int x,y; }ps[1005]; int n,ans; bool vis[maxn<<1][maxn<<1]; int main(){ while(~scanf("%d",&n),n){ ans=0; for(int i=0;i<n;i++){ scanf("%d%d",&ps[i].x,&ps[i].y); ps[i].x+=20000,ps[i].y+=20000;//在数组里面可以存储负数 vis[ps[i].x][ps[i].y]=true;//标记着这个点存在 } for(int i=0;i<n;i++){ for(int j=0;j<i;j++){ if(i==j)continue;//分别代表着上下两种不同的正方形 int nx1=ps[i].x+ps[i].y-ps[j].y; int ny1=ps[i].y+ps[j].x-ps[i].x; int nx2=ps[j].x+ps[i].y-ps[j].y; int ny2=ps[j].y+ps[j].x-ps[i].x; if(vis[nx1][ny1]&&vis[nx2][ny2])ans++; nx1=ps[i].x-(ps[i].y-ps[j].y); ny1=ps[i].y-(ps[j].x-ps[i].x); nx2=ps[j].x-(ps[i].y-ps[j].y); ny2=ps[j].y-(ps[j].x-ps[i].x); if(vis[nx1][ny1]&&vis[nx2][ny2])ans++; } } for(int i=0;i<n;i++){ vis[ps[i].x][ps[i].y]=false;//必须要进行清零,不能用memset,因为数组有点大 } printf("%d\n",ans/4); } return 0; }
相关文章推荐
- LA 3516 Exploring Pyramids 多叉树遍历
- Android手机为什么不同GPU游戏兼容性差别巨大
- android开发-简单动画3
- springmvc+spring+mybatis整合
- [ACM] hdoj1018 Big Number 解题报告
- android webview css z-index属性无效
- 表格排序
- Phone状态监听机制
- 使用SuspendLayout和ResumeLayout
- 混音算法
- [DCC Error] E2161 Error: RLINK32: Error opening file "_____.drf"
- 判断ascii码是什么的函数
- linux下测试程序中各函数执行时间工具
- 花开富贵--国兰的基本介绍
- 动态链接库.dll和.lib
- android wifi讲解 wifi列表显示
- 小马哥--高仿华为p7 刷机 两个版本拆机主板对比图与开机界面对比图
- 计算两端yuv视频流中每一帧的ssim值
- java 反射浅析
- PHP表单之表单验证