Fire Air(华科校赛 网络赛)
2024-10-19 16:30:29
题目
原题链接:https://www.nowcoder.com/acm/contest/106/L
在100000 * 10000的空地上,有n个时间点,每个时间点会在(xi,yi)上种一棵树。
定义绿色:被树包围的空地的个数。
问每个时间点之后绿色为多少。如图:
思路
逆向求解,从(0,0)位置将圈外的全标记(给空地加一圈),在分别考虑当前的树,是在圈内还是圈的外围。
由于vis是全局数组,之后的bfs都非常快,每个点只遍历过一次。
代码实现
#include<stdio.h>
#include<queue>
#include<iostream>
using namespace std; typedef pair<int, int> P;
const int maxn = + ; //点的最大个数
const int SIZE = + ; //地图大小
const int offset = ; //偏置
const int dx[] = { -,,, };
const int dy[] = { ,,,- };
int n,xi[maxn],yi[maxn],ans[maxn];
bool vis[SIZE][SIZE], maze[SIZE][SIZE]; int bfs(int x, int y)
{
int ret = ;
queue<P>q;
vis[x][y] = true;
q.push(P(x, y));
while (!q.empty())
{
P p = q.front(); q.pop();
ret++;
for (int i = ; i < ; i++)
{
int nx = p.first + dx[i], ny = p.second + dy[i];
if (nx >= && nx < SIZE && ny >= && ny < SIZE && (!vis[nx][ny]))
{
vis[nx][ny] = true;
q.push(P(nx, ny));
}
}
}
return ret;
} int main()
{
scanf("%d", &n);
for(int i = ;i <= n;i++)
{
scanf("%d%d", &xi[i], &yi[i]);
maze[xi[i] + offset][yi[i] + offset] = ;
vis[xi[i] + offset][yi[i] + offset] = ;
} bfs(, );
int res = ;
for (int i = ; i < SIZE; i++)
for (int j = ; j < SIZE; j++)
if (vis[i][j] == false) res++;
ans[n] = res; for (int i = n; i >= ; i--) //1~3棵以内不可能围成空地
{
int u = xi[i] + offset;
int v = yi[i] + offset;
maze[u][v] = ;
int cnt = ;
for (int j = ; j < ; j++)
{
int nu = u + dx[j], nv = v + dy[j];
if (maze[nu][nv] == && vis[nu][nv] == ) cnt++;
}
if (cnt == ) //cnt == 0,表示该点在内部
{
vis[u][v] = ;
res++;
}
else res -= (bfs(u, v) - );
ans[i - ] = res;
}
for (int i = ; i <= n; i++)
printf("%d\n", ans[i]);
return ;
}
参考链接:https://www.nowcoder.com/acm/contest/view-submission?submissionId=26038731
最新文章
- ubuntu修改主机名
- MSSQL附加数据库5120错误(拒绝访问)处理方法
- HoloLens开发手记 - Unity之Tracking loss
- java开发环境的主题色的变化
- git diff patch
- imx6 KEY_ROW4 power output high fail
- web.config的数据库连接字符串进行加密
- PB中无法插入ole控件,解决办法
- asp.net中的绝对路径和相对路径
- RMQ之ST算法
- OUC_OptKernel_oshixiaoxiliu_好题推荐
- 《HTML5与CSS3权威指南》读书笔记(上册)—HTML5篇
- robots.txt 文件指南
- jdb
- Kia&#39;s Calculation hdu4726
- Alpha冲刺No.2
- c/c++再学习:查找算法了解
- python pip 安装库文件报错:pip install ImportError: No module named _internal
- Python_试题_23
- golang 中的 sizeof 以及 golang中的 union
热门文章
- html语义化 -------<;fieldset>;和<;legend>;
- python学习笔记5-自定义函数
- 793. Preimage Size of Factorial Zeroes Function
- 二分匹配ZOJ3646
- stylus基础教程,stylus实例教程,stylus语法总结
- django网页渲染
- _bzoj1096 [ZJOI2007]仓库建设【斜率优化dp】
- 517 Super Washing Machines 超级洗衣机
- subline应用之常用插件
- [已读]编写高质量代码 改善JavaScript程序的188个建议