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;
}
全部评论

相关推荐

机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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