Snowflake Snow Snowflakes

Snowflake Snow Snowflakes

题意: 给定一个n个六边形雪花,判定是否存在相同的
分析: 链表hash
hash 值是所有的乘积以及和



const int P = 99991;
const int maxn = 100000+100;
int snow[maxn][6],tot;
int head[maxn],nxt[maxn];
int cal(int *a){
    int sum,mul;
    sum = mul = 0;
    for(int i = 0;i < 6; ++i){
        sum = (sum+a[i])%P;
        mul = 1ll*mul*a[i]%P;
    }
    return (sum+mul)%P;
}
bool cmp(int *a,int *b){

    for(int j = 0;j < 6; ++j){
        bool yes = true;
        for(int k = 0;k < 6; ++k)
            if(a[k] != b[(j+k)%6]) yes = false;
        if(yes) return true;
        yes = true;
        for(int k = 0;k < 6; ++k)
            if(a[k] != b[(j-k+6)%6]) yes = false;
        if(yes) return true;
    }
    return false;
}
bool Insert(int *a){
    int n = cal(a);
    // cout<<n<<endl;
    for(int i = head[n];i;i = nxt[i]){
        if(cmp(snow[i],a))
            return true;
    }
    ++tot;
    memcpy(snow[tot],a,sizeof(snow[tot]));
    nxt[tot] = head[n];
    head[n] = tot;
    return false;
}
int main(void)
{
    int n;int a[6];
    cin>>n;
    for(int i = 1;i <= n; ++i){
        for(int j = 0;j < 6; ++j)scanf("%d",&a[j]);
        if(Insert(a)){
            return 0*puts("Twin snowflakes found.");
        }
    }
    puts("No two snowflakes are alike.");
    

   return 0;
}
全部评论

相关推荐

01-19 12:48
门头沟学院 C++
只想搞钱的鸽子很喜欢...:混账是很多的,还有那些在自己风华正茂的年纪说风凉话讥讽那些下岗前员工的。这些人都是现在职场环境这么烂的帮凶
点赞 评论 收藏
分享
owwhy:难,技术栈在嵌入式这块显得非常浅,并且简历有大问题。教育经历浓缩成两行就行了,写什么主修课程,说的不好听这块没人在意,自我评价删了,项目写详细点,最终简历缩成一页。相关技能怎么说呢,有点差了,还写成这么多行
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务