首页 > 其他分享 >Coast Length——奇奇怪怪的OJ

Coast Length——奇奇怪怪的OJ

时间:2022-08-16 22:01:58浏览次数:66  
标签:ch OJ int while Coast Length 1005 getchar

Hi,我是OIer一枚。
我太弱了


题目链接:

题面

问海岸的长度和。
其中,岛中湖,岛中湖中岛……不算。

思路

我们在整个图外面加一圈 $ 0 $,这样我们就能轻松处理岛了。
从最外圈遍历 $ 0 $ ,遍历到的都是海。
然后,对于每块海,看它周围有几个陆地。
每一个陆地就 $ + 1 $,加一条边界嘛。

代码

#include <bits/stdc++.h>
using namespace std;

int read() {
	int f = 0, w = 1; char ch = getchar();
	while ('0' > ch || ch > '9') if (ch == '-') w = -1, ch = getchar();
	while ('0' <= ch && ch <= '9') f = f * 10 + (ch - '0'), ch = getchar();
	return f * w;
}

void write(int x) {
	if (x < 0) putchar('-'), x = -x;
	char stk[35]; int cnt = 0;
	do {
		stk[cnt++] = x % 10 + '0', x /= 10;
	} while (x);
	for (int i = cnt - 1; i >= 0; i--) putchar(stk[i]);
	putchar(' ');
}

bool mp[1005][1005];
bool vis[1005][1005];

int n, m;

void dfs(int i, int j) {
	if (0 <= i && i <= n + 1 && 0 <= j && j <= m + 1 && !mp[i][j] && !vis[i][j]) {
		vis[i][j] = 1;
		dfs(i + 1, j);
		dfs(i - 1, j);
		dfs(i, j + 1);
		dfs(i, j - 1);
	}
}

int main() {
	n = read(), m = read();
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (getchar() == '1') {
				mp[i][j] = 1;
			}
		}
		getchar();
	}
	dfs(0, 0);
	int ans = 0;
	for (int i = 0; i <= n + 1; i++) {
		for (int j = 0; j <= m + 1; j++) {
			if (vis[i][j]) {
				ans += (i == 0) ? (0) : (mp[i - 1][j]);
				ans += (i == n + 1) ? (0) : (mp[i + 1][j]);
				ans += (j == 0) ? (0) : (mp[i][j - 1]);
				ans += (j == m + 1) ? (0) : (mp[i][j + 1]);
			}
		}
	}
	write(ans);
	return 0;
}

标签:ch,OJ,int,while,Coast,Length,1005,getchar
From: https://www.cnblogs.com/AProblemSolver/p/16593142.html

相关文章

  • YbtOJ 「数据结构」第4章 线段树
    不想dp了怎么办?开个新坑吧。例题1.求区间和树状数组不香吗,28行解决(bushi所以懒得打线段树了。code#include<bits/stdc++.h>#defineintlonglongusingnamespac......
  • POJ2287 Tian Ji -- The Horse Racing
    题目链接题目DescriptionHereisafamousstoryinChinesehistory.Thatwasabout2300yearsago.GeneralTianJiwasahighofficialinthecountryQi.He......
  • BZOJ3306 树
    记当前根为root,查询的节点为x若x=root,答案即为所有结点的最小值若x与root在1的不同子树中,答案即为x的子树最小值若x与root在1的同一子树中若x在......
  • POJ2955 Brackets
    题目链接题目DescriptionWegivethefollowinginductivedefinitionofa“regularbrackets”sequence:theemptysequenceisaregularbracketssequence,ifs......
  • [POI2006]Pro-Professor Szu & ZLOJ 练习62 B
    writtenon2022-08-09题目不难,但是需要总结一下。题意很明确,就不过多阐述了。读完题目后,很明显可以建反图,然后就会有两种方法。第一种方法是直接拓扑排序找环,这种方式......
  • P8245 [COCI2013-2014#3] PAROVI & ZLOJ 练习62 D
    writtenon2022-08-09一道有趣的计数题。首先题面中最引人注目的就是两个整数的数据范围。很显然,暴力的思路,枚举所有数,找出每一位上每一种数字的个数这种方法是不可行......
  • ZLOJ 练习65 总结
    writtenon2022-08-12今天的题目……主要偏思维吧。。想到了就不是很难,想不到的话就毫无思路。但是仍然暴露出许多问题,第一题其实是一道简单的动态规划,简化题意就是给......
  • ZLOJ 练习64 总结
    writtenon2022-08-11题目难度整体不大。\(A\)题小贪心难度不是很大。\(B\)题构造题,主要考想法。这题的关键点在于在尝试手动构造的时候,从小到大,最后一位数字单独......
  • YbtOJ 「基础算法」第3章 二分算法
    例题1.数列分段二分每段和的最大值。check时从左往右扫,如果当前段的和大于限制则新开一段。code#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+5;i......
  • GalaxyOJ-902 Mine
    题目描述有一个1维的扫雷游戏,每个格子用表示有雷,用0/1/2表示无雷并且相邻格子中有0/1/2个雷。给定一个仅包含?、、0、1、2的字符串S,问有多少种方法将所有的?改......