#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<iostream>
#include<string>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
using namespace std;
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define MP(x,y) make_pair(x,y)
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T1,class T2>inline void gmax(T1 &a,T2 b){if(b>a)a=b;}
template <class T1,class T2>inline void gmin(T1 &a,T2 b){if(b<a)a=b;}
const int N=1010,M=0,Z=1e9+7,ms63=1061109567;
int casenum,casei;
int n;const int len=20;
char s[N][24];
void init()
{
for(int j=0;j<len;j++)s[0][j]='C';
for(int i=1;i<=1000;i++)
{
MC(s[i],s[0]);
int p=1;
int x=i;
while(x)
{
if(x&1)
{
s[i][p-1]='B';
s[i][p]='b';
}
x>>=1;
p+=2;
}
}
}
int cnt(char s[])
{
int mul=1;
int tmp=0;
for(int i=19;~i;--i)
{
tmp+=s[i]*mul;
mul*=31;
}
return tmp;
}
void fre()
{
freopen("hash.in","r",stdin);
freopen("hash.out","w",stdout);
}
int main()
{
fre();
init();
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
puts(s[i]);
//printf("%d\n",cnt(s[i]));
}
}
return 0;
}
/*
【题意】
我们有一个字符串哈希函数,hashcode(s)=s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]。
让你构造n个不同的字符串,只含有大小写字符,使得这些字符串有相同的哈希值。
注意,运算都是基于signed 32 bit int
【类型】
构造 脑洞
【分析】
我们发现,
'A'~'Z'=65~90
'a'~'z'=97~122
ASCII码差值在31,还是可以保持在大小写字符中的。
于是上一位-1,下一位+31.
按照这个构造1000个不同字符串,输出即可~
【时间复杂度&&优化】
O(n*len)
*/
【2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest H】【字符串哈希 构造】Hash Code Hacker 构造有相同哈希值的不同字符串
最新推荐文章于 2022-03-03 16:10:39 发布