• sdut 1465 公共因子


    公共因子

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

    题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1465

       假设字符串也有因数,一个字符串为s1,然后可以由n个字符串s2来表示,则称s2是s1的因数。
       如“ac”是“acac”的因数。
        给两个字符串,求它们的公因数有多少个。
     

    输入

     多组数据,给定两个字符串,s1,s2。长度不超过100000,并且不含空格。
     

    输出

     每组数据一行,公因数有多少个。
     

    示例输入

    acac
    ac
    aaa
    aa

    示例输出

    1
    1

    提示

    解题思路:暴力搜索方法解题,公共因子长度一定是第一个字符串的整数倍,第一次剪枝找出所有可能(注意是“可能”)满足第一个字符串条件的因子的长度,保存在数组f1中;第二次剪枝遍历f1数组,找出所有满足第一个字符串的因子,记录它们的长度,保存在数组g1中;遍历g1数组,找出所有满足第二个字符串的公共因子的因子,用count记录所有满足条件因子的个数,count就是最后的结果,经过三次剪枝,最终可以得到答案。

    代码:

     1 #include<iostream>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<stdio.h>
     5 using namespace std;
     6 int main()
     7 {
     8     char f[100010],g[100010];
     9     while(scanf("%s%s",f,g)!=EOF)
    10     {
    11         int lenf=strlen(f),leng=strlen(g);
    12         int f1[10000]={0},g1[10000]={0},t=-1,s=-1;
    13         int i,j,k;
    14         for(i=1;i<=lenf;i++)
    15             if(lenf%i==0)f1[++t]=i;
    16         int flag;
    17         for(i=0;i<=t-1;i++)
    18         {
    19             char zhong[100010];
    20             for(j=0;j<=f1[i]-1;j++)
    21                 zhong[j]=f[j];
    22             for(j=f1[i];f[j]!='';j+=f1[i])
    23             {
    24                 flag=0;
    25                 for(k=0;k<=f1[i]-1;k++)
    26                 if(f[j+k]!=zhong[k])
    27                 {
    28                     flag=1;
    29                     break;
    30                 }
    31                 if(flag==1)break;
    32             }
    33             if(j==lenf)g1[++s]=f1[i];
    34         }
    35         g1[++s]=lenf;
    36         int count=0;
    37     for(i=0;i<=s;i++)
    38     {
    39         if(leng%g1[i]==0)
    40         {
    41             for(j=0;g[j]!='';j+=g1[i])
    42             {
    43                 flag=0;
    44                 for(k=0;k<=g1[i]-1;k++)
    45                 {
    46                     if(g[k+j]!=f[k])
    47                     {
    48                         flag=1;
    49                         break;
    50                     }
    51                 }
    52                 if(flag==1)break;
    53             }
    54             if(j==leng)count++;
    55         }
    56     }
    57     cout<<count<<endl;
    58     }
    59     return 0;
    60 }
    61         
    62         
    63              
    View Code
  • 相关阅读:
    Silverlight未能加载文件或程序集“XXX”或它的某一个依赖项。系统找不到指定的文件。
    Silverlight button样式
    全局变量的优缺点
    安装、卸载WINDOWS 服务
    递归
    数组常用api
    节流函数&防抖函数 柯里化函数
    数组
    js无缝轮播 和淡入淡出轮播
    作用域链和域解析
  • 原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/3407580.html
Copyright © 2020-2023  润新知