• POJ 2002


    哈希技术
    #include <stdio.h>
    #include <stdlib.h>
    #include <memory.h>
    #define maxn 1003
    typedef struct
    {
    	int x;
    	int y;
    }Node;
    Node sq[1003];
    typedef struct THashTable{
    	int x,y;
    	THashTable* next;
    }HashTable;
    HashTable* hash[maxn];
    void InsertHT(int i)//构建哈希表
    {
    	int key=(sq[i].x)*(sq[i].x)+(sq[i].y)*(sq[i].y);//关键字key
    	int temH=key%maxn;
    	if(!hash[temH])
    	{
    		HashTable* tem=(HashTable*) malloc(sizeof(HashTable));//易忘点
    		tem->x=sq[i].x;
    		tem->y=sq[i].y;
    		tem->next=0;
    		hash[temH]=tem;
    	}
    	else
    	{
    		HashTable* tem=hash[temH];
    		while(tem->next)
    		{
    			tem=tem->next;
    		}
    		tem->next=(HashTable*) malloc(sizeof(HashTable));//不要忘了这一步
    		tem->next->x=sq[i].x;
    		tem->next->y=sq[i].y;
    		tem->next->next=0;
            
    	}
    
    }
    int find(int xx,int yy)
    {
    	int key=xx*xx+yy*yy;//关键字key
    	int temH=key%maxn;
    	if(!hash[temH]) return 0;//就没有这个同义词
    	HashTable* tem=hash[temH];
    	while(tem)//易错点
    	{
    		if(tem->x==xx&&tem->y==yy) return 1;
    		tem=tem->next;
    	}
    	return 0;
    }
    int main()
    {
    	int n;
    	while(scanf("%d",&n)&&n!=0)
    	{
    		memset(hash,0,sizeof(hash)); 
    		int i;
    		int tot=0;
    		for(i=0;i<n;i++)
    		{
    			scanf("%d %d",&sq[i].x,&sq[i].y);
    			InsertHT(i);
    		}
    		int x3,y3,x4,y4;
    		for(i=0;i<(n-1);i++)
    		{
    			for(int j=i+1;j<n;j++)
    			{
    				x3=sq[i].x+(sq[i].y-sq[j].y);
    				y3=sq[i].y-(sq[i].x-sq[j].x);
    				x4=sq[j].x+(sq[i].y-sq[j].y);
    				y4=sq[j].y-(sq[i].x-sq[j].x);
    				if(find(x3,y3)&&find(x4,y4)) tot++;
    				x3=sq[i].x-(sq[i].y-sq[j].y);
    				y3=sq[i].y+(sq[i].x-sq[j].x);
    				x4=sq[j].x-(sq[i].y-sq[j].y);
    				y4=sq[j].y+(sq[i].x-sq[j].x);
    				if(find(x3,y3)&&find(x4,y4)) tot++;
    			}
    		}
    		tot=tot/4;
    		printf("%d\n",tot);
    	}
    	return 0;
    }
    

  • 相关阅读:
    9-2 链表
    transient
    获取当前电脑的ip地址
    LinkList
    Java代码模拟链表
    什么是复合主键
    wp8 入门到精通
    C# 从入门到精通
    wp8 json2csharp
    wp8 安装.Net3.5
  • 原文地址:https://www.cnblogs.com/lj030/p/3002326.html
Copyright © 2020-2023  润新知