Codeforces Round #614 (Div. 2) C - NEKO's Maze Game
题目链接: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 ;
}
Codeforces Round #614 (Div. 2) C - NEKO's Maze Game的更多相关文章
- Codeforces Round #614 (Div. 1) A. NEKO's Maze Game (思维,模拟)
题意:有一个\(2\)X\(n\)的矩阵,你想从\((1,1)\)走到\((2,n)\),每次可以向上下左右四个方向走,但在某些时间段某个点会被堵住,如果已经被堵住,那么即恢复正常,每次对某个点操作, ...
- Codeforces Round #614 (Div. 2) A-E简要题解
链接:https://codeforces.com/contest/1293 A. ConneR and the A.R.C. Markland-N 题意:略 思路:上下枚举1000次扫一遍,比较一下 ...
- Codeforces Round #554 (Div. 2) 1152B. Neko Performs Cat Furrier Transform
学了这么久,来打一次CF看看自己学的怎么样吧 too young too simple 1152B. Neko Performs Cat Furrier Transform 题目链接:"ht ...
- Codeforces Round #554 (Div. 2) 1152A - Neko Finds Grapes
学了这么久,来打一次CF看看自己学的怎么样吧 too young too simple 1152A - Neko Finds Grapes 题目链接:"https://codeforces. ...
- Codeforces Round #554 (Div. 2) C. Neko does Maths (简单推导)
题目:http://codeforces.com/contest/1152/problem/C 题意:给你a,b, 你可以找任意一个k 算出a+k,b+k的最小公倍数,让最小公倍数尽量小,求出 ...
- Codeforces Round #554 (Div. 2) C.Neko does Maths (gcd的运用)
题目链接:https://codeforces.com/contest/1152/problem/C 题目大意:给定两个正整数a,b,其中(1<=a,b<=1e9),求一个正整数k(0&l ...
- Codeforces Round #554 (Div. 2) C. Neko does Maths(数学+GCD)
传送门 题意: 给出两个整数a,b: 求解使得LCM(a+k,b+k)最小的k,如果有多个k使得LCM()最小,输出最小的k: 思路: 刚开始推了好半天公式,一顿xjb乱操作: 后来,看了一下题解,看 ...
- Codeforces Round #554 (Div. 2) B. Neko Performs Cat Furrier Transform(思维题+log2求解二进制位数的小技巧)
传送门 题意: 给出一个数x,有两个操作: ①:x ^= 2k-1; ②:x++; 每次操作都是从①开始,紧接着是② ①②操作循环进行,问经过多少步操作后,x可以变为2p-1的格式? 最多操作40次, ...
- Codeforces Round #554 (Div. 2) C. Neko does Maths (数论 GCD(a,b) = GCD(a,b-a))
传送门 •题意 给出两个正整数 a,b: 求解 k ,使得 LCM(a+k,b+k) 最小,如果有多个 k 使得 LCM() 最小,输出最小的k: •思路 时隔很久,又重新做这个题 温故果然可以知新❤ ...
随机推荐
- python学习----文件的操作(2)
1.文件指针的操作 f=open("yesterday","r",encoding="utf-8") #文件句柄 #文件内指针的操作 pri ...
- 正则表达式中的exec()方法
推荐该博主的内容链接: https://blog.csdn.net/ddwddw4/article/details/84658398?ops_request_misc=%7B%22request%5F ...
- MNIST 源码解析
# Copyright 2015 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 ...
- setter&getter
let _age = 4 class Animal { construct (type){ this.type = type } get age(){ return _age } set age(va ...
- 剑指offer-面试题32-之字形打印二叉树-二叉树栈
/* 题目: 分行按层自上向下呈之字形打印二叉树.第一行从左到右,第二行从右到左,第三行从左到右... */ /* 思路: 使用两个栈stack1和stack2. stack1存储从左向右打印的节点, ...
- js监听滚动结束
使用setTimeout模拟滚动结束 let scrollTimer; document.addEventListener("scroll", () => { clearTi ...
- 我用 Python 集齐了五福
[新智元导读]又到了每年集五福的时间.你的五福集齐了吗?每天在各种群里苦苦求扫福,或者忍受着别人天天求扫福,是不是有点厌倦了.作为技术人员,怎么能忍受得了这种低效的全人工操作呢?今天就为大家推荐用 ...
- Java-公约公倍
题目: 如果两个数很大,怎样求最大公约数,最小公倍数?如果是n个数呢?比如1000个数的最小公倍数 分析:求a和b的最大公约数——辗转相除法(又叫欧几里得定理).即找到一个数,能对a,b都除尽.对于这 ...
- 使用DataContractJsonSerializer发序列化对象时出现的异常
最近服务器上的某个程序的错误日志中频繁出现以下异常: Deserialising: There was an error deserializing the object of type {type} ...
- Java第五节课总结
继承是对现实生活中的“分类”概念的一种模拟. 通过surper调用的基类构造方法,必须是子类构造方法中的第一个语句. 构造函数(constructor)是一种特殊的方法 .主要用来在创建对象时初始化对 ...