题目

原题链接:https://www.nowcoder.com/acm/contest/106/L

在100000 * 10000的空地上,有n个时间点,每个时间点会在(xi,yi)上种一棵树。

定义绿色:被树包围的空地的个数。

问每个时间点之后绿色为多少。如图:

思路

逆向求解,从(0,0)位置将圈外的全标记(给空地加一圈),在分别考虑当前的树,是在圈内还是圈的外围。

由于vis是全局数组,之后的bfs都非常快,每个点只遍历过一次。

代码实现

  1. #include<stdio.h>
  2. #include<queue>
  3. #include<iostream>
  4. using namespace std;
  5.  
  6. typedef pair<int, int> P;
  7. const int maxn = + ; //点的最大个数
  8. const int SIZE = + ; //地图大小
  9. const int offset = ; //偏置
  10. const int dx[] = { -,,, };
  11. const int dy[] = { ,,,- };
  12. int n,xi[maxn],yi[maxn],ans[maxn];
  13. bool vis[SIZE][SIZE], maze[SIZE][SIZE];
  14.  
  15. int bfs(int x, int y)
  16. {
  17. int ret = ;
  18. queue<P>q;
  19. vis[x][y] = true;
  20. q.push(P(x, y));
  21. while (!q.empty())
  22. {
  23. P p = q.front(); q.pop();
  24. ret++;
  25. for (int i = ; i < ; i++)
  26. {
  27. int nx = p.first + dx[i], ny = p.second + dy[i];
  28. if (nx >= && nx < SIZE && ny >= && ny < SIZE && (!vis[nx][ny]))
  29. {
  30. vis[nx][ny] = true;
  31. q.push(P(nx, ny));
  32. }
  33. }
  34. }
  35. return ret;
  36. }
  37.  
  38. int main()
  39. {
  40. scanf("%d", &n);
  41. for(int i = ;i <= n;i++)
  42. {
  43. scanf("%d%d", &xi[i], &yi[i]);
  44. maze[xi[i] + offset][yi[i] + offset] = ;
  45. vis[xi[i] + offset][yi[i] + offset] = ;
  46. }
  47.  
  48. bfs(, );
  49. int res = ;
  50. for (int i = ; i < SIZE; i++)
  51. for (int j = ; j < SIZE; j++)
  52. if (vis[i][j] == false) res++;
  53. ans[n] = res;
  54.  
  55. for (int i = n; i >= ; i--) //1~3棵以内不可能围成空地
  56. {
  57. int u = xi[i] + offset;
  58. int v = yi[i] + offset;
  59. maze[u][v] = ;
  60. int cnt = ;
  61. for (int j = ; j < ; j++)
  62. {
  63. int nu = u + dx[j], nv = v + dy[j];
  64. if (maze[nu][nv] == && vis[nu][nv] == ) cnt++;
  65. }
  66. if (cnt == ) //cnt == 0,表示该点在内部
  67. {
  68. vis[u][v] = ;
  69. res++;
  70. }
  71. else res -= (bfs(u, v) - );
  72. ans[i - ] = res;
  73. }
  74. for (int i = ; i <= n; i++)
  75. printf("%d\n", ans[i]);
  76. return ;
  77. }

参考链接: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. Leetcode字符串专题

    Leetcode38. Count and Say 分析:根据题意,数列的下一项就是统计上一项中每个数字出现的次数,理解清楚题意就很简单了 class Solution { public: strin ...

  2. 文件的创建,读取,写入,修改,删除---python入门

    转自:http://blog.163.com/jackylau_v/blog/static/175754040201181505158356/ 一.用Python创建一个新文件,内容是从0到9的整数, ...

  3. B. Arpa’s obvious problem and Mehrdad’s terrible solution

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  4. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时14&&15

    课时14 卷积神经网络详解(上) CNN处理的是一些数据块,在这之间有很多层,一系列的层将输入数据变换为输出数据,所以完成操作的中间量不仅是NN时候讲的那些向量,而是立体结构,有宽,高和深度,在整个计 ...

  5. Android EditText实现小数点后几位的终级方案

    有时候,我们用EditText的时候,会要求输入小数点后几位,遇到过几次这样的需求,这次把它给记下来,方便以后使用 /** * 小数位数 */ public class PointLengthFilt ...

  6. (水题)洛谷 - P1618 - 三连击(升级版)

    https://www.luogu.org/problemnew/show/P1618 枚举所有的A,最多 $A_9^3$ ,然后生成B和C(先判断是不是能够生成),判断有没有重复数字(比之前那个优雅 ...

  7. C++笔试题(十)

    这些题目相比其他公司的试题,较为基础,全部为C语言,没有涉及C++,但如果不细心,是很难得到较高分数的.另外大家转贴不要去掉我的个人信息啊.互相宣传下网站嘛.1. 找错 void test1() { ...

  8. Codeforces711C 【DP】

    题意: 有n个点,m种颜色,你要给n个点上没有颜色的点染色.每个点i对应染的颜色j有一个颜料消耗,p[i][j]是点i染成j颜色的花费,你必须保证有k段颜色的点,输出最少花费多少颜料. 还有一个就是本 ...

  9. CodeForces 622C

    题意: 给你一个数组,m个询问,l,r,x;让你输出在区间[ l , r ]上哪个位置不等于x. 思路: 额..我这个思路还是剽来的...不过真心赞啊. 开个p数组,直接记录数组每个元素的位置,并且实 ...

  10. hdoj3790 【最短路】

    这一题啊,其实还是很简单的~(A掉了就很简单啊~) 思路: 松弛,然后在里面维护一个小最短路~: A掉这一题,感觉松弛的理解又上了一个台阶,以及spfa的原理,最短路用到的原理就是松弛,先把图构造到最 ...