zoukankan      html  css  js  c++  java
  • POJ3349 Language: Snowflake Snow Snowflakes

    POJ3349 Language: Snowflake Snow Snowflakes

    题目:传送门 


    题解:

       链表+hash的一道水题

       填个坑补个漏...

        


    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cstdlib>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 typedef long long LL;
     8 int n,tot,mod=99991;
     9 int a[10],snow[110000][10],head[110000],next[110000];
    10 int Hash(int *a) {
    11     int sum=0,ans=1;
    12     for(int i=0;i<6;i++) {
    13         sum=(sum+a[i])%mod;
    14         ans=(LL)ans*a[i]%mod;
    15     }
    16     return (sum+ans)%mod;
    17 }
    18 bool Find(int *a,int *b) {
    19     for(int i=0;i<6;i++)
    20         for(int j=0;j<6;j++) {
    21             bool bk=true;
    22             for(int k=0;k<6;k++)if(a[(i+k)%6]!=b[(j+k)%6])bk=false;
    23             if(bk)return true;
    24             bk=true;
    25             for(int k=0;k<6;k++)if(a[(i+k)%6]!=b[(j-k)%6])bk=false;
    26             if(bk)return true;
    27         }
    28     return false;
    29 }
    30 bool pd(int *a) {
    31     int x=Hash(a);
    32     for(int i=head[x];i;i=next[i])if(Find(snow[i],a))return true;
    33     ++tot;
    34     for(int i=0;i<6;i++)snow[tot][i]=a[i];
    35     next[tot]=head[x];
    36     head[x]=tot;
    37     return false;
    38 }
    39 int main() {
    40     scanf("%d",&n);tot=0;
    41     for(int i=1;i<=n;i++) {
    42         for(int j=0;j<6;j++)scanf("%d",&a[j]);
    43         if(pd(a)) {
    44             printf("Twin snowflakes found.");
    45             return 0;
    46         }
    47     }
    48     printf("No two snowflakes are alike.");
    49     return 0;
    50 }
  • 相关阅读:
    计算与软件工程 作业四
    计算与软件工程作业三
    计算机与软件工程作业二
    计算机与软件工程 作业一
    《WWXS团队》:团队项目选题报告
    计算与软件工程作业五
    计算与软件工程作业四
    计算与软件工程 作业三
    计算与软件工程 作业二
    计算与软件工程 作业一
  • 原文地址:https://www.cnblogs.com/CHerish_OI/p/8871995.html
Copyright © 2011-2022 走看看