题目

原题链接: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

Fire Air(华科校赛 网络赛)的更多相关文章

  1. 36th成都区域赛网络赛 hdoj4039 The Social Network(建图+字符串处理)

    这题是某年成都区域赛网络赛的一题. 这题思路非常easy,可是从时间上考虑,不妨不要用矩阵存储,我用的链式前向星. 採用线上查询.利用map对字符串编号,由于非常方便.要推荐的朋友,事实上就是朋友的朋 ...

  2. 2019杭电多校&CCPC网络赛&大一总结

    多校结束了, 网络赛结束了.发现自己还是太菜了,多校基本就是爆零和签到徘徊,第一次打这种高强度的比赛, 全英文,知识点又很广,充分暴露了自己菜的事实,发现数学还是很重要的.还是要多刷题,少玩游戏. 网 ...

  3. ACM总结——2017区域赛网络赛总结

    从省赛回来至今4周,每周周末都在打网络赛,每次都是划水,总结下自己弱弱的ACM吧!划水水~~ 首先是新疆赛区,基本上都是图论相关的东西,全靠队友,自己翻水水,实力躺了5道. 然后是沈阳赛区,终于有点贡 ...

  4. 2019 西电ACM校赛网络赛 题解

    今年题目难度有较大提升,总体与往年类似,数学题居多.以下为我通过的部分题解. 赛题链接:http://acm.xidian.edu.cn/contest.php?cid=1053 A - 上帝视角 我 ...

  5. 2018ICPC徐州区域赛网络赛G(VECTOR+SET,模拟)

    #include<bits/stdc++.h>using namespace std;int x,y;vector<int>v1,v2;long long solve(vect ...

  6. 2018ICPC徐州区域赛网络赛B(逆序枚举或者正序深度搜索)

    #include<bits/stdc++.h>using namespace std;int n,m,k,l;int x[1007],y[1007],z[1007];int dp[1007 ...

  7. (未完结)“文远知行杯”GDET第十四届竞赛(网络赛共10题,仅整理出6题)

    刚开学没多久就打了一个网络赛,通过这次网络赛我是发现我是真的菜... 放假前校赛的排名让我有些自满,寒假丝毫没有接触ACM,一直沉迷于Steam,这个真的值得好好反省. 虽然现在大一课有点多,在学校也 ...

  8. 2012年长春网络赛(hdu命题)

    为迎接9月14号hdu命题的长春网络赛 ACM弱校的弱菜,苦逼的在机房(感谢有你)呻吟几声: 1.对于本次网络赛,本校一共6名正式队员,训练靠的是完全的自主学习意识 2.对于网络赛的群殴模式,想竞争现 ...

  9. HDU 5875 Function -2016 ICPC 大连赛区网络赛

    题目链接 网络赛的水实在太深,这场居然没出线zzz,差了一点点,看到这道题的的时候就剩半个小时了.上面是官方的题意题解,打完了才知道暴力就可以过,暴力我们当时是想出来了的,如果稍稍再优化一下估计就过了 ...

随机推荐

  1. AJAX路径问题

    如果发AJAX请求,看发送请求消息的路径,如果看到报404的错,而这个 时候看下发送头部的路径,如果看到%20,这个时候有可能就是写路劲的时候,不小心按了一个空格

  2. registerWithTouchDispatcher 注册单点触摸事件

    Doc: If isTouchEnabled, this method is called onEnter. Override it to change the way CCLayer receive ...

  3. 洛谷 P2578 [ZJOI2005]九数码游戏【bfs+康托展开】

    只有9!=362880个状态,用康托展开hash一下直接bfs即可 #include<iostream> #include<cstdio> #include<cstrin ...

  4. CSS选择器优先级【转】

    样式的优先级 多重样式(Multiple Styles):如果外部样式.内部样式和内联样式同时应用于同一个元素,就是使多重样式的情况. 一般情况下,优先级如下: (外部样式)External styl ...

  5. 【数据结构(C语言版)系列四】 串

    串类型的定义 串(或字符串)是由零个或多个字符组成的有限序列,一般记为 s = 'a1a2...an',s为串名.子串在主串中的位置以子串的第一个字符在主串中的位置来表示. 串和表示和实现——定长顺序 ...

  6. _bzoj1257 [CQOI2007]余数之和sum【小技巧】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1257 最近刚做了一道莫比乌斯的题,需要用到这种方法. 应该让k / i相等的一连串k % i ...

  7. Codeforces 1144F(二分染色)

    发现奇环不可行,偶环可行,考虑二分图.然后染色,方向全都从一种指向另一种就可以了,随意. ; int n, m, color[maxn]; vector<int> vc[maxn]; ve ...

  8. 18.3.2从Class上获取信息(方法)

    package d18_3_1; import java.lang.reflect.Method; import java.util.Arrays; /** * 获取Class对应类所包含的方法的四个 ...

  9. Cannot call sendRedirect()/forward after the response has been committed的问题

    问题其实已经很明确了,说明就是不能重定向,因为已经有response了. 然后一检查,是前面已经用servlet的printWriter打印东西了. 所以,重定向前 必须先保证没有任何的输出,包括:1 ...

  10. [已读]编写高质量代码 改善JavaScript程序的188个建议

    吐槽一万遍,买的最后悔的一本,没有之一,大量篇幅抄袭<高性能javascript>,我记得还有部分抄袭<javascript精粹>,<javascript模式>有没 ...