题目链接:BZOJ 3098
这道题用生日攻击,根据原理在N个数中随机选数只需要随机选取sqrt(N)个数就会出现重复的数。那么我们只需要使字符串的长度取100000即可。子串的长度要取大一点,使得它的取法大于mod 1000000007,那么只要使子串的长度大于27即可。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
using namespace std;
int main(){
int N=100000,L=27;
printf("%d %d\n",N,L);
for(int i=1;i<=N;i++){
printf("%c",rand()%26+'a');
}
return 0;
}
本文详细介绍了如何通过生日攻击解决BZOJ3098问题,包括选择合适的字符串长度和子串长度以确保高效且正确地解决问题。重点在于理解生日攻击原理并将其应用到实际编程问题中。
1149

被折叠的 条评论
为什么被折叠?



