#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
bool us[10005];
string s[505];
int ac[505];
int re(int x)
{
for(int i=1;i<x;i++)
if(s[i]==s[x])
return i;
return 0;
}
int main()
{
int n,p;
cin>>n>>p;
for(int i=1;i<=n;i++)
{
cin>>s[i];
int ans=0,x=1,l=s[i].size();
l=min(l,3);
for(int j=1;j<=l;j++)
{
ans+=(s[i][s[i].size()-j]-'A')*x;
x*=32;
}
ans%=p;
if(re(i)) ans=ac[re(i)];
if(!us[ans]||re(i))
{
us[ans]=1;
ac[i]=ans;
cout<<ans;
}
else{
int ans0;
for(int j=1;j<=p;j++)
{
ans0=(ans+j*j)%p;
if(!us[ans0])
break;
ans0=(ans-j*j+p*p)%p;
if(!us[ans0])
break;
}
us[ans0]=1;
ac[i]=ans0;
cout<<ans0;
}
if(i!=n)
cout<<' ';
}
}
7-13 字符串关键字的散列映射
最新推荐文章于 2024-07-25 17:45:03 发布