题目

NEKO#ΦωΦ has just got a new maze game on her PC!

The game's main puzzle is a maze, in the forms of a \(2×n\) rectangle grid. NEKO's task is to lead a Nekomimi girl from cell \((1,1)\) to the gate at \((2,n)\) and escape the maze. The girl can only move between cells sharing a common side.

However, at some moments during the game, some cells may change their state: either from normal ground to lava (which forbids movement into that cell), or vice versa (which makes that cell passable again). Initially all cells are of the ground type.

After hours of streaming, NEKO finally figured out there are only q such moments: the i-th moment toggles the state of cell \((ri,ci)\) (either from ground to lava or vice versa).

Knowing this, NEKO wonders, after each of the q moments, whether it is still possible to move from cell \((1,1)\) to cell \((2,n)\) andwithout going through any lava cells.

Although NEKO is a great streamer and gamer, she still can't get through quizzes and problems requiring large amount of Brain Power. Can you help her?

\(2×n\)的迷宫,从\((1,1))\)出发到\((2,n)\),初始时全部的都是地面,每次询问会把一个地面给变成熔浆,熔浆变成地面,熔浆不能通过,问是否可以走到。

输入格式

The first line contains integers$ n, q (2≤n≤105, 1≤q≤105)$.

The i-th of q following lines contains two integers \(ri, ci (1≤ri≤2, 1≤ci≤n)\), denoting the coordinates of the cell to be flipped at the i-th moment.

It is guaranteed that cells \((1,1)\) and \((2,n)\) never appear in the query list.

第一行两个整数\(n,q\).

接下来又q行,第\(i\)行包括两个整数,\(ri, ci (1≤ri≤2, 1≤ci≤n)\),表示在第i个时刻要翻转的单元格的坐标.

确保单元格\((1,1)\)和\((2,n)\)永远不会出现在查询列表中。

输出格式

For each moment, if it is possible to travel from cell \((1,1)\) to cell \((2,n)\), print "Yes", otherwise print "No". There should be exactly q answers, one after every update.

对于每个时刻,如果可以从单元格\((1,1)\)到单元格\((2,n)\),则打印"Yes",否则打印"No",有q个答案,每行输入对应一行输出.

输入样例

5 5
2 3
1 4
2 4
2 3
1 4

输出样例

Yes
No
No
No
Yes

题解

这道题的大概思路还是挺好想的,大概就是每次输入的时候记录下挡路的"单元"

上图用圈出来的部分都是一个单元,可以阻挡玩家通过,如果整个地图只有一个熔浆单元格,显然是不足以构成一个单元,至少两个(上面三种情况)才可以构成.

那么思路就有了,如果在反转的时候对面三个格子已经有了熔浆单元,单元的数量加一.

在反转的时候,如果对面已经有了熔浆单元,说明这个格子在从地面到熔浆的过程中,单元的数量增加了,那么反转的时候自然要减回去.

还有一个小技巧,为了方便的表示"对面的x坐标",有三种方式:

  1. 使用if语句,例如#define o(x) ((x)==1?2:1),o(x)表示对面的横坐标

  2. 因为\(x\)坐标有\(1\)和\(2\)两种情况,那么用3去减就可以了,同样可以推广,如果一个变量只有两个值的可能性\(a\)和\(b\),使用同一种运算在a和b之间转化的方式就是\(a+b-x\),例如当\(x\)为\(a\),\(a+b-a=b\);当\(x\)为\(b\),\(a+b-b=a\),在这道题中,\(3-x\)表示对面的横坐标.

  3. 有没有感觉这种运算像取反操作?我们只要稍作修改,就可以使用取反来操作.在输入之后立刻x--,然后就可以用!x表示对面的横坐标,这种操作好在可以少开\(10^5\)大小的数组.

代码

#include <cstdio>
int vis[2][100005];
int n, q, x, y, ans;
int main() {
scanf("%d%d", &n, &q);
while (q--) {
scanf("%d%d", &x, &y);
x--;
if (vis[x][y]) {
if (vis[!x][y]) ans--;
if (vis[!x][y + 1] && y + 1 <= n) ans--; //注意边界
if (vis[!x][y - 1] && y - 1 >= 1) ans--;
} else {
if (vis[!x][y]) ans++;
if (vis[!x][y + 1] && y + 1 <= n) ans++;
if (vis[!x][y - 1] && y - 1 >= 1) ans++;
}
vis[x][y] = !vis[x][y];
printf("%s\n", ans ? "No" : "Yes");
}
}

