题目链接:http://codeforces.com/contest/1293/problem/C

题目:给定一个 2*n的地图,初始地图没有岩浆,都可以走,

给定q个询问,每个询问给定一个点(x,y),每个询问有以下作用:

(1)如果该点可走,则变为不可走

(2)如果该点不可走,则变为可走

问,每个询问作用后,还能否从(1,1)走到(2,n)。

思路:我们可以这么想:

如果第二层有个无法走的点,那么只要该点上方三个点任意一个点不可走,则该地图无法走到终点。

"如果第二层有个无法走的点,那么只要该点上方三个点任意一个点不可走"这句话可以想成该点会对上面

三个点贡献1点,那么第一层任意点的贡献值为[0,3],只要第一层有个点不可走,且第二层给它的贡献值不为0,

即该地图无法走通。如果第二层不能走的点变为可走了,那么对上面三个点的贡献度为-1,即减去之前的1点贡献。

下面用到了二维转一维来操作。

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std; const int N = (int)3e5+;
int app[N << ];//该点障碍(岩浆)本来是否存在
int tot[N];//第一层的贡献度
int sum[];//贡献度为1,2,3的点数 int main(){ int n,q;
scanf("%d%d",&n,&q);
int x,y;
while(q--){
scanf("%d%d",&x,&y);
if(x > ){ //第二层
if(!app[ n+y ]){//第二层该点本来不存在
app[ n+y ] = ;//标记存在
for(int now = max(,(x-)*y-); now <= min((x-)*y+,n); ++now){
if(app[now]){//第一层存在
//改变该点的贡献度,随之也要改变贡献度为1,2,3的点数的数量
--sum[tot[now]];
++tot[now];
++sum[tot[now]];
}
else ++tot[now];
}
}else{
app[ n+y ] = ;
for(int now = max(,(x-)*y-); now <= min((x-)*y+,n); ++now){
if(app[now]){//第一层存在
--sum[tot[now]];
--tot[now];
++sum[tot[now]];
}
else --tot[now];
}
}
}else{//第一层的点,要判断第一层的点是否存在,如果第一层的该点不存在,
//第二层的贡献度对该点也没有影响
if(app[x*y]){
app[x*y] = ;
--sum[tot[x*y]];
}
else{
app[x*y] = ;
++sum[tot[x*y]];
}
}
if(sum[]+sum[]+sum[]) printf("%d__________________________No\n",sum[]+sum[]+sum[]);
else printf("__________________________Yes\n");
} return ;
}

最新文章

  1. C语言中的结构体
  2. C++中常见错误整理(不定期更新)
  3. HDU5840 (分块+树链剖分)
  4. 扒皮下GitHub 404的图片层次轴动特效
  5. js获取url地址中的参数
  6. web.config的奇淫巧技
  7. 小结JS中的OOP(下)
  8. 李洪强iOS开发之OC语言构造方法
  9. javascript中的内置对象
  10. Delphi新语法
  11. 你不知道的关于计算机大师 Dijkstra 的事情
  12. C++ 哈希表 (hashtable) 用于保存简单的数据,及数据查找,数据删除
  13. docker核心概念及centos6下安装
  14. chrome开发工具指南(二)
  15. 根据ccid取得账户,更改某段值再创建账户,返回新的ccid
  16. C++标准模板库(STL)之Queue
  17. Nagios故障 CHECK_NRPE: Socket timeout after 10 seconds.
  18. [No000016E]Spring 中获取 request 的几种方法,及其线程安全性分析
  19. 史上最详细的Hadoop环境搭建(转)
  20. c# 设计模式 之:简单工厂、工厂方法、抽象工厂之小结、区别

热门文章

  1. 得心应用的Vue高级技巧---vue中文社区
  2. 【python基础语法】第7天作业练习题
  3. php根据字段相识度进行排序查询
  4. 最短路径:初涉Dijkstra算法
  5. Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set…
  6. Java遍历字符串数组的几种方法
  7. 剑指offer-面试题39-数组中出现次数超过一半的数字-快速排序
  8. tcp客户端从服务器下载文本文件
  9. Linux系统之网络相关的命令
  10. mysql引擎介绍