首页 > 其他分享 >题解 CF1292A

题解 CF1292A

时间:2023-02-16 16:57:30浏览次数:46  
标签:CF1292A int 题解 else define bmap 障碍 blocked

题目大意:

给你 \(2\times n\) 的迷宫,初始时没有任何障碍,给定 \(q\) 次询问,每次询问给予坐标 \((x,y)\),问将坐标 \((x,y)\) 反转状态(即无障碍变有障碍,有障碍变无障碍)后,该迷宫还能否到达终点 \((2,n)\),并应用更改。

题目分析:

因为是 \(2\times n\) 的迷宫,很显然的是,若下方一个位置为有障碍,则他的左上角或正上方或右上角有障碍时,角色无法到达终点。

同理,对于上方的情况,就是他的左下角或正下方或右下角有障碍时,角色无法到达终点。

如果觉得不大显然的话,可以看下图:

帮助理解的图

故,我们只需要统计一下形成关联的地方有多少就行了,时间复杂度 \(O(q)\)。

代码实现:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define TIME_LIMIT (time_t)1.5e3
#define dbg(x) cerr<<#x<<": "<<x<<endl;
#define MAX_SIZE (int)114514
bool bmap[2][MAX_SIZE];
signed main() {
    ios::sync_with_stdio(false);
#ifdef LOCAL
    freopen("in.in", "r", stdin);
    freopen("out.out", "w", stdout);
    time_t cs = clock();
#endif
    //========================================
    int n, q;
    cin >> n >> q;
    int blocked = 0;

    while (q--) {
        int x, y;
        cin >> x >> y;
        x -= 1;

        if (x) {
            if (bmap[x][y]) {
                blocked -= bmap[x - 1][y - 1];
                blocked -= bmap[x - 1][y];
                blocked -= bmap[x - 1][y + 1];
            } else {
                blocked += bmap[x - 1][y - 1];
                blocked += bmap[x - 1][y];
                blocked += bmap[x - 1][y + 1];
            }
        } else {
            if (bmap[x][y]) {
                blocked -= bmap[x + 1][y - 1];
                blocked -= bmap[x + 1][y];
                blocked -= bmap[x + 1][y + 1];
            } else {
                blocked += bmap[x + 1][y - 1];
                blocked += bmap[x + 1][y];
                blocked += bmap[x + 1][y + 1];
            }
        }

        bmap[x][y] = !bmap[x][y];

        if (blocked)
            cout << "No" << endl;
        else
            cout << "Yes" << endl;
    }

    //========================================
#ifdef LOCAL
    fclose(stdin);
    fclose(stdout);
    time_t ce = clock();
    cerr << "Used Time: " << ce - cs << " ms." << endl;

    if (TIME_LIMIT < ce - cs)
        cerr << "Warning!! Time exceeded limit!!" << endl;

#endif
    return 0;
}

标签:CF1292A,int,题解,else,define,bmap,障碍,blocked
From: https://www.cnblogs.com/larry76/p/17127355.html

相关文章

  • 题解 CF916C
    题目大意:要求构造一张图,并让该图满足以下条件:有\(n\)个点,\(m\)条边。每条边的边权范围是\([1,10^9]\)。图中从\(1\)到\(n\)的最短路径长度是个质数。最小生......
  • 题解 CF277A
    题目大意:有\(n\)名员工,一共有\(m\)种语言,每名员工都会其中\(k_i\)种语言(\(m\ge\boldsymbol{k_i\ge0}\)),现规定两名员工可以交流的条件如下:两名员工会一种及以......
  • 题解 CF980B
    前言:关于原题目中的“旅馆”这一用词,个人感觉用起来十分不畅,于是下文中将会用“障碍物”一词来代指旅馆。题目大意:有一座\(4\timesn\)的矩阵,然后让你放置障碍物......
  • MASA Stack 1.0 发布会 —— 社区问题解答
    MASAStack1.0圆桌讨论Q1: 全职开源的团队,你们的收入是什么?1.首先感谢我们的金主朗诗德公司,朗诗德是一家大型的净水器研发、生产、销售的公司,我们的产品也在朗诗德公......
  • ABC222H 题解
    很久之前我问joke3579有没有什么水黑,然后他给我了这个题。小推一波。题解看到这种东西首先找找有没有什么性质。简单分析可以得出一棵美丽的\(n\)阶二叉树一定满足如......
  • zfs 之 `label is missing` 问题解决方法.
    具体报错信息status:Oneormoredevicescouldnotbeusedbecausethelabelismissingorinvalid.Sufficientreplicasexistforthepooltocontinue......
  • abc289F 题解
    某人vp时10min口胡了这道题,然后调了两天,第一天卡在WA4,第二天WA7WA10交相辉映,心态快崩了,因此写了这篇题解。\(a=b\)处理有借鉴这篇题解。firstobservation......
  • P7468 愤怒的小N 题解
    P7468愤怒的小N题解首先发现答案等于\[\sum_{i=0}^{n-1}[cnt(i)\&1]\cdotf(i)\\\]其中\(cnt(x)\)为\(x\)在二进制表示下\(1\)的个数。考虑从高到低枚举第一个......
  • AtCoder Beginner Contest 272 题解
    AtCoderBeginnerContest272Solution目录AtCoderBeginnerContest272Solution更好的阅读体验戳此进入题面链接题面Luogu链接abcd跳了[ABC272E]AddandMex题面S......
  • [ABC272F] Two Strings 题解
    [ABC272F]TwoStringsSolution目录[ABC272F]TwoStringsSolution更好的阅读体验戳此进入题面SolutionCodeUPD更好的阅读体验戳此进入题面给定两字符串$S,T$,求......