NEKO's Maze Game - Codeforces 题解的更多相关文章

  1. Codeforces Round #614 (Div. 2) C - NEKO's Maze Game

    题目链接:http://codeforces.com/contest/1293/problem/C 题目:给定一个 2*n的地图,初始地图没有岩浆,都可以走, 给定q个询问,每个询问给定一个点(x,y ...

  2. Codeforces 1292A/1293C - NEKO's Maze Game

    题目大意: 有一个2*n的图 NEKO#ΦωΦ要带领mimi们从(1,1)的点走到(2,n)的点 每次会操作一个点,从可以通过到不可以通过,不可以通过到可以通过 每操作一次要回答一次NEKO#ΦωΦ能 ...

  3. Codeforces Round #614 (Div. 1) A. NEKO's Maze Game (思维,模拟)

    题意:有一个\(2\)X\(n\)的矩阵,你想从\((1,1)\)走到\((2,n)\),每次可以向上下左右四个方向走,但在某些时间段某个点会被堵住,如果已经被堵住,那么即恢复正常,每次对某个点操作, ...

  4. 题解 CF1292A 【NEKO's Maze Game】

    有一个结论: 当 \((1,1)\) 不能抵达 \((2,n)\) 时,必定存在一个点对,这两个点的值均为真,且坐标中的 \(x\) 互异,\(y\) 的差 \(\leq 1\) 这个结论的正确性感觉 ...

  5. CodeForces 1292A NEKO's Maze Game(思维)

    #include <stdio.h> #include <string.h> #include <iostream> #include <string> ...

  6. CodeForces 1293 C NEKO's Maze Game

    [题目链接] [题目大意] 有一个2 ∗ n的地图,小女孩从(1,1)想移动到(2,n) 有q次询问,每次询问更改一个格子状态(是否可以通过) 只能上下左右移动而不能斜着移动,问每次操作后,是否可以移 ...

  7. 【迷宫问题】CodeForces 1292A A NEKO's Maze Game

    题目大意 vjudge链接 共两行,从(1,n)到(2,n). 每过一个时刻会有一个位置的状态变化,从能到达这个位置变成不能到达,或从不能到达变成能到达,问在每个时刻中是否能从起点到终点. 数据范围 ...

  8. NEKO's Maze Game

    NEKO#ΦωΦ has just got a new maze game on her PC! The game's main puzzle is a maze, in the forms of a ...

  9. 每日一题:codeforces题解

    题目 B. Peculiar Movie Preferences time limit per test 2 seconds memory limit per test 512 megabytes i ...

随机推荐

  1. ubuntu16.04设置开机自启服务

    网上说了开机自启有许多种方法: 1.最简单的是:在/etc/rc.local的exit 0前面加上你启动服务的脚本文件路径 注:这个脚本文件应写绝对路径! 2.网上:修改rc.local开头的#/bi ...

  2. Linux学习5-安装mysql

    前言 今天我们来学习一下如何在Linux下安装mysql 一:准备安装包 可以从http://www.mysql.com/downloads/官方网站下载到最新版本,本次安装的版本是mysql-5.7 ...

  3. python入门到放弃-基本数据类型之tuple元组

    #概述 元组俗称不可变的列表,又称只读列表,是python的基本数据类型之一, 用()小括号表示,里面使用,逗号隔开 元组里面可以放任何的数据类型的数据,查询可以,循环可以,但是就是不能修改 #先来看 ...

  4. DirectX11--深入理解Effects11、使用着色器反射机制(Shader Reflection)实现一个复杂Effects框架

    前言 如果之前你是跟随本教程系列学习的话,应该能够初步了解Effects11(现FX11)的实现机制,并且可以编写一个简易的特效管理框架,但是随着特效种类的增多,要管理的着色器.资源等也随之变多.如果 ...

  5. JAVA有关位运算的全套梳理

    一.在计算机中数据是如何进行计算的? 1.1:java中的byte型数据取值范围 我们最开始学习java的时候知道,byte类型的数据占了8个bit位,每个位上或0或1,左边第一位表示符号位,符号位如 ...

  6. 趣谈编程史第3期-大器晚成的新晋流量Python发展史

    写在前面 这篇博文主要介绍javaScript的发展史,根据作者在B站发布的同名视频的文案整理修改而成,对视频感兴趣的博友可访问https://www.bilibili.com/video/av860 ...

  7. 快速上手 Python 命令行模块 Click

    关于Click? 说下 Click 模块是干啥的,简单说,它就是把我们的 Python 脚本的一些函数,通过 添加带有 Click 关键字的装饰器进行装饰进而将函数调用的形式转化为命令行传参的形式然后 ...

  8. javascript中this指向的问题

    javascript中this只有函数执行时候才能确定到底指向谁,实际this最终指向是那个调用它的对象. 1,匿名函数中的this——window function foo(){ var lastN ...

  9. 【已解决】HDFS节点已经启动,但不能访问50070 ?

    问题描述 通过start-dfs.sh启动了三个节点 但无法通过IP访问50070端口 问题分析 1.可能是防火墙没关,被拦截了 果然,防火墙没关 再将防火墙设为开机不启动 systemctl dis ...

  10. MySQL记录操作(多表查询)

    准备 建表与数据准备 #建表 create table department( id int, name varchar(20) ); create table employee( id int pr ...