您的位置:首页 > 其它

浙工大15新生赛 数星座

2016-12-16 15:07 288 查看
#include <iostream>
#include <algorithm>
struct point {
int x, y;
int num;
};
point Lu[101][21];
char Hui, Yi[501][101];
int K;
int vis[101];
bool dfs(int a, int b) {
int flag;
for (int i = 1; i <= K; i++) {
flag = 0;
for (int j = 1; j <= Lu[i][1].num; j++) {
if (vis[i])
break;
if (Yi[a + Lu[i][j].x][b + Lu[i][j].y] == '#')
flag++;
}
if (flag == Lu[i][1].num) {
vis[i] = 1;
return true;
}
}
return false;
}
using namespace std;
int main() {
while (scanf("%d", &K) != EOF) {
int H, W, q, r;
memset(vis, 0, sizeof(vis));
for (int i = 1; i <= K; i++) {
q = 1, r = 1;
int x, y;
scanf("%d%d", &H, &W);
for (int j = 1; j <= H; j++) {
for (int k = 1; k <= W; k++) {
cin >> Hui;
if (Hui == '#' && !q) {
Lu[i][r].x = j - x, Lu[i][r].y = k - y;
Lu[i][1].num++;
r++;
}
if (Hui == '#' && q) {
x = j, y = k;
q = 0;
}
}
}
}
//for (int i = 1; i <= K; i++) {
//for (int j = 1; j <= Lu[i][1].num; j++)
//cout << Lu[i][j].x << ' ' << Lu[i][j].y << ' ';
//cout << endl;
//}
cin >> H >> W;
int maxn = 0;
for (int i = 1; i <= H; i++)
for (int j = 1; j <= W; j++)
cin >> Yi[i][j];
for (int i = 1; i <= H; i++)
for (int j = 1; j <= W; j++)
if (Yi[i][j] == '#')
if (dfs(i, j))
maxn++;
printf("%d\n", maxn);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: