浙工大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; }
相关文章推荐
- 浙工大15新生赛 命运数
- 浙工大15新生赛 JLB A+B
- 浙工大15新生赛 变换的数组
- 浙工大15新生赛 江老板A+B
- 浙工大15新生赛 串
- 浙工大15新生赛 M大爷与数学题(最后一题)
- 浙工大15新生赛 爱的密码
- 浙工大15新生赛 江老板的蛋糕
- 浙工大15新生决赛 爆炸的男友力
- 浙工大15新生决赛 改造字符串
- 浙工大新生赛L qwb与电阻
- 浙工大新生赛 M大爷第一定律
- 浙工大15新生决赛 找假币
- FreeS/WAN net-to-net 配置(笔录2004-12-15)
- Android平台的专业术语 .(15)
- ExtJS4.2学习(15)树形表格(转)
- 读书笔记《Effective C++》条款15:在资源管理类中提供对原始资源的访问
- 一个男人的15个人生片段
- OpenCV学习笔记(15)使用OpenGL显示双目视觉三维重构效果 (转)
- 1011. A+B和C (15)