Snowflake Snow Snowflakes(哈希)

题目地址:POJ 3349 题意:给出n瓣雪花,每片雪花有六瓣,六瓣花瓣的长度按顺时针或逆时针给出,判断其中有没有相同的雪花(六瓣花瓣的长度相同) 思路:用哈希表存储,,哈希表的关键码k用六瓣花瓣的长度的和取余(取余的数找一个大点的素数即可,这样可以减少内存的占用)一个数得到,表中为雪花的存储位置。

;typedef __int64 LL;const int inf=0x3f3f3f3f;const double pi= acos(-1.0);const double esp=1e-7;const int Maxn=1e5+10;const int mod=99991;int a[Maxn][6];vector<int >has[Maxn];int check(int x,int y){int i,j,k;for(i=0; i<6; i++) {for(j=0,k=i; j<6; j++,k=(k+1)%6) {if(a[x][j]!=a[y][k])break;}if(j==6) return 1;for(j=0,k=i; j<6; j++,k=(k+5)%6) {if(a[x][j]!=a[y][k])break;}if(j==6) return 1;}return 0;}int main(){int n,i,j,k;int sum;int flag=0;while(~scanf(“%d”,&n)) {for(i=0; i<n; i++)for(j=0; j<6; j++)scanf(“%d”,&a[i][j]);for(i=0; i<n; i++) {sum=0;for(j=0; j<6; j++)sum+=a[i][j];k=sum%mod;vector<int>::iterator it;for(it=has[k].begin(); it!=has[k].end(); it++)if(check(*it,i)) {flag=1;break;}has[k].push_back(i);}if(flag)puts(“Twin snowflakes found.”);elseputs(“No two snowflakes are alike.”);}return 0;}

人生就像一杯没有加糖的咖啡,喝起来是苦涩的,

Snowflake Snow Snowflakes(哈希)

相关文章:

你感兴趣的文章:

标签云: