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开始出现的,应用日志中出现大 ...
随机推荐
- Dev c++在新建文件中插入文件头
在菜单栏中依次点击Tools->Editor Options->Snippets->Default Source 勾选Insert the following code into e ...
- BEC translation exercise 7
在挑选时我们完全出自疏忽而漏过了这篇短文.In making the selection we passed this short piece by quite inadvertently. we l ...
- Linux运维工程师中级面试题
1.解释top命令和vmstat命令 2.请写出iptables语句 3.mysql高可用方案有哪些?mysql备份方案有哪些?有什么缺点? 4.写出Apache 2.x的两种工作模式,以及各自的工作 ...
- bzoj 5016 一个简单的询问
THUWC 考了莫队(这个应该可以说吧) 然而不会莫队,签到失败,所以找到了一道长得差不多的题写一写 为什么这么长时间都没有发现这道题(半恼 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问 ...
- ZOJ2112 Dynamic Rankings (线段树套平衡树)(主席树)
The Company Dynamic Rankings has developed a new kind of computer that is no longer satisfied with t ...
- [HihoCoder1413]Rikka with String
vjudge 题意 给你一个串,问你把每个位置的字符替换成#后串中有多少本质不同的子串. \(n\le 3*10^5\) sol 首先可以计算出原串里面有多少本质不同的子串.显然就是\(\sum_{i ...
- ShadowGun 图形技术分析
https://zhuanlan.zhihu.com/p/27966138 ShadowGun虽然是2011年的移动平台的游戏demo,但是里面的很多优化技巧到现在来看都是很值得学习的,毕竟是上过西瓜 ...
- hl7消息中和时间有关的字段的格式
hl7消息中有许多segment(段)包含时间类型的Field.常用的MSH, EVN, PID中的时间字段及其格式为: 1. MSH-7, Date/time Of Message为yyyyMMdd ...
- 蓝桥杯 算法训练 ALGO-150 6-1 递归求二项式系数值
算法训练 6-1 递归求二项式系数值 时间限制:10.0s 内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例.3 10 样例输出 与上面的样例输入对应的输出. 数据 ...
- 网络监控之一:ss(Socket Statistics)
ss是Socket Statistics的缩写. 顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的 ...