您的位置:首页 > 其它

poj3349 哈希

2013-12-23 14:49 274 查看
这题目写了一上午,一直错,然后自己测试数据还都对。为什么呢,为什么呢,后来我才发现代码里有一行free(tmp)。。。在55行那里。。。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#define mod 999983
using namespace std;
struct node{
int num[6];
node *next;
}p[mod];
int sign[mod];
int cmp_1(node *a,node *b,int pos){
int i,j=pos;
for(i=0;i<6;++i){
if(a->num[i]!=b->num[j])
return 0;
j=(j+1)%6;
}
return 1;
}
int cmp_2(node *a,node *b,int pos){
int i,j=pos;
for(i=0;i<6;++i){
if(a->num[i]!=b->num[j])
return 0;
j=(j-1+6)%6;
}
return 1;
}
int cmp(node *a,node *b){
int i,j;
for(i=0;i<6;++i){
if(cmp_1(a,b,i)==1||cmp_2(a,b,i)==1)
return 1;
}
return 0;
}
int main(){
node *tmp;
node *op;
int key;
int success;
tmp=(node *)malloc(sizeof(node));
int i,j,n,cnt;
while(~scanf("%d",&n)){
memset(sign,0,sizeof(sign));
success=0;
for(i=0;i<mod;++i){
p[i].next=NULL;
for(j=0;j<6;++j)    p[i].num[j]=0;
}

for(cnt=0;cnt<n;++cnt){
//free(tmp);
key=0;
tmp=(node *)malloc(sizeof(node));
for(i=0;i<6;++i){
scanf("%d",&tmp->num[i]);
key+=tmp->num[i];
key=key%mod;
}
if(success==1) continue;
tmp->next=NULL;
key=key%mod;
if(sign[key]==0){
p[key]=*tmp;
sign[key]=1;
}else if(sign[key]==1){
op=&p[key];
while(1){
if(cmp(op,tmp)==1){
success=1;
break;
}
if(op->next==NULL)  break;
op=op->next;
}
if(success) continue;
op->next=tmp;
}
}
if(success==1) printf("Twin snowflakes found.\n");
else           printf("No two snowflakes are alike.\n");

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: