题意是让我们找到一个C,使所有单词的哈希值不同。
C必须为w集合中的数,
要是得到两个相同的哈希值,根据
计算出新的C。
最后输出最小的C。
题目里n就是单词的个数。
因为要求最小,所以一开始只要让C=W[0]即可。此时W已经排序。
照着公式计算就行。。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int main()
{
//freopen("input.txt", "r", stdin);
int C, i, j, n, w[30];
char str[1000];
memset(str, 0, sizeof(str));
while (gets(str))
{
n = 0;
memset(w, 0, sizeof(w));
printf("%s\n", str);
for (i = 0; i <= strlen(str); i++)
{
if (str[i] == ' ' || str[i] == 0)
{
n++;
while (str[i + 1] == ' ')
i++;
}
else
w[n] = (w[n] << 5) + str[i] - 'a' + 1;
}
sort(w, w + n);
C = w[0];
while (true)
{
bool flag = false;
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
if ((C / w[i]) % n == (C / w[j]) % n)
{
C = min(((C / w[i]) + 1) * w[i] , ((C / w[j]) + 1) * w[j]);
flag = true;
}
}
}
if (!flag)
break;
}
printf("%d\n\n", C);
}
return 0;
}