uva--188+模拟

来源:互联网 发布:医学软件大全下载 编辑:程序博客网 时间:2024/05/16 18:48

这道题的难点主要是在题意的理解,理解题意以后的话就完全可以按照题目给定的算法去模拟了。然后值得注意的是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;}



0 0