`
暴风雪
  • 浏览: 390788 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[KMP]poj 2185:Milking Grid

阅读更多

大致题意:
    求一个字符矩阵的最小覆盖子矩阵,输出这个子矩阵的面积。

 

大致题意:
    关于一个字符串的最小覆盖子串可以看这里http://blog.csdn.net/fjsd155/article/details/6866991

    接下来就是把子串扩展到二维,对行和列分别求出最小覆盖子串长度,相乘输出即可

 

#include<iostream>
#include<cstring>
#include<stack>
#include<cstdio>
using namespace std;
const int nMax=100005;
char pat[nMax][80];
int lenc,lenr,next[nMax];

int get_nextR(int c){
    int i,j=-1;
    next[0]=-1;
    for(i=1;i<=lenr;i++){
        while(j>-1&&pat[j+1][c]!=pat[i][c])j=next[j];
        if(pat[j+1][c]==pat[i][c])j++;
        next[i]=j;
    }
  //  cout<<"next 2-"<<lenr-1-next[lenr-1]<<endl;
    return lenr-1-next[lenr-1];
}

int get_nextC(int r){
    int i,j=-1;
    next[0]=-1;
    for(i=1;i<=lenc;i++){
        while(j>-1&&pat[r][j+1]!=pat[r][i])j=next[j];
        if(pat[r][j+1]==pat[r][i])j++;
        next[i]=j;
    }
  //  cout<<"next c-"<<lenc-1-next[lenc-1]<<endl;
    return lenc-1-next[lenc-1];
}

int getnum(int a,int b){     //求最小公倍数
   // cout<<a<<" "<<b<<" ";
    int c,d,e;
    d=a;e=b;
    do{c=a%b;a=b;b=c;}while(c!=0);
  //  cout<<d*e/a<<endl;
    return d*e/a;
}

int main(){
    int r,c,i,j,ans1,ans2;
    while(scanf("%d%d",&lenr,&lenc)!=EOF){
        ans1=1;
        ans2=1;
        for(i=0;i<lenr;i++){
            scanf("%s",pat[i]);
        }
        for(i=0;i<lenr;i++){
            memset(next,0,sizeof(next));
            ans1=getnum(ans1,get_nextC(i));
            if(ans1>=lenc){
                ans1=lenc;
                break;
            }
        }
        for(i=0;i<lenc;i++){
            memset(next,0,sizeof(next));
            ans2=getnum(ans2,get_nextR(i));
            if(ans2>=lenr){
                ans2=lenr;
                break;
            }
        }
        cout<<ans1*ans2<<endl;
    }
    return 0;
}
 
分享到:
评论
3 楼 proverbs 2013-02-05  
目测你没有看到poj这个题的讨论。。。
这种方法是错误的。。。
2 楼 暴风雪 2012-04-03  
笔良文昌 写道
还是不怎么明白什么是 最小覆盖子串。

解释明白了?
1 楼 笔良文昌 2012-04-03  
还是不怎么明白什么是 最小覆盖子串。

相关推荐

    经典 的POJ 分类

    - POJ 1961、POJ 2406:KMP算法的应用。 ### 其他问题 #### 贪心算法 - **题目示例**: - POJ 3411、POJ 1724:贪心策略的选择与应用。 #### 二分查找 - **题目示例**: - POJ 3373、POJ 1691:二分查找技术的...

    KMP.rar_kmp poj

    《KMP算法在POJ题目中的应用》 KMP(Knuth-Morris-Pratt)算法,是一种在字符串中寻找子串的搜索算法,由Donald Knuth、Vaughan Pratt和James H. Morris三位学者于1970年代提出。在编程竞赛如POJ(Problemset On...

    acm训练计划(poj的题)

    - (poj1860, poj3259, poj1062, poj2253, poj1125, poj2240):介绍迪杰斯特拉算法(Dijkstra)、贝尔曼-福特算法(Bellman-Ford)、弗洛伊德算法(Floyd)等。 - 使用堆优化的迪杰斯特拉算法。 3. **最小生成树...

    poj题目分类

    * KMP 算法:例如 poj1961、poj2406。 4. 搜索: * 最优化剪枝和可行性剪枝。 * 搜索的技巧和优化:例如 poj3411、poj1724。 * 记忆化搜索:例如 poj3373、poj1691。 5. 动态规划: * 较为复杂的动态规划:...

    KMP算法:高效字符串匹配算法详解

    kmp算法内容概况: 本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为...

    D-KMP-sample:D-KMP官方样本

    D-KMP体系结构-官方样本这是D-KMP架构的官方示例,展示了一个适用于Android和iOS的简单主/详细应用程序。 有关D-KMP体系结构的更多信息,请阅读相关的。D-KMP体系结构的主要功能: 它使用最新的声明性UI工具包:适用...

    2.KMP算法:高效字符串匹配算法详解

    kmp算法内容概况: 本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为...

    KMP-Expander:适用于CSV文件的Mario Kart 7的KMP编辑器

    《KMP-Expander:CSV格式的Mario Kart 7赛道编辑工具详解》 在电子游戏领域,特别是赛车游戏,Mario Kart 7凭借其丰富的赛道设计和竞技性深受玩家喜爱。为了满足玩家对自定义赛道的需求,开发人员和爱好者们创造了...

    acm新手刷题攻略之poj

    ### ACM新手刷题攻略之POJ ... - 推荐题目:[poj1860](https://vjudge.net/problem/POJ-1860)、[poj3259](https://vjudge.net/problem/POJ-3259)、[poj1062](https://vjudge.net/problem/POJ-1062)、[poj2253]...

    热-KMP算法:字符串匹配的高效利器

    **热-KMP算法:字符串匹配的高效利器** KMP(Knuth-Morris-Pratt)算法是一种在文本中高效地查找子串出现位置的字符串匹配算法。由唐纳德·克努斯、维克托·莫里斯和弗兰克·普拉特在1970年提出。该算法避免了在...

    KMP_KMP_

    KMP(Knuth-Morris-Pratt)算法是由D.E. Knuth、V. Morris和J.H. Pratt三位学者在1970年提出的一种高效的字符串匹配算法,它主要用于解决在一个大文本串中查找是否存在一个特定模式串的问题。KMP算法的效率在于它...

    poj训练计划.doc

    - 字符串处理:如KMP算法和后缀数组,用于字符串搜索和模式匹配,如`poj1035, poj3080`。 - 排序算法:如快速排序和归并排序,用于对数据进行排序,如`poj2388, poj2299`。 - 并查集:用于处理集合的合并和查询...

    ACM算法总结--最新总结的ACM算法

    6. **KMP算法**(如poj1961, poj2406):高效的字符串匹配算法,适用于文本检索、模式识别等领域。 #### 优化技巧 1. **代码优化**(如poj3096, poj3007):包括循环展开、条件判断优化等,提高代码执行效率。 2. ...

    KMP报告:元宇宙产品概念,哪一种消费者更有感 12.15-31页.pdf

    KMP报告:元宇宙产品概念,哪一种消费者更有感 12.15-31页.pdf

    ACM-POJ 算法训练指南

    5. **字符串匹配**:如KMP算法(poj1961, poj2406)。 ### 十三、进阶算法 1. **组合优化**:如割平面法、分支定界法等(poj3411, poj1724)。 2. **近似算法**:解决NP难问题时的近似求解方法(poj3373, poj1691...

    D-KMP-Architecture:Daniele Baroncelli建议的D-KMP体系结构的试用样本,在这里

    D-KMP架构Daniele Baroncelli建议的D-KMP体系结构的试用示例,位于: ://danielebaroncelli.medium.com/the-future-of-apps-declarative-uis-with-kotlin-multiplatform-d-kmp-part-1 它:声明性UI(Jetpack编写)...

    string-problem(POJ).rar_POJ 19_poj

    2. **POJ1790**:可能涉及字符串的模式匹配,如KMP算法或Boyer-Moore算法,用于在一个字符串中寻找另一个字符串的出现位置。 3. **POJ1951**:可能与字符串的排序有关,比如可以运用Manacher's Algorithm解决最长...

    template-kmp-library:Kotlin多平台库模板

    模板-kmp-库 Kotlin多平台库模板。 有一个针对多平台库的基线设置,该库支持除弃用的wasm32之外的所有kotlin。 特征 本机目标分组和共享sourceSet 包装程序库模块,它声明对所有lib模块的依赖关系 通过allprojects...

    ACMer需要掌握的算法讲解 (2).docx

    * KMP算法:POJ1961、POJ2406 * 左偏树(可合并堆) 四、搜索 * 最优化剪枝和可行性剪枝 * 较为复杂的动态规划:POJ1191、POJ1054、POJ3280、POJ2029、POJ2948、POJ1925、POJ3034 * 记录状态的动态规划:POJ3254、...

    kmp算法-基于Rust实现kmp算法.zip

    《深入理解KMP算法及其Rust实现》 KMP(Knuth-Morris-Pratt)算法是一种在文本中查找子串出现位置的高效算法,由Donald Knuth、James H. Morris和 Vaughan Pratt三位科学家共同提出。它避免了对已匹配部分的重复...

Global site tag (gtag.js) - Google Analytics