题解:P7055 [NWRRC2015] Hash Code Hacker

· · 题解

题意就是说根据这个式子计算哈希值 s [0]*31^(n -1) + s [1]*31^(n -2) + ... + s[n -1] ,现在给出一个 k ,然后输出哈希值相同的 k 个 string

题解:

把这个 hash 当做一个31进制的数,那么随意生成一个字符串, 在高位减一,在低位加上 31, hash 结果是一样的 所以生成一个长度为 1000的字符串,然后逐位进行这样的操作 就正好能构造出 1000个 hash 值相等的字符串 然后输出前 K 个即可

下面直接上代码:

#include<bits/stdc++.h>
#define pi acos(-1.0)
#define INF 0x3f3f3f3f
using namespace std;
#define ll long long
#pragma comment(linker,"/STACk:10240000,10240000")
const int maxn=1e3+10;
char str[maxn];
int  main()
{
    int k;
    scanf("%d",&k);
    for(int i=0;i<1000;i++) str[i]='X';
    puts(str);
    for(int i=0;i<k-1;i++)
    {
        str[i]-=1;str[i+1]+=31;
        puts(str);
        str[i]+=1,str[i+1]-=31;
    }
    return 0;
}