标签:top scan 位置 stdin ++ names ret lan tor
paizaランクB相当問題あなたはクライアントから画像分析の仕事を受けました。
N × N ピクセルの白黒画像と M × M ピクセルの白黒画像が与えられます。 白黒画像の各画素は 0 または 1 のいずれかです。 N × N ピクセルの画像を入力、M × M ピクセルの画像をパターンと呼ぶことにします。
あなたの仕事は、入力からパターンとの完全一致を探すことです。
入力とパターンがピクセルの位置 (y, x) で完全一致するとは、 全ての i, j (i = 0, 1, ... M - 1, j = 0, 1, ... M - 1) について、 (入力の位置 (y + j, x + i) におけるピクセル) = (パターンの位置 (j, i) におけるピクセル) が成立することをいいます。
また、依頼主からは、入力にはパターンと完全一致する箇所は必ず 1 つだけ存在するということを 伝えられています。
ここで、N = 4 の入力の例を見てみましょう。
図中の赤い線で囲まれている部分とパターンが完全一致していることがわかります。 完全一致のピクセルの位置、すなわち、(1, 0) を出力してください。
入力は標準入力にて以下のフォーマットで与えられます。
すべてのテストケースにおいて、以下の条件をみたします。
パターンと完全一致する左上のピクセルの座標を半角スペース区切りで出力してください。
4
0 0 1 0
0 1 1 0
0 1 0 1
1 1 1 0
3
0 1 1
0 1 0
1 1 1
1 0
4
0 0 0 0
0 0 1 1
0 0 1 1
0 0 0 0
2
1 1
1 1
1 2
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <iomanip>
#include <math.h>
#include <map>
using namespace std;
#define FIN freopen("input.txt","r",stdin);
#define FOUT freopen("output.txt","w",stdout);
#define INFLL 0x3f3f3f3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
typedef long long LL;
typedef pair<double, double> PII;
int mp[105][105];
int mp2[105][105];
int main() {
//FIN
int n, m;
while(~scanf("%d", &n)) {
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
scanf("%d", &mp[i][j]);
scanf("%d", &m);
for(int i = 0; i < m; i++)
for(int j = 0; j < m; j++)
scanf("%d", &mp2[i][j]);
int sign = 0;
int ans1, ans2;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
int flag = 0;
for(int k = 0; k < m; k++) {
for(int z = 0; z < m; z++) {
if(mp2[k][z] != mp[i+k][j+z]) flag = 1;
}
if(flag) break;
}
if(!flag) {
printf("%d %d\n", i, j);
sign = 1;
break;
}
}
if(sign) break;
}
}
return 0;
}
标签:top scan 位置 stdin ++ names ret lan tor
原文地址:http://www.cnblogs.com/Hyouka/p/7452127.html