Submission #15381

#TimeUsernameProblemLanguageResultExecution timeMemory
15381myungwoo흑백 이미지 찾기 (kriii3_G)C++14
33 / 101
10000 ms16708 KiB
#pragma warning(disable:4996)

#include <stdio.h>
#include <algorithm>
#include <vector>
#include <cmath>
using std::swap;
using std::vector;
using std::max;

int n, m, r, c;
long long a[1000][1000];
long long b[1000][1000];

int main()
{
	scanf("%d%d", &n, &m);
	for (int i=0; i<n; i++) for (int j=0; j<m; j++) scanf("%lld", &a[i][j]);
	scanf("%d%d", &r, &c);
	for (int i=0; i<r; i++) for (int j=0; j<c; j++) scanf("%lld", &b[i][j]);

	int ans = 0;
	for (int i=0; i<=n-r; i++) {
		for (int j=0; j<=m-c; j++) {
			int cnt = 1;
			long long ra = a[i][j];
			long long rb = b[0][0];
			long long p, q, z;

			for (int k=0; k<r; k++) {
				for (int l=0; l<c; l++) {
					long long na = a[i+k][j+l];
					long long nb = b[k][l];

					if (cnt == 1) { // line
						if (ra != na) {
							p = rb - nb;
							q = ra * nb - rb * na;
							z = ra - na;
							cnt = 2;
						}
						else {
							if (rb != nb) // no solution
								cnt = 0;
						}
					}

					else if (cnt == 2) { // point: p, q given
						if (na * p + q - nb * z != 0)
							cnt = 0;
					}
				}
			}

			if (cnt==1 || cnt==2) {
				ans++;
			}
		}
	}

	printf("%d\n", ans);

	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...