给你一个字符集合,你从其中找出一些字符串出来. 希望你找出来的这些字符串的最长公共前缀*字符串的总个数最大化.
第一行给出数字N.N在[2,1000000] 下面N行描述这些字符串,长度不超过20000 。保证输入文件不超过10MB
不知道他在考什么,但是我知道这种题卡空间。
所以我就用hash水过了……
代码:
#include#include #include using namespace std; #define seed 997 #define MOD 1500 int n; int a[1550][20050]; string s; int main() { scanf("%d",&n); int ans = 0; getline(cin,s); for(int i=1;i<=n;i++) { getline(cin,s); int len = s.length(); int hs = 0; for(int j=0;j ) { int c = s[j]-'A'; if(s[j]==' ')c=26; hs = (hs * seed +c)%MOD; a[hs][j]++; if(a[hs][j]*(j+1)>ans)ans = a[hs][j]*(j+1); } } printf("%d\n",ans); return 0; }