A - SnowflakeSnowSnowflakes解题报告

来源:互联网 发布:mac os beta 回退 编辑:程序博客网 时间:2024/06/08 16:34
#include<stdio.h>#include<memory.h>const int MAX=50021;int hash [50022][7],sel[50022],a[100001][7];int main(){int N,i,j,sum,o1,o3,k;memset(hash,0,sizeof(hash));memset(sel,0,sizeof(sel));scanf("%d",&N);for(i=0;i<N;i++)for(j=0;j<6;j++)scanf("%d",&a[i][j]); o3=0;   for(i=0;i<N;i++) //*********算法实现*******   {   sum=0;   for(j=0;j<6;j++)   sum+=a[i][j];   sum=sum%MAX;          //因为sum可能很大,所以对一个大素数取模,这样减小hash数列的范围。   if(sel[sum]==0)   {   sel[sum]=1;   for(int k=0;k<6;k++) hash[sum][k]=a[i][k];   //sel数组用来判断此时hash数组上对应的是否已存在,不存在则记录1,且将此部分赋给hash数组。   }   else                      //如该位置上已存在,则比较是否相同   {   for(k=0;k<6;k++)   {   o1=0;   for(j=0;j<6;j++)       if(hash[sum][k]==a[i][j])   {   o1=1;   break;   }               if(o1==0)   break;   }      if(o1==1)   {   o3=1;   printf("Twin snowflakes found.\n");   break;   }   }   }   if(o3==0)   printf("No two snowflakes are alike.\n");   return 0;}

//题目大意就是找到两片相同的雪花!我发现只比较有没有完全相同长度的臂就可以了,不需要按时针顺序比较,可能是题目不严谨。
原创粉丝点击