Fire Air(华科校赛 网络赛)
题目
原题链接: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(华科校赛 网络赛)的更多相关文章
- 36th成都区域赛网络赛 hdoj4039 The Social Network(建图+字符串处理)
这题是某年成都区域赛网络赛的一题. 这题思路非常easy,可是从时间上考虑,不妨不要用矩阵存储,我用的链式前向星. 採用线上查询.利用map对字符串编号,由于非常方便.要推荐的朋友,事实上就是朋友的朋 ...
- 2019杭电多校&CCPC网络赛&大一总结
多校结束了, 网络赛结束了.发现自己还是太菜了,多校基本就是爆零和签到徘徊,第一次打这种高强度的比赛, 全英文,知识点又很广,充分暴露了自己菜的事实,发现数学还是很重要的.还是要多刷题,少玩游戏. 网 ...
- ACM总结——2017区域赛网络赛总结
从省赛回来至今4周,每周周末都在打网络赛,每次都是划水,总结下自己弱弱的ACM吧!划水水~~ 首先是新疆赛区,基本上都是图论相关的东西,全靠队友,自己翻水水,实力躺了5道. 然后是沈阳赛区,终于有点贡 ...
- 2019 西电ACM校赛网络赛 题解
今年题目难度有较大提升,总体与往年类似,数学题居多.以下为我通过的部分题解. 赛题链接:http://acm.xidian.edu.cn/contest.php?cid=1053 A - 上帝视角 我 ...
- 2018ICPC徐州区域赛网络赛G(VECTOR+SET,模拟)
#include<bits/stdc++.h>using namespace std;int x,y;vector<int>v1,v2;long long solve(vect ...
- 2018ICPC徐州区域赛网络赛B(逆序枚举或者正序深度搜索)
#include<bits/stdc++.h>using namespace std;int n,m,k,l;int x[1007],y[1007],z[1007];int dp[1007 ...
- (未完结)“文远知行杯”GDET第十四届竞赛(网络赛共10题,仅整理出6题)
刚开学没多久就打了一个网络赛,通过这次网络赛我是发现我是真的菜... 放假前校赛的排名让我有些自满,寒假丝毫没有接触ACM,一直沉迷于Steam,这个真的值得好好反省. 虽然现在大一课有点多,在学校也 ...
- 2012年长春网络赛(hdu命题)
为迎接9月14号hdu命题的长春网络赛 ACM弱校的弱菜,苦逼的在机房(感谢有你)呻吟几声: 1.对于本次网络赛,本校一共6名正式队员,训练靠的是完全的自主学习意识 2.对于网络赛的群殴模式,想竞争现 ...
- HDU 5875 Function -2016 ICPC 大连赛区网络赛
题目链接 网络赛的水实在太深,这场居然没出线zzz,差了一点点,看到这道题的的时候就剩半个小时了.上面是官方的题意题解,打完了才知道暴力就可以过,暴力我们当时是想出来了的,如果稍稍再优化一下估计就过了 ...
随机推荐
- 礼物gift(DP)
这道题的DP非常的有意思…… 一开始我们总是会以为这是一个背包问题,直接dp[0] = 0,dp[j] += dp[j-c[i]]进行转移.之后统计一下从dp[m-minn]~dp[m]的答案之和为结 ...
- JAVA 布局控制
在Java里该方法是安一个组件到一个窗体中去,它不同我们使用过的其它GUI系统.首先,它是全代码的:没有控制安放组件的“资源”.其次,该方法的组件被安放到一个被“布局管理器”控制的窗体中,由“布局管理 ...
- vs2008打开类视图,看不到类的解决方法
去工程文件中删除ncb文件,重新打开工程
- Java 8的Lambda学习
参考资料:https://www.dotnetperls.com/lambda-java Lambdas用于创建函数对象.通过它们,我们可以在其它方法内部指定方法,甚至可以把方法做为参数传递给其它方法 ...
- C#(KeyChar和KeyCord值,KeyDown/KeyPress事件区别)
1. 首先将窗口属性KeyPreview设为true,如果属性对话框中找不到,就直接在代码里添加:2. 添加KeyPress / KeyDown事件: KeyPress 和KeyDown .KeyPr ...
- E20180426-hm
transition n. 过渡,转变,变迁; [语] 转换; [乐] 变调 flip vt. 按(开关); 快速翻转; 急挥; n. 空翻; 浏览; (射击时枪管的) 跳跃; 轻抛; win ...
- poj 1186 方程的解数【折半dfs+hash】
折半搜索,map会T所以用hash表来存状态 #include<iostream> #include<cstdio> #include<map> using nam ...
- JavaSE基础知识结构
- android 多线程(二)
1. 使用 AsyncTask 实现进度条 package com.test.network; import android.os.AsyncTask; import android.support. ...
- Educational Codeforces Round 46 (Rated for Div. 2) C. Covered Points Count
Bryce1010模板 http://codeforces.com/problemset/problem/1000/C 题意:问你从[l,r]区间的被多少条线覆盖,列出所有答案. 思路:类似括号匹配的 ...