2017百度之星初赛A-1006(HDU-6113)
2017-08-14 22:50
288 查看
思路:在图的外面包一圈'0'字符,然后dfs统计'0'字符的个数和'1'字符的个数。结果如下(num0表示0字符的个数,num1表示1字符的个数):
num0 == 1 && num1 == 1 : 结果为1
num0 == 2 && num1 == 1 : 结果为0
else 结果为-1
这个方法非常巧妙,可惜比赛时没想出来,直接在原图上dfs然后WA了一发后,发现有很多特殊的样例,如:
(1)
代码:
num0 == 1 && num1 == 1 : 结果为1
num0 == 2 && num1 == 1 : 结果为0
else 结果为-1
这个方法非常巧妙,可惜比赛时没想出来,直接在原图上dfs然后WA了一发后,发现有很多特殊的样例,如:
(1)
00100 00100 00100 00100(2)
11111 10001 11111 10001 11111直接dfs的话,不好判断1字符串块里面是否包含有且仅有一个0字符串块。
代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n, m; int amt0, amt1; char mat[105][105]; bool vis[2][105][105]; const int dirs[][2] = {{ -1, 0}, {1, 0}, {0, -1}, {0, 1}}; void dfs(int x, int y, char c) { vis[c == '0' ? 0 : 1][x][y] = true; for(int i = 0; i < 4; ++i) { int nx = x + dirs[i][0], ny = y + dirs[i][1]; if(nx >= 0 && nx <= n + 1 && ny >= 0 && ny <= m + 1 && !vis[c == '0' ? 0 : 1][nx][ny] && mat[nx][ny] == c)dfs(nx, ny, c); } } int main() { #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); #endif // ONLINE_JUDGE while(~scanf("%d%d", &n, &m)) { for(int i = 1; i <= n; ++i)scanf("%s", mat[i] + 1); for(int r = 0;r <= n + 1;r++)mat[r][0] = mat[r][m + 1] = '0'; for(int c = 0;c <= m + 1;c++)mat[0][c] = mat[n + 1][c] = '0'; memset(vis, 0, sizeof(vis)); amt0 = 0, amt1 = 0; for(int i = 0; i <= n + 1; ++i) { for(int j = 0; j <= m + 1; ++j) { if(!vis[1][i][j] && mat[i][j] == '1') { amt1++; dfs(i, j, '1'); } if(!vis[0][i][j] && mat[i][j] == '0') { amt0++; dfs(i, j, '0'); } } } if(amt0 == 1 && amt1 == 1)printf("1\n"); else if(amt0 == 2 && amt1 == 1)printf("0\n"); else printf("-1\n"); } return 0; }
相关文章推荐
- 2017百度之星初赛A-1006(HDU-6113)
- HDU - 6113 度度熊的01世界 (2017"百度之星"程序设计大赛 - 初赛(A)1006)
- 2017"百度之星"程序设计大赛 - 初赛(A)1006——HDU 6113
- 百度之星2017初赛A-1006-度度熊的01世界
- 2017百度之星初赛(A)1001,1005,1006解题报告
- (最小费用流)hdu 6118(2017百度之星初赛B 1005) 度度熊的交易计划
- 2017百度之星初赛(B) 1006 小小粉丝度度熊(尺取法)
- hdu 6113 度度熊的01世界/2017 百度之星
- 2017 百度之星 Round 2 - Hdu 6108,6112,6113
- hdu 6119/2017百度之星初赛B——小小粉丝度度熊(尺取/贪心)
- 2018.3.1【 HDU - 6113 】解题报告(百度之星初赛,BFS,DFS,图像处理)
- HDU 5251 矩形面积(百度之星初赛 #1 1006)
- 2017百度之星初赛(A) 1006 度度熊的01世界(bfs找连通块)
- HDU 6114 Chess(DP)2017百度之星初赛(B) 1001
- 2017百度之星初赛(B)1006小小粉丝度度熊------hdu6119
- 2017百度之星初赛B-1002(HDU-6115)
- HDU 6113 度度熊的01世界【2017"百度之星"】【简单搜索判断联通块】
- 2017百度之星初赛B-1002(HDU-6115)
- HDU 6108 小C的倍数问题 (数论 2017百度之星初赛A第1题)
- HDU-2017"百度之星"程序设计大赛-初赛(B)-1006-小小粉丝度度熊