国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【poj2185】Milking Grid

2019-11-14 09:48:08
字體:
來源:轉載
供稿:網友

題意 在N*M字符矩陣中找出一個最小子矩陣,使其多次復制所得的矩陣包含原矩陣。N<=10000,M<=75 aba bab aba

ab ba

解法 先找出最大的K,使得原矩陣是若干個K*M的矩陣拼成一列后的子矩陣 把一行看做一個整體,對列做KMP 用應用1的方法確定最小行寬 再在K*M的矩陣中,把一列看做一個整體,用同樣的方法求最小行寬 O(N*M)

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>using namespace std;const int N=10005;char w[N][80];int t[N],l[80],n,m,tmp;void calc_t(){ t[0]=-1; int j; for (int i=0;i<n;i++) { t[i+1]=i+1; for (int k=0;k<m;k++) { j=t[i]; while(w[i][k]!=w[j][k]&&j!=-1) j=t[j]; t[i+1]=min(++j,t[i+1]); } }}void calc_w(){ int j; l[0]=-1; for (int i=0;i<m;i++) { l[i+1]=i+1; for (int k=0;k<tmp;k++) { j=l[i]; while(w[k][i]!=w[k][j]&&j!=-1) j=l[j]; l[i+1]=min(++j,l[i+1]); } }}int main(){// freopen("std.in","r",stdin); cin>>n>>m; for (int i=0;i<n;i++) scanf("%s",w[i]); calc_t(); tmp=n-t[n]; calc_w(); int tmp1=m-l[m]; cout<<tmp*tmp1; return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青州市| 义乌市| 化德县| 盈江县| 鱼台县| 平远县| 安塞县| 潍坊市| 军事| 蓬安县| 阜南县| 边坝县| 惠安县| 竹溪县| 瑞丽市| 遵化市| 瓮安县| 禄丰县| 乌鲁木齐市| 年辖:市辖区| 敦煌市| 隆安县| 永善县| 房山区| 仁布县| 呈贡县| 台中县| 临颍县| 松原市| 博野县| 新巴尔虎右旗| 洛宁县| 崇义县| 建宁县| 汉寿县| 清远市| 永宁县| 嘉禾县| 屏边| 永新县| 阳原县|