zoukankan      html  css  js  c++  java
  • 杭电acm1306

    http://acm.hdu.edu.cn/showproblem.php?pid=1306

    这题就是通过两个字符串的依次移动,然后求出对应字符相等的最大的那个数,题目中的例子可以较清楚的理解,在输出的地方注意,当这个数为0时直接输出0而非分数,当然这个数的两倍和两字符串长度和相等时,输出的也是1而不是分数,然后如果输出的一定得是分数时,先用辗转相除法求出最大公约数,再将之转化为两个互质的分子和分母,这题感觉很悲剧,居然暴力的代码也能0ms过

    #include<stdio.h>
    #include<string.h>
    int huzhi(int a,int b)
    {
        int r=a%b;
        while(r)
        {
            a=b;
            b=r;
            r=a%b;
        }
        return b;
    }
    int main()
    {
        int sum,max,i,j,t,h;
        char s1[1000],s2[1000];
        while(scanf("%s %s",s1,s2),strcmp("-1",s1))
        {
           max=0;
           for(i=0;s1[i]!='\0';i++)
           {
               sum=0;
               t=i;
               for(j=0;s2[j]!='\0';j++,t++)
               if(s1[t]==s2[j])
               sum++;
               if(sum>max)
               max=sum;
           }
           for(i=0;s2[i]!='\0';i++)
           {
               sum=0;
               t=i;
               for(j=0;s1[j]!='\0';j++,t++)
               if(s2[t]==s1[j])
               sum++;
               if(sum>max)
               max=sum;
           }
           max*=2;
           if(max==0)
           {
              printf("appx(%s,%s) = %d\n",s1,s2,max);
              continue;
           }
           else if(max==(strlen(s1)+strlen(s2)))
           {
                printf("appx(%s,%s) = 1\n",s1,s2);
                continue;
           }
           h=huzhi(strlen(s2)+strlen(s1),max);
           printf("appx(%s,%s) = %d/%d\n",s1,s2,max/h,(strlen(s1)+strlen(s2))/h);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    tomcat与resin的比较
    Linux Resin 安装配置
    [BZOJ3456]城市规划
    ZJOI 2017 仙人掌
    「LibreOJ NOI Round #1」动态几何问题
    [SDOI2015]约数个数和
    codeforce 940F
    codeforce 940F
    codeforce 940E
    [NOI2009]植物大战僵尸
  • 原文地址:https://www.cnblogs.com/huzhenbo113/p/3095339.html
Copyright © 2011-2022 走看看