正在载入在线练习界面,本页内容可直接阅读…

AK CSP › NOIP 普及 2011 第一轮真题 › 第 28 题

NOIP 普及 2011 第一轮 第 28 题:在矩阵中查找相同子矩阵:第 2 空

完善程序 · 枚举与模拟 · 答案 m1-m2+1

题目

完善程序
(子矩阵)给输入一个 $n_1\times m1$ 的矩阵 $a$,和 $n_2\times m_2$ 的矩阵 $b$,问 $a$ 中是否存在子矩阵和 $b$ 相等。若存在,输出所有子矩阵左上角的坐标:若不存在输出 $\texttt{There is no answer}$。

#include<iostream>
using namespace std;

const int SIZE = 50;

int n1,m1,n2,m2,a[SIZE][SIZE],b[SIZE][SIZE];

int main()
{
    int i,j,k1,k2;
    bool good ,haveAns;

    cin>>n1>>m1;
    for(i=1;i<=n1;i++)
       for(j=1;j<=m1;j++)
          cin>>a[i][j];

    cin>>n2>>m2;
    for(i=1;i<=n2;i++)
       for(j=1;j<=m2;j++)
           [   ①     ];

    haveAns=false;
    for(i=1;i<=n1-n2+1;i++)
       for(j=1;j<= [    ②     ];j++){
            [   ③    ];
           for(k1=1;k1<=n2;k1++)
               for(k2=1;k2<=[    ④    ] ;k2++){
                  if(a[i+k1-1][j+k2-1]!=b[k1][k2])
                     good=false;
               }
          if(good){
             cout<<i<<' '<<j<<endl;
             [       ⑤      ];
          }
       }
    if(!haveAns)
       cout<<"There is no answer"<<endl;

    return 0;
}

本小题

②处应填( )

答案

m1-m2+1

题解

考点定位

本题(矩阵查找第②空)考「枚举上界」,对应大纲 4.2.1 模拟(难度【2】)。

解题过程

②处子矩阵左上角 j 的范围:j+m2−1 ≤ m1 ⇒ j ≤ m1−m2+1:

``cpp for (j = 1; j <= m1 - m2 + 1; j++) ``

答案:m1−m2+1。

易错提醒

① 左上角可行起点 = 大尺寸 − 小尺寸 + 1;② 行、列两个方向同理(i 循环是 n1−n2+1)。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号