poj 3349 Snowflake Snow Snowflakes

#include<iostream>        //哈希函数,拉链法
#include<vector>
using namespace std;
const int mv=99991;
int data[100002][6];
vector
<int> hash[100002];

bool same(int a[6],int b[6])
//a[]的下标j总是从0到6,固定a,而b[]的起始下标i从0到6,绕顺时针(向右)和逆时针旋转
{
int tag;
for(int i=0;i<6;++i)
{
tag
=0;
for(int j=0;j<6;++j)
{
if(a[j]!=b[(j+i)%6]) //b绕顺时针(向右)
{
tag
=1;break;
}
}
if(tag==0)
return true;
}
for(int i=0;i<6;++i)
{
tag
=0;
for(int j=0;j<6;++j)
{
if(a[j]!=b[(-j+i+6)%6]) //b绕逆时针
{
tag
=1;break;
}
}
if(tag==0)
return true;
}
return false;
}
int main()
{
int n,i,j,sum;
scanf(
"%d",&n);
for(i=1;i<=n;++i)
for(j=0;j<6;++j)
scanf(
"%d",&data[i][j]);
for(i=1;i<=n;++i)
{
sum
=0;
for(j=0;j<6;++j)
sum
+=data[i][j];
sum
%=mv;
if(hash[sum].size()>0)
{
for(j=0;j<hash[sum].size();++j)
{
int k=hash[sum][j];
if(same(data[i],data[k]))
{
printf(
"Twin snowflakes found.\n");
return 0;
}
}
}
hash[sum].push_back(i);
}
printf(
"No two snowflakes are alike.\n");
return 0;
}

  

暴力求解
#include<iostream>        //暴力求解
#include<algorithm>
using namespace std;
struct node
{
int arr[6],sum;
bool operator<(const node& o)
{
if(sum!=o.sum)
return sum<o.sum;
for(int i=0;i<6;++i)
if(arr[i]!=o.arr[i])
return arr[i]<o.arr[i];
return true;
}
}hash[
100002];

bool same(int a[6],int b[6])
//a[]的下标j总是从0到6,固定a,而b[]的起始下标i从0到6,绕顺时针(向右)和逆时针旋转
{
int tag;
for(int i=0;i<6;++i)
{
tag
=0;
for(int j=0;j<6;++j)
{
if(a[j]!=b[(j+i)%6]) //b绕顺时针(向右)
{
tag
=1;break;
}
}
if(tag==0)
return true;
}
for(int i=0;i<6;++i)
{
tag
=0;
for(int j=0;j<6;++j)
{
if(a[j]!=b[(-j+i+6)%6]) //b绕逆时针
{
tag
=1;break;
}
}
if(tag==0)
return true;
}
return false;
}
int main()
{
int n,i,j,a;
scanf(
"%d",&n);
for(i=0;i<n;++i)
{
hash[i].sum
=0;
for(j=0;j<6;++j)
{
scanf(
"%d",&a);
hash[i].arr[j]
=a;
hash[i].sum
+=a;
}
}
sort(hash,hash
+n);
for(i=0;i<n;++i)
{
for(j=i+1;j<n&&hash[j].sum==hash[i].sum;++j)
{
if(same(hash[i].arr,hash[j].arr))
{
printf(
"Twin snowflakes found.\n");
return 0;
}
}
}
printf(
"No two snowflakes are alike.\n");
return 0;
}

  

posted on 2011-07-22 20:42  sysu_mjc  阅读(117)  评论(0编辑  收藏  举报

导航