<pre><code>#include <iostream>
#include <vector>
using namespace std;
int main(){
int numOfRounds;
cin >> numOfRounds;
for(int round = 0; round < numOfRounds; round++){
int out = 0;
int linesToMatch;
cin >> linesToMatch;
int sizeToMatch;
cin >> sizeToMatch;
vector <string> v;
string t;
for (int i = 0; i < linesToMatch; i++){
cin >> t;
v.push_back(t);
}
string s = "";
int rows;
cin >> rows;
int columns;
cin >> columns;
for (int j = 0; j < rows; j++){ //map->string
cin >> t;
s += t;
}
// main part of implementation
// it's mainly basic algebra and index tracking
for (int m = 0; m <= rows - linesToMatch; m++){
for (int n = 0; n <= columns - sizeToMatch; n++){
int x;
for (x = 0; x < linesToMatch; x++){
int index = (m + x) * columns + n;
string newTemp(s.begin() + index, s.begin() + index + sizeToMatch);
if (newTemp != v.at(x)) break;
}
if (x == linesToMatch) out++;
}
}
cout << out << endl;
}
}
</code></pre>