P7055
本题是 NWRRC 2015 Problem H。
本题在 CodeForces 上有提交通道:Gym 100801H。
首先,考虑下面的字符串:
cccccccccccccccccccccccccccccccccccccccccccccccccc
一共 c。
此处,为了表述方便,将这 c 从左往右依次记为第
接下来,将任意多个(cc 改为 dD,即可构造哈希值相等的不同字符串。限制修改次数为
证明:
设被修改的 cc 分别处于第
改为 dD 后,它们贡献的哈希值为:
显然二者相等,因此修改后哈希值不变。
AC Code:
#include<iostream>
#include<string>
using namespace std;
const string stds="cccccccccccccccccccccccccccccccccccccccccccccccccc";//原字符串
const string rs="dD";//用于修改的字符串
int main()
{
string s;
int k,ans=1;
cin>>k;
cout<<stds<<'\n';//修改 0 次
for(int i=0;i<=48;i++)//修改 1 次
{
if(ans==k) return 0;
s=stds;
s.replace(i,2,rs);
cout<<s<<'\n';
ans++;
}
for(int i=0;i<=46;i++)
for(int j=i+2;j<=48;j++)//修改 2 次
{
if(ans==k) return 0;
s=stds;
s.replace(i,2,rs);
s.replace(j,2,rs);
cout<<s<<'\n';
ans++;
}
return 0;
}