求调双哈希,75pts。其余T
查看原帖
求调双哈希,75pts。其余T
941575
Stars_visitor_tyw楼主2024/5/25 21:33

rt。

#include<bits/stdc++.h>
using namespace std;
long long a[7];
map<long long,map<long long,int> > mp;
long long hs, pw, hs1;
const long long base=131, base1=191;
void hadsh(long long pos)
{
    hs=hs1=0;
	for(register long long i=1;i<=6;i++)
	{
		hs=hs*base+a[pos];
		hs1=hs1*base1+a[pos];
		pw=pw*base;
		if(pos==6)
		{
		    pos=1;
		}
		else pos=pos+1;
	}
}
void hadsh1(long long pos)
{
    hs=hs1=0;
	for(register long long i=1;i<=6;i++)
	{
		hs=hs*base+a[pos];
		pw=pw*base;
		hs1=hs1*base1+a[pos];
		if(pos==1)
		{
		    pos=6;
		}
		else pos-=1;
	}
}
void work(long long x)
{
    hadsh(x);
    if(mp[hs1][hs])
    {
		cout<<"Twin snowflakes found.";
		exit(0);
    }
    mp[hs1][hs]=1;
}
void work1(long long x)
{
    hadsh1(x);
    if(mp[hs1][hs])
    {
		cout<<"Twin snowflakes found.";
		exit(0);
    }
    mp[hs1][hs]=1;
}
signed main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int n;
    cin>>n;
    for(register long long i=1;i<=n;i++)
    {
        for(register long long j=1;j<=6;j++)
        {
            cin>>a[j];
        }
        for(register long long j=1;j<=6;j++)
        {
            work(j),work1(j);
        }
    }
    cout<<"No two snowflakes are alike.";
}
2024/5/25 21:33
加载中...