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

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

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

完善程序 · 枚举与模拟 · 答案 m2

题目

完善程序
(子矩阵)给输入一个 $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;
}

本小题

④处应填( )

答案

m2

题解

考点定位

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

解题过程

④处内层比较 k2 的范围:小矩阵列数:

``cpp for (k2 = 1; k2 <= m2; k2++) ``

答案:m2。

易错提醒

① 对应行枚举 k1≤n2;② 大小写 n/m、1/2 极易混淆,建议默写变量含义表。

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