没什么好说的,模拟就ok了~~
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
int cmp(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
int min(int a,int b)
{
if(a>b) a=b;
return a;
}
int main()
{
char str[100010],word[10];
int num[100010];
while(gets(str)!=NULL)
{
bool space = true;
int p = 0,cc = 0;
for(int i = 0;i <= strlen(str);i++)
{
if((str[i] == ' ' || str[i] == '\n' ||str[i] == '\0' )&& !space)
{
num[cc] = 0;
int xp = 1,xq = 32;
for(int k = p-1;k >= 0;k--)
{
num[cc] += (word[k]-'a'+1) * xp;
xp *= xq;
}
cc++;
p = 0;
space = true;
}
else if(str[i] >= 'a' && str[i] <='z')
{
space = false;
word[p++] = str[i];
}
}
qsort(num,cc,sizeof(int),cmp);
/*for(int i = 0;i < cc;i++)
printf("%d ",num[i]);*/
int C = num[0];
while(true)
{
bool found=false;
for(int i=0;i<cc-1;i++)// if(w[i])
for(int j=i+1;j<cc;j++)// if(w[j])
{
int tmp1=C/num[i]; int tmp2=C/num[j];
if(tmp1%cc==tmp2%cc)
{
C = min((tmp1+1)*num[i],(tmp2+1)*num[j]);
found=true;
}
}
if(!found) break;
}
printf("%s\n%u\n\n",str,C);
}
return 0;
}