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开始出现的,应用日志中出现大 ...
随机推荐
- hdu-1102-Constructing Roads(Prim算法模板)
题目链接 /* Name:hdu-1102-Constructing Roads Copyright: Author: Date: 2018/4/18 9:35:08 Description: pr ...
- Project://Meeting_Room
models from django.db import models from django.contrib.auth.models import AbstractUser class UserIn ...
- 机器学习敲门砖:任何人都能看懂的TensorFlow介绍
机器学习敲门砖:任何人都能看懂的TensorFlow介绍 http://www.jiqizhixin.com/article/1440
- html 常用代码块
解决外边框不计入div尺寸的代码-moz-box-sizing: border-box;box-sizing: border-box;-webkit-box-sizing: border-box; 手 ...
- Redis底层探秘(一):简单动态字符串(SDS)
redis是我们使用非常多的一种缓存技术,他的性能极高,读的速度是110000次/s,写的速度是81000次/s.这么高的性能背后,到底是怎么样的实现在支撑,这个系列的文章,我们一起去看看. redi ...
- LeetCode Distribute Candies
原题链接在这里:https://leetcode.com/problems/distribute-candies/#/description 题目: Given an integer array wi ...
- /etc/ntp.conf
摘录一: System:ubuntu10.04 配置文件路径:/etc/ntp.conf 配置格式:关键字(如server) 参数(如prefer) 以换行为结束,所以一个配置不能占多行. ...
- [转]移动H5前端性能优化指南
移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...
- 感知机学习算法Java实现
感知机学习算法Java实现. Perceptron类用于实现感知机, 其中的perceptronOriginal()方法用于实现感知机学习算法的原始形式: perceptronAnother()方法用 ...
- Azure CLI的Query
Azure CLI 2.0是基于Python的命令行.其命令直观,使用非常方便. 其输出有四种模式: --output -o : Output format. Allowed values: json ...