0
点赞
收藏
分享

微信扫一扫

牛客寒假算法基础集训营 3 处女座的比赛(规律暴力构造)


处女座的比赛

链接:​​https://ac.nowcoder.com/acm/contest/329/J​​​ 来源:牛客网
 

题目描述

牛客寒假算法基础集训营 3 处女座的比赛(规律暴力构造)_字符串

经过了训练、资金等多方面的准备,处女座终于可以去比赛了!比赛采用codeforces赛制,也就意味着可以插人。现在有一道字符串的题目,处女座在room里看到一个用hash做的,于是决定把它hack掉。这个人的核心代码如下:
 

const int mod=9983;
mul[0]=p;mul[1]=q;mul[2]=r;
for (int i=0;i<26;i++)in_dex[i]=i*t+t;

int get_hash(char* s)//下标从1开始
{
int ans=0,len=strlen(s+1);
for (int i=1;i<=len;i++)
ans=(ans*mul[i%3] + in_dex[s[i]-'a'])%mod;
return ans;
}

现在处女座给你他想用来hack的第一个字符串s1s1,和常数p,q,r,t,请你帮他找出第二个字符串s2s2,使得get_hash(s1)=get_hash(s2)get_hash(s1)=get_hash(s2)。

输入描述:


输入数据共两行,第一行为四个整数p,q,r,t,表示代码里的常数。 第二行为一个整数T,表示数据组数。 接下来一行,每行一个仅由小写字母构成的字符串s1s1,表示处女座想用来hack的字符串。


输出描述:


输出一行一个和s1s1不同的仅由小写字母构成的字符串s2s2,使得get_hash(s1)=get_hash(s2)get_hash(s1)=get_hash(s2)且|s2|≤20,000|s2|≤20,000。


示例1

输入

复制


123 456 789 101 3 afyo cycw cogw


输出

复制


cnztql cnzak cnzac


备注:


100≤p,q,r≤999100≤p,q,r≤999 2≤t≤9992≤t≤999且t是素数 1≤|s1|≤10,0001≤|s1|≤10,000 1≤T≤1,0001≤T≤1,000 数据保证p,q,r,t和s1s1均为随机生成 这套题不知不觉得就结束了,祝各位大佬们看到能愉快的AK本场比赛,同时也祝处女座早日能找到真正能够两心欢悦的小姐姐,前途似锦。 注:本次比赛中出现的所有图均为真实聊天截图,均为处女座本人所述,无任何PS部分。


分析:

关键在题目中的mod, mod=9983,我们发现长度为4的字符串就有26*26*26*26=475254个, 我们就可以预处理枚举出长度为4个的所有字符串的即可,暴力抱一下数据,发现4的完全够,不过还是string用的舒服

#include <bits/stdc++.h>
using namespace std;

int p,q,r,t;
const int mod=9983;
int mul[3];
int in_dex[26];
int get_hash(string s)///注意改一下下标
{
int ans=0,len=s.size();
for (int i=0;i<len;i++)
ans=(ans*mul[(i+1)%3] + in_dex[s[i]-'a'])%mod;
return ans;
}

vector<string> ans[9983];


int main()
{
scanf("%d%d%d%d",&p,&q,&r,&t);
mul[0]=p;mul[1]=q;mul[2]=r;
for (int i=0;i<26;i++)
in_dex[i]=i*t+t;

for(int i=0;i<26;i++)
for(int j=0;j<26;j++)
for(int k=0;k<26;k++)
for(int l=0;l<26;l++)
{
string s="";
s+=char(i+'a');
s+=char(j+'a');
s+=char(k+'a');
s+=char(l+'a');
ans[get_hash(s)].push_back(s);
}
int T;
cin>>T;
while(T--)
{
string s;
cin>>s;
int sum=get_hash(s);
for(int i=0;i<ans[sum].size();i++)
if(ans[sum][i]!=s)
{
cout<<ans[sum][i]<<endl;
break;
}


}
return 0;
}

 

举报

相关推荐

0 条评论