找一个最小的整数C使得不冲突,C必须是某个数的倍数且尽可能小,当C不满足题设条件则进行计算去找下一个C
一次ac,比较简单的模拟题,其实和哈希没啥太大关系。
注意审题,单词和单词的间隔可以不只一个空格。
转载请注明出处,谢谢!
http://blog.csdn.net/monkeyduck
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char input[200];
int main()
{
while (cin.getline(input,200))
{
int a[15],n;
char word[15][6];
int len=strlen(input);
int dex1=0,dex2=0;
int Min=0x7fffffff;
for (int i=0;i<len;i++)
{
if (input[i]==' ')
{
word[dex1][dex2]='\0';dex1++;dex2=0;
while(input[i+1]==' ')
i++;
}
else
word[dex1][dex2++]=input[i];
}
word[dex1++][dex2]='\0';
for (int i=0;i<dex1;i++)
{
int value=0,exp=1;
for (int j=strlen(word[i])-1;j>=0;j--)
{
value=value+exp*(word[i][j]-'a'+1);
exp = exp << 5;
}
a[i]=value;
if (a[i]<Min)
Min = a[i];
}
int C=Min;
bool flag;
while (1)
{
flag=1;
for (int i=0;i<dex1-1;i++)
{
for (int j=i+1;j<dex1;j++)
{
int p=C/a[i];
int q=C/a[j];
if (p%dex1==q%dex1)
{
flag=0;
C=min((p+1)*a[i],(q+1)*a[j]);
break;
}
}
if (!flag) continue;
}
if (flag)
break;
}
for (int i=0;i<len;i++)
cout<<input[i];
cout<<endl<<C<<endl<<endl;
}
return 0;
}