这道题的难点主要是在题意的理解,理解题意以后的话就完全可以按照题目给定的算法去模拟了。然后值得注意的是C的初值,原先我认为需要枚举C的初值
后面看了一下别人的题解发现可以直接取0.
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f(char str[20])
{
int len=strlen(str);
int sum=0;
for(int i=0;i<len;i++)
sum=sum*32+(str[i]-'a'+1);
return sum;
}
int w[100],n;
int solve(int c)
{
int i,j,k;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(((c/w[i])%n)==((c/w[j])%n))
return solve(min((c/w[i]+1)*w[i],(c/w[j]+1)*w[j]));
return c;
}
int main()
{
int i,k,j;
char str[100];
while(gets(str))
{
char s[100],ch[100];
strcpy(s,str);
j=0; n=0;
int len=strlen(str);
for(i=0;i<len;)
{
while(str[i]>='a'&&str[i]<='z')
{
ch[j++]=str[i];
i++;
}
if(str[i]==' '||i==len)
{
ch[j]='\0';
w[n++]=f(ch);
while(str[i]==' ')
i++;
j=0;
}
}
int ans=solve(0);
printf("%s\n%d\n\n",s,ans);
}
return 0;
}