http://poj.org/problem?id=2185

题意:

给出一个r行c列的字符矩阵,求最小的覆盖矩阵可以将原矩阵覆盖,覆盖矩阵不必全用完。

思路:

我对于字符串的最小循环节是这么理解的:

如果next[12]=5,那么前5个前缀字符和后5个后缀字符是一样,但是此时还需要加上中间的2个,所以循环节为7。

如果next[12]=7,那么中间2个既出现在了前缀里,也出现在了后缀里,所以中间的2个字符等于开头的两个字符。此时循环节为5。

这样的话,字符串的最小循环节就是 len - next[len] 。

那么这道题的话:

对每一行求最小循环节,并对所有行求最小公倍数。

对每一列求最小循环节,并对所有列求最小公倍数。

相乘得最小面积。

注意:

如果此时的最小公倍数大于了行或列,可以直接等于行或列并退出了。

 #include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
using namespace std; const int maxn=+; int r,c;
char str[][];
int next[]; int gcd(int a,int b)
{
return b==?a:gcd(b,a%b);
} void get_nextrow(int r)
{
int i=-,j=;
next[]=-;
while(j<c)
{
if(i==- || str[r][i]==str[r][j])
next[++j]=++i;
else
i=next[i];
}
} void get_nextcol(int c)
{
int i=-,j=;
next[]=-;
while(j<r)
{
if(i==- || str[i][c]==str[j][c])
next[++j]=++i;
else
i=next[i];
}
} int main()
{
//freopen("D:\\input.txt","r",stdin);
scanf("%d%d",&r,&c);
for(int i=;i<r;i++)
scanf("%s",&str[i]); int row=;
for(int i=;i<r;i++)
{
get_nextrow(i);
row=row*(c-next[c])/gcd(row,c-next[c]);
if(row>=c)
{
row=c;
break;
}
} int col=;
for(int i=;i<c;i++)
{
get_nextcol(i);
col=col*(r-next[r])/gcd(col,r-next[r]);
{
if(col>=r)
{
col=r;
break;
}
}
}
printf("%d\n",row*col);
}

最新文章

  1. Android 6.0 权限知识学习笔记
  2. valgrind 内存检测与调用图生成
  3. 主席树:POJ2104 K-th Number (主席树模板题)
  4. 【转】ubuntu设置PATH----不错
  5. Winfrom 文本框回车进入下一个个单元格(TextBox)
  6. iOS开发之圆角指定
  7. #MainTest
  8. ORB_SLAM2之Pangolin的安装与问题处理
  9. big_menu菜单设置
  10. JFrame图形界面 ----鼠标消息
  11. 先进过程控制之一:浅说APC
  12. Eclipse+Servlet+jsp+MySql
  13. BigInteger与BigDecimal
  14. java ----&gt; 手动编译java项目
  15. Mysql带返回值与不带返回值的2种存储过程
  16. Redis高速内存缓冲平台可视化监控之RedisLive配置实战
  17. POJ 2528 Mayor&#39;s posters(线段树染色问题+离散化)
  18. PLSQL 配置连接ORACLE数据库
  19. 【二分答案】【最大流】[HNOI2007]紧急疏散EVACUATE
  20. A/B测试与灰度发布

热门文章

  1. node中的对象
  2. R向量匹配match和pmatch
  3. 并查集hdu4424
  4. Visual Studio 2015 Enterprise - 企业版 - 简体中文
  5. Object 对象有哪些方法?
  6. Android官方架构组件介绍之ViewModel
  7. 一个不需要Log4Net的写日志的简单方法
  8. stark - filter、pop、总结
  9. 巧用Salt,实现CMDB配置自动发现
  10. mac终端显示日历信息命令