Codeforces182D - Common Divisors(KMP)
题目大意
如果把字符串a重复m次可以得到字符串b,那么我们称字符串a为字符串b的一个因子,现在给定两个字符串S1和S2,求它们的公共因子个数
题解
如果它们有公共因子,那么显然它们的最小公共因子肯定是相等的~~~,公因子就是字符串的最短循环节~~~所以我们先把两个最短循环节给求出来,并判断是否相同,如果相同的话就是它们的最小公因子,然后所有的最小公因子的倍数并且是S1和S2的公约数都是它们的公因子
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <string>
using namespace std;
string T,s1,s2;
int f[100005];
void getfail(string s)
{
int j,len=s.length();
f[0]=j=-1;
for(int i=1;i<len;i++)
{
while(j>=0&&s[j+1]!=s[i]) j=f[j];
if(s[j+1]==s[i]) j++;
f[i]=j;
}
}
int main()
{
int a,b;
cin>>s1>>s2;
int n=s1.length(),m=s2.length();
getfail(s1);
if(n%(n-1-f[n-1])==0)a=n-1-f[n-1];
else a=n;
getfail(s2);
if(m%(m-1-f[m-1])==0)b=m-1-f[m-1];
else b=m;
if(a==b)
{
for(int i=0;i<a;i++)
if(s1[n-i-1]!=s2[m-i-1])
{
printf("0\n");
return 0;
}
int ans=0,t=a,ll=min(n,m);
while(t<=ll)
{
if(n%t==0&&m%t==0) ans++;
t+=a;
}
printf("%d\n",ans);
}
else
printf("0\n");
return 0;
}
Codeforces182D - Common Divisors(KMP)的更多相关文章
- Common Divisors CodeForces - 182D || kmp最小循环节
		
Common Divisors CodeForces - 182D 思路:用kmp求next数组的方法求出两个字符串的最小循环节长度(http://blog.csdn.net/acraz/articl ...
 - CF #579 (Div. 3) C.Common Divisors
		
C.Common Divisors time limit per test2 seconds memory limit per test256 megabytes inputstandard inpu ...
 - B - Common Divisors (codeforces)数论算法基本定理,唯一分解定理模板
		
You are given an array aa consisting of nn integers. Your task is to say the number of such positive ...
 - [gcd]Codeforces Common Divisors
		
Common Divisors time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
 - Codeforces Round #579 (Div. 3) B Equal Rectangles、C. Common Divisors
		
B Equal Rectangles 题意: 给你4*n个数,让你判断能不能用这个4*n个数为边凑成n个矩形,使的每个矩形面积相等 题解: 原本是想着用二分来找出来那个最终的面积,但是仔细想一想,那个 ...
 - Codeforces Round #117 (Div. 2) D.Common Divisors(KMP最小循环节)
		
http://codeforces.com/problemset/problem/182/D 题意:如果把字符串a重复m次可以得到字符串b,那么我们称字符串a为字符串b的一个因子,现在给定两个字符串S ...
 - <Sicily>Greatest Common Divisors
		
一.题目描述 A common divisor for two positive numbers is a number which both numbers are divisible by. It ...
 - A题:Common Substrings(KMP应用)
		
原题链接 注意:2号和3号get_next()函数中next[i]赋值时的区别,一个是0,一个是1,且不能互换 #include<cstdio> #include<cstring&g ...
 - D - Disjoint Set of Common Divisors
		
https://atcoder.jp/contests/abc142/tasks/abc142_d 题意 求满足互素条件下的A和B的因子最多有几个 思路: 分解gcd(A,B)的质因子,再加上1: # ...
 
随机推荐
- poj 2778 DNA Sequence ac自动机+矩阵快速幂
			
链接:http://poj.org/problem?id=2778 题意:给定不超过10串,每串长度不超过10的灾难基因:问在之后给定的长度不超过2e9的基因长度中不包含灾难基因的基因有多少中? DN ...
 - C++ 实现设计模式之观察者模式
			
1. 什么是观察者模式? 观察者模式(有时又被称为发布-订阅Subscribe>模式.模型-视图View>模式.源-收听者Listener>模式或从属者模式)是软件设计模式的一种.在 ...
 - 制作第一个UI字体
			
为什么要制作UI字体 一般来说,会有系统默认字体共我们使用,但是出于以下两个原因我们经常会需要制作独特的字体. 1.系统字体的风格和美观程度等无法满足需求. 一般来说,系统字体都比较死板.生硬,风格单 ...
 - [转载]MongoDB C# 驱动教程
			
本教程基于C#驱动 v1.6.x . Api 文档见此处: http://api.mongodb.org/csharp/current/. 简介 本教程介绍由10gen支持的,用于MongoDB的C# ...
 - C++引用的实质
			
转自探索c++的底层机制 在看这篇文章之前,请你先要明白一点:那就是c++为我们所提供的各种存取控制仅仅是在编译阶段给我们的限制,也就是说是编译器确保了你在完成任务之前的正确行为,如果你的行为不正确, ...
 - 如何用 Retrofit 2 在安卓上实现 HTTP 访问?
			
最近,笔者对安卓开发的兴趣愈发浓厚,而且不断尝试了许多传闻很棒的开发库 -- 大部分也真的很不错.于是打算写一个系列文章,介绍使用这些让人惊叹的库建立安卓示例应用的实践.这样,读者可以自行判断,这些库 ...
 - simplemodal — jquery弹出窗体插件
			
方式一:使用jquery-1.7.1.min.js(1.9.1的版本我试过了,不行) + jquery_modal.js的方式 文件: testModel.css: /* Overlay ...
 - ANDROID_MARS学习笔记_S02_011_ANIMATION_LayoutAnimationController
			
一.简介 二.代码1.xml(1)activity_main.xml <ListView android:id="@id/android:list" android:layo ...
 - RxJava开发精要2-为什么是Observables?
			
原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...
 - Form.KeyPreview 属性2
			
在使用.Net Framework编写窗体应用程序的时候,有时有需要响应窗体的按键消息. 当窗体上没有任何其他控件的时候,窗体是可以直接响应这些消息的. 但是当窗体上有其他控件时,会发现窗体再也不会响 ...