POJ2002
来源:互联网 发布:linux mint 18.2 kde 编辑:程序博客网 时间:2024/05/18 02:06
已知所给点,求正方形个数
1.开始思路是根据任意两点作为正方形一条边,算出第三点,组成直角三角形,再算出第四点组成正方形,数学功底差,计算坐标时用到距离相等,垂直,运算十分复杂。
在网上搜了搜找出了已知两点,计算正方形另外两点的计算方法,只需要简单的加减运算。
已知: (x1,y1) (x2,y2)
则: x3=x1+(y1-y2) y3= y1-(x1-x2)
x4=x2+(y1-y2) y4= y2-(x1-x2)
或
x3=x1-(y1-y2) y3= y1+(x1-x2)
x4=x2-(y1-y2) y4= y2+(x1-x2)
2.用Hash查找,表长开始取得过短,少于10000.3.未初始化Hash表和stars数组,导致WA
#include<iostream>
using namespace std;#define LEN 99991
struct node
{
int x;
int y;
node *next;
};
int search(node **H,int x,int y);
node *HashTable[LEN];
node stars[1000];
int main()
{
int num,i,j,addr,x3,y3,x4,y4,count;
node *p;
cin>>num;
while(num)
{
count=0;
memset(HashTable,0,sizeof(node *)*LEN);
memset(stars,0,sizeof(node)*1000);
for(i=0;i<num;i++)
{
cin>>stars[i].x>>stars[i].y;
addr=(stars[i].x*stars[i].x+stars[i].y*stars[i].y)%LEN;
p=HashTable[addr];
if(!p)
{
HashTable[addr]=&stars[i];
stars[i].next=NULL;
}
else
{
while(p->next)
p=p->next;
p->next=&stars[i];
stars[i].next=NULL;
}
}
for(i=0;i<num-1;i++)
{
for(j=i+1;j<num;j++)
{
x3=stars[i].x+(stars[i].y-stars[j].y);
y3=stars[i].y-(stars[i].x-stars[j].x);
x4=stars[j].x+(stars[i].y-stars[j].y);
y4=stars[j].y-(stars[i].x-stars[j].x);
if(search(HashTable,x3,y3)&&search(HashTable,x4,y4))
count++;
x3=stars[i].x-(stars[i].y-stars[j].y);
y3=stars[i].y+(stars[i].x-stars[j].x);
x4=stars[j].x-(stars[i].y-stars[j].y);
y4=stars[j].y+(stars[i].x-stars[j].x);
if(search(HashTable,x3,y3)&&search(HashTable,x4,y4))
count++;
}
}
cout<<count/4<<endl;
cin>>num;
}
return 0;
}
int search(node **H,int x,int y)
{
int addr;
node *p;
addr=(x*x+y*y)%LEN;
p=H[addr];
while(p)
{
if(x==p->x&&y==p->y)
return 1;
p=p->next;
}
return 0;
}
0 0
- POJ2002
- poj2002
- poj2002
- poj2002
- POJ2002
- poj2002
- POJ2002 Squares
- poj2002 hash
- poj2002 Squares
- poj2002 Squares
- POJ2002-Squares
- POJ2002:Squares
- poj2002 哈希
- Squares-POJ2002
- Squares-POJ2002
- poj2002 Squares
- POJ2002-Squares
- poj2002——Squares
- .NET MVC3.0 伪静态实现
- Java线程:线程的同步与锁
- unity中的3种坐标
- bootstrape,根据图片数量(通用)轮播
- wl12xx移植
- POJ2002
- Java相对路径读取文件
- 自己动手写RTP服务器——关于RTP协议
- stat 函数和命令
- 常量折叠
- Windows下安装Ruby DevKit
- poj 1260
- 【JAVA】加减乘除计算
- unity中的事件函数