【NOIP2014模拟8.25】设备塔
题目
为了封印辉之环,古代塞姆利亚大陆的人民在异空间中建造了一座设备塔。
简单的说,这座设备塔是一个漂浮在异空间中的圆柱体,圆柱体两头的圆是计算核心,而侧面则是
传输信息所用的数据通道,划分成N *m 个区块。
然而,随着工作的继续进行,他们希望把侧面的一部分区块也改造成其他模块。然而,任何时候都
必须保证存在一条数据通道,能从圆柱体的一端通向另一端。
由于无法使用辉之环掌控下的计算系统,他们寻求你的帮助来解决这个问题。他们将逐个输入想要
改造的区域,而你则执行所有可行的改造并忽略可能导致数据中断的改造。
分析
圆柱体,所以左右两边相通。将这N*M个区块复制一个,并起来。
发现,如有有两个区块都被改造了,那么当其中个区块是在另一个区块的八个方向相邻的话,数据就不能从之间通过。
于是,我们搞个并查集,当改造一个区块时,如果在改造后,与之对应的被复制的区块,在并查集中有共同的父亲,那么这个区块就不合法,因为当区块和被复制的区块中可以通过区块相连,又因为每个区块都有对应的被复制的区块,显然整个圆柱体就一定被挡住了。
如果这个区块合法,那么将它八个方向相邻的区块中被改造的都和他用并查集合在一起。
有个小细节要就是当某个区块的八个方向相邻的区块中有列数小于1或大于2m的要处理一下。
#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const int maxlongint=2147483647;
const int mo=1000000007;
const int N=3005;
using namespace std;
int k,n,m,fa[N*N*2],a[N][N*2],ans;
int z[8][2]=
{
{-1,0},
{0,-1},
{1,0},
{0,1},
{-1,1},
{1,-1},
{1,1},
{-1,-1}
};
int pos(int x,int y)
{
return (x-1)*m*2+y;
}
int get(int x)
{
if(fa[x]==x) return x;
fa[x]=get(fa[x]);
return fa[x];
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n*m*2;i++) fa[i]=i;
for(k=k;k>=1;k--)
{
int x,y;
scanf("%d%d",&x,&y);
int xx=x,yy=y+m;
bool q=true;
for(int i=0;i<=7 && q;i++)
if(a[x+z[i][0]][(y+z[i][1]-1+2*m)%(2*m)+1])
{
int xf=get(pos(x+z[i][0],(y+z[i][1]-1+2*m)%(2*m)+1));
for(int j=0;j<=7 && q;j++)
if(a[xx+z[j][0]][(yy+z[j][1]-1+2*m)%(2*m)+1])
{
int yf=get(pos(xx+z[j][0],(yy+z[j][1]-1+2*m)%(2*m)+1));
if(xf==yf) q=false;
}
}
if(q)
{
a[x][y]=a[xx][yy]=1;
for(int i=0;i<=7;i++)
if(a[x+z[i][0]][(y+z[i][1]-1+2*m)%(2*m)+1])
{
int xf=get(pos(x+z[i][0],(y+z[i][1]-1+2*m)%(2*m)+1));
fa[xf]=pos(x,y);
}
for(int j=0;j<=7;j++)
if(a[xx+z[j][0]][(yy+z[j][1]-1+2*m)%(2*m)+1])
{
int yf=get(pos(xx+z[j][0],(yy+z[j][1]-1+2*m)%(2*m)+1));
fa[yf]=pos(xx,yy);
}
ans++;
}
}
cout<<ans<<endl;
}
【NOIP2014模拟8.25】设备塔的更多相关文章
- 【NOIP2014模拟8.25】地砖铺设
题目 在游戏厅大赚了一笔的Randy 终于赢到了他想要的家具.乘此机会,他想把自己的房间好好整理一 下. 在百货公司,可以买到各种各样正方形的地砖,为了美观起见,Randy 不希望同样颜色的正方形地 ...
- linux平台模拟生成CAN设备
前言 使用socketCan的过程中有时候没有can接口设备,但是需要测试一下can接口程序是否有问题, 此时需要系统模拟生成can设备,本文介绍linux平台模拟生成CAN设备的方法. 实现步骤 1 ...
- linux 模拟生成 CAN 设备
/************************************************************************************** * linux 模拟生成 ...
- [JZOJ3809]设备塔
其实我并没有JZOJ的号...但既然dalao说了是JZOJ上的题,那就是了吧...... 为了封印辉之环,古代塞姆利亚大陆的人民在异空间中建造了一座设备塔. 简单的说,这座设备塔是一个漂浮在异空间中 ...
- JZOJ 3929. 【NOIP2014模拟11.6】创世纪
3929. [NOIP2014模拟11.6]创世纪 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 上帝手 ...
- JZOJ 3928. 【NOIP2014模拟11.6】射击
3928. [NOIP2014模拟11.6]射击 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description 有问题, ...
- JZOJ 3927. 【NOIP2014模拟11.6】可见点数
3927. [NOIP2014模拟11.6]可见点数 (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Description ZP ...
- Linux 下模拟制作块设备并挂载
Linux 下模拟制作块设备并挂载 作者:Grey 原文地址: 博客园:Linux 下模拟制作块设备并挂载 CSDN:Linux 下模拟制作块设备并挂载 环境 CentOS-7 下载地址:下载 Cen ...
- 【NOI P模拟赛】奶油蛋糕塔(状压 DP)
题面 数据范围 1 ≤ n ≤ 5 × 1 0 5 1\leq n\leq5\times10^5 1≤n≤5×105 . 题解 n ≤ 20 n\leq 20 n≤20 的状压应该都会吧,状态记录已经 ...
随机推荐
- UniEAP Platform V5.0 Unable to compile class for JSP
流程设计器报错: http://127.0.0.1:8080/framework/workflow/webdesign/procmodify/procmodifydetail.jsp?isLoadDa ...
- ca认证(https)
证书签名过程: 1.网页服务器生成证书请求文件: 2.认证中心确认申请者的身份真实性: 3.认证中心使用根证书的私钥加密证书请求文件,生成证书: 4.把证书传给申请者. 一.实验环境 node1 19 ...
- Python基础语法之文件操作
1 读文件 1.1 简单读文件 f = open('text', 'r') # f是文件句柄 data = f.read() # read方法可以加整型参数,是几就读几个字符 print(data) ...
- CF-Div.3-B. Minimize the Permutation【模拟·需要清醒的脑子】
题目传送门 根据字典序,是个人都会想到依次把目前最小的数尽量往前面移动,直到它不能再往前移动,或者已经到了它的期望位置(就是排列的那个位置 比如$i$就应该在位置$i$)为止. 所以我刚开始是这么写的 ...
- IDEA 对spring boot Maven 项目打 Jar 包
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> ...
- 红帽学习记录[RHCE] ISCSI远程块储存
目录 iSCSI 定义 组件术语 启动器 目标 ACL 发现 IQN 登录 LUN 节点 门户 TPG 搭建一个iSCSI服务 提供一个iSCSI目标 配置iSCSI客户端 iSCSI 定义 SCSI ...
- 3、APK file does not exist on disk
参考:https://blog.csdn.net/ouyang_peng/article/details/51243441 亲测可以解决
- P1880石子合并
1995年的noi区间dp题,这道题AC耗时达到了数月. 有一道题叫做果子合并,也是求合并的最小花费,但是那个题是可以随便合并两堆,但是这个题只能合并相邻的两堆,并且是一个环.对于环的问题,我们一般可 ...
- vs 小贴士
1. ubuntu上vs code root执行 sudo code --user-data-dir="~/.vscode-root" 2. 设置vs code 打开在新的标签页打 ...
- python 链接mysql 事务
import mysql.connector try: con = mysql.connector.connect( host="localhost", port="33 ...