WOJ 39 塌陷的牧场
感觉……做克老师的题,都很神仙……
还有去年一个人坐在家里写挂60分算法的惨痛记忆,凭借着一点点记忆重新写这道题。
感觉这并查集真的很神仙,仍然不会算最后的α的复杂度……自己想感觉无论如何都要挂个log
考虑到每个格子移动相当于所有障碍物反向移动,我们可以把边界也当成是障碍物,利用并查集来维护障碍物移动后位置中间还有多少个可以删减的答案,处理完这些答案就好了。
由于一共$n * m$个数据点每个最多被删减一遍,所以并不会超时。
Code:
#include <cstdio>
#include <iostream>
using namespace std;
typedef pair <int, int> pin; const int N = ; int n, m, e, qn, tot = , ans, f[][N][N];
bool vis[N][N];
pin a[N << ]; inline void read(int &X) {
X = ;
char ch = ;
int op = ;
for(; ch > '' || ch < ''; ch = getchar())
if(ch == '-') op = -;
for(; ch >= '' && ch <= ''; ch = getchar())
X = (X << ) + (X << ) + ch - ;
X *= op;
} inline void init() {
for(int i = ; i <= n + ; i++)
for(int j = ; j <= m + ; j++)
f[][i][j] = f[][i][j] = i, f[][i][j] = f[][i][j] = j;
} int find01(int x, int y, int k) {
return f[k][x][y] == x ? x : f[k][x][y] = find01(f[k][x][y], y, k);
} int find23(int x, int y, int k) {
return f[k][x][y] == y ? y : f[k][x][y] = find23(x, f[k][x][y], k);
} inline void del(int x, int y) {
if(vis[x][y]) return;
vis[x][y] = ;
f[][x][y]--, f[][x][y]++, f[][x][y]--, f[][x][y]++;
ans++;
} inline void goup(int k) {
for(int i = ; i <= tot; i++) {
int x = a[i].first, y = a[i].second;
a[i].first -= k;
if(y < || y > m || x < ) continue;
if(x > n) x = n;
for(; ; ) {
x = find01(x, y, );
if(x < || x < a[i].first) break;
del(x, y);
}
}
} inline void godown(int k) {
for(int i = ; i <= tot; i++) {
int x = a[i].first, y = a[i].second;
a[i].first += k;
if(y < || y > m || x > n) continue;
if(x < ) x = ;
for(; ; ) {
x = find01(x, y, );
if(x > n || x > a[i].first) break;
del(x, y);
}
}
} inline void goleft(int k) {
for(int i = ; i <= tot; i++) {
int x = a[i].first, y = a[i].second;
a[i].second -= k;
if(x < || x > n || y < ) continue;
if(y > m) y = m;
for(; ; ) {
y = find23(x, y, );
if(y < || y < a[i].second) break;
del(x, y);
}
}
} inline void goright(int k) {
for(int i = ; i <= tot; i++) {
int x = a[i].first, y = a[i].second;
a[i].second += k;
if(x < || x > n || y > m) continue;
if(y < ) y = ;
for(; ; ) {
y = find23(x, y, );
if(y > m || y > a[i].second) break;
del(x, y);
}
}
} int main() {
read(n), read(m), read(e), read(qn);
init();
for(int x, y, i = ; i <= e; i++) {
read(x), read(y);
a[++tot] = pin(x, y);
del(x, y);
}
for(int i = ; i <= m; i++)
a[++tot] = pin(, i), a[++tot] = pin(n + , i);
for(int i = ; i <= n; i++)
a[++tot] = pin(i, ), a[++tot] = pin(i, m + ); for(char op[]; qn--; ) {
scanf("%s", op);
int k; read(k); ans = ;
if(op[] == 'U') godown(k);
if(op[] == 'D') goup(k);
if(op[] == 'L') goright(k);
if(op[] == 'R') goleft(k); printf("%d\n", ans);
} return ;
}
WOJ 39 塌陷的牧场的更多相关文章
- bzoj5048: 塌陷的牧场
Description 农夫小Q将他的奶牛们饲养在一个长n宽m的矩形网格牧场中.行从上到下依次编号为1到n,列从左往右依次编号为1 到m.为了防止奶牛们逃跑,小Q在牧场外圈安装了一排电网,只要奶牛走出 ...
- 【BZOJ 5048 塌陷的牧场】
Time Limit: 25 Sec Memory Limit: 256 MBSubmit: 77 Solved: 34[Submit][Status][Discuss] Description ...
- bzoj1725 [Usaco2006 Nov]Corn Fields牧场的安排(状压dp)
1725: [Usaco2006 Nov]Corn Fields牧场的安排 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 714 Solved: 502 ...
- CSS浮动布局带来的高度塌陷以及其解决办法
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- 【转】39个让你受益的HTML5教程
闲话少说,本文作者为大家收集了网上学习HTML5的资源,期望它们可以帮助大家更好地学习HTML5. 好人啊! 不过,作者原来说的40个只有39个,因为第5个和第8个是重复的. 原文在此! 1. 五分钟 ...
- C#开发微信门户及应用(39)--使用微信JSSDK实现签到的功能
随着微信开逐步开放更多JSSDK的接口,我们可以利用自定义网页的方式来调用更多微信的接口,实现我们更加丰富的界面功能和效果,例如我们可以在页面中调用各种手机的硬件来获取信息,如摄像头拍照,GPS信息. ...
- CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果
CSharpGL(39)GLSL光照示例:鼠标拖动太阳(光源)观察平行光的漫反射和镜面反射效果 开始 一图抵千言.首先来看鼠标拖动太阳(光源)的情形. 然后是鼠标拖拽旋转模型的情形. 然后我们移动摄像 ...
- 外边距塌陷之clearance
在一个BFC中,垂直方向上相邻的块级盒子产生外边距塌陷,本文要说一个特殊的外边距塌陷情况,即当垂直方向上,两个块级盒子之间有个浮动元素相隔时,这个时候会产生什么样的效果呢? .outer{ overf ...
- 抱歉!15:44-16:39阿里云RDS故障造成全站不能正常访问
非常非常抱歉!2016年3月7日15:44-16:39,由于阿里云RDS(云数据库)故障,造成全站不能正常访问,给您带来了很大很大的麻烦,恳请您的谅解! 故障是在15:44开始出现的,应用日志中出现大 ...
随机推荐
- jquery 获取所有父元素
最终结果: 代码: <!DOCTYPE html> <html> <head> <style> b, span, p, html body { padd ...
- Smarty的模板中不允许PHP的代码?
/****************************************************************************** * Smarty的模板中不允许PHP的代 ...
- weinre
https://www.cnblogs.com/diva/p/3995674.html
- 【java规则引擎】模拟rete算法的网络节点以及匹配过程
转载请注明:http://www.cnblogs.com/shangxiaofei/p/6340655.html 本文只用于理解rete算法,通过一个规则的编译成的网络结构,以及匹配过程去理解rete ...
- ubuntu下vi文本后出现不正常的情况
安装vim full版本由于Ubuntu预安装的是tiny版本,所以会导致我们在使用上的产生上述的不便.但是,我们安装了vim的full版本之后,键盘的所有键在vi下就很正常了.首先,要先卸掉旧版的v ...
- Makefile生成
安装:sudo yum install automake使用: 1 运行autoscan生成两个文件:autoscan.log和configure.scan.将configure.scan重命名为co ...
- Azure通过Vnet Peering和用户自定义路由(UDR)实现hub-spoken连接
Azure的Vnet Peering可以把Azure中不同的Vnet连接起来的技术.底层是通过对NVGRE的租户标签进行修改,实现了不同租户间的互通.这种技术非常类似传统网络中MPLS/VPN不同租户 ...
- Angular5学习笔记 - 集成Bootstrap、Jquery、Tether(三)
一.添加配置 cnpm i bootstrap jquery tether --save 添加后效果 二.配置添加样式和js的引用 打开.angular-cli.json文件,在styles和scri ...
- 蓝桥杯 基础练习 BASIC-23 芯片测试
基础练习 芯片测试 时间限制:1.0s 内存限制:512.0MB 问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多. 每个芯片都能用来测试其他芯片.用好芯片测试其他芯片时, ...
- Mongodb 5节点异地两中心故障转移恢复测试案例
Mongodb5节点异地两中心故障转移恢复测试案例 架构方式:5节点,主中心(2数据1仲裁),备中心(1数据1仲裁) 1基本情况 操作系统:Red Hat Enterprise Linux Serve ...