hiho 大礼堂地毯(strstr 查找函数)

来源:互联网 发布:淘宝客怎么帮我推广 编辑:程序博客网 时间:2024/06/02 21:55

题目1 : 大礼堂地毯

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

小Hi的学校大礼堂的地毯是由很多块N × M大小的基本地毯拼接而成的。例如由2×3的基本地毯

ABCABD

拼接而成的大礼堂整片地毯如下:

       ...         ABCABCABCABCAB  ABDABDABDABDAB. ABCABCABCABCAB .. ABDABDABDABDAB .. ABCABCABCABCAB .  ABDABDABDABDAB  ABCABCABCABCAB       ...

由于大礼堂面积非常大,可以认为整片地毯是由基本地毯无限延伸拼接的。  

现在给出K张地毯的照片,请你判断哪些照片可能是小Hi学校大礼堂地毯的一部分。不需要考虑旋转照片的方向。

例如

BCABDABCA

可能是上述地毯的一部分,但

BACBAD

不可能是上述地毯的一部分。

输入

第1行包含三个整数,NM 和 K。  

第2~N+1行包含一个N × M的矩阵,代表基本地毯的样式。其中每一个元素都是一个大写字母(A-Z)。  

之后是 K 张照片的数据。  

每张照片的第一行包含两个整数,H 和 W,代表照片的大小。  

以下 H 行包含一个 H × W的矩阵,代表照片中地毯的样式。其中每一个元素都是一个大写字母(A-Z)。

对于80%的数据,1 ≤ NM ≤ 10, 1 ≤ HW ≤ 100  

对于100%的数据, 1 ≤ NM ≤ 50, 1 ≤ K ≤ 10, 1 ≤ H ≤ 100, 1 ≤ W ≤ 800。

输出

对于每张照片,输出YES或者NO代表它是否可能是大礼堂地毯的一部分。

样例输入
2 3 3  ABC  ABD  3 3  BCA  BDA  BCA  2 3  BAC  BAD  7 14  ABCABCABCABCAB  ABDABDABDABDAB  ABCABCABCABCAB  ABDABDABDABDAB  ABCABCABCABCAB  ABDABDABDABDAB  ABCABCABCABCAB
样例输出
YESNOYES




#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<cmath>#include<string>#include <bits/stdc++.h>using namespace std;const int N = 1e4+10;char str[55][80000], s[1000], str2[110][810];int main(){    int n, m, k;    scanf("%d %d %d", &n, &m, &k);    for(int i=0; i<n; i++)    {        scanf("%s",s);        for(int j=1;j<=800;j++) strcat(str[i],s);    }    while(k--)    {        int w, h;        scanf("%d %d", &w, &h);        for(int i=0;i<w;i++)        {            scanf("%s",str2[i]);        }        int k1, k2;        int flag=1;        for(int i=0;i<n;i++)        {            char *p=strstr(str[i],str2[0]);            if(p)            {                k1=p-str[i];                k2=i;                flag=0;                break;            }        }        if(flag)        {            puts("NO");            continue;        }        int x=k2,y=k1;        for(int i=0;i<w;i++)        {            y=k1;            for(int j=0;j<h;j++)            {                if(str2[i][j]!=str[x][y])                {                    flag=1;                    break;                }                y++;            }            x=(x+1)%n;            if(flag) break;        }        if(flag) puts("NO");        else puts("YES");    }    return 0;}


原创粉丝点击