Description
给出对一个字符串
s[0]s[1]...s[n−1]
的
hash
函数
s[0]⋅31n−1+s[1]⋅31n−2+...+s[n−1]
,要求构造出
k
个不同的字符串使得其
Input
一个整数 k(2≤k≤1000)
Output
输出
k
个不同的字符串,每个字符串长度不超过
Sample Input
4
Sample Output
edHs
mENAGeS
fEHs
edIT
Solution
由于
s[i]⋅31n−1−i+s[i+1]⋅31n−2−i=(s[i]+1)⋅31n−1−i+(s[i+1]−31)⋅31n−2−i
,故只要第
i
位不是
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
#define maxn 1005
char s[maxn];
int main()
{
freopen("hash.in","r",stdin);
freopen("hash.out","w",stdout);
for(int i=0;i<1000;i++)s[i]='a';
s[1000]=0;
int k;
scanf("%d",&k);
while(k--)
{
printf("%s\n",s);
for(int i=0;i<1000;i++)
{
if(s[i]!='z'&& s[i]!='Z'&&'a'<=s[i+1]&& s[i+1]<'z')
{
s[i]++;
s[i+1]=s[i+1]-'a'+'A'+1;
break;
}
}
}
return 0;
}