[COCI2015]JABUKE
题目大意:
一个$n\times m(n,m\leq500)$的网格图中有若干个标记点,有$q(q\leq10^5)$个操作,每次新加入一个标记点,并询问和新加入点最近的点的距离。
思路:
记录对于每个点$(x,y)$,同一列上在它上面最近的点$u(x,y)$和在它下面最近的点$d(x,y)$。
每次询问时枚举同一行的点的$u(x,j)$和$d(x,j)$,取距离最小值即可,时间复杂度$O(q(n+m))$。
#include<cstdio>
#include<cctype>
#include<climits>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
inline bool isblock(const char &ch) {
return ch=='.'||ch=='x';
}
inline bool getblock() {
register char ch;
while(!isblock(ch=getchar()));
return ch=='x';
}
const int N=;
bool map[N][N];
int n,m,u[N][N],d[N][N];
inline int sqr(const int &x) {
return x*x;
}
inline int dist(const int &x1,const int &y1,const int &x2,const int &y2) {
return sqr(x1-x2)+sqr(y1-y2);
}
inline void update(const int &j) {
for(register int i=,last=-;i<n;i++) {
if(map[i][j]) last=i;
u[i][j]=last;
}
for(register int i=n-,last=-;~i;i--) {
if(map[i][j]) last=i;
d[i][j]=last;
}
}
inline int query(const int &x,const int &y) {
int ans=INT_MAX;
for(register int j=;j<m;j++) {
if(~u[x][j]) ans=std::min(ans,dist(x,y,u[x][j],j));
if(~d[x][j]) ans=std::min(ans,dist(x,y,d[x][j],j));
}
return ans;
}
int main() {
n=getint(),m=getint();
for(register int i=;i<n;i++) {
for(register int j=;j<m;j++) {
map[i][j]=getblock();
}
}
for(register int j=;j<m;j++) {
update(j);
}
for(register int q=getint();q;q--) {
const int x=getint()-,y=getint()-;
printf("%d\n",query(x,y));
map[x][y]=true;
update(y);
}
return ;
}
[COCI2015]JABUKE的更多相关文章
- BZOJ 3881: [Coci2015]Divljak [AC自动机 树链的并]
3881: [Coci2015]Divljak 题意:添加新文本串,询问某个模式串在多少种文本串里出现过 模式串建AC自动机,考虑添加一个文本串,走到的节点记录下来求树链的并 方法是按dfs序排序去重 ...
- BZOJ3810: [Coci2015]Stanovi
3810: [Coci2015]Stanovi Description Input 输入一行,三个整数,n, m, k Output 输出一个数,表示最小不满意度. Sample Input ...
- [COCI2015]COCI
[COCI2015]COCI 题目大意: 有\(n(n\le5\times10^5)\)个人比赛,比赛总共进行\(3\)轮,每一轮得分为\([0,650]\)内的整数.现在已经得知每个人前两轮的成绩. ...
- [Coci2015]Kamp
Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举行聚会. 聚会结束后需要一辆车从举行聚会的这点出发 ...
- BZOJ 3881: [Coci2015]Divljak
3881: [Coci2015]Divljak Time Limit: 20 Sec Memory Limit: 768 MBSubmit: 553 Solved: 176[Submit][Sta ...
- 【BZOJ3881】[Coci2015]Divljak fail树+树链的并
[BZOJ3881][Coci2015]Divljak Description Alice有n个字符串S_1,S_2...S_n,Bob有一个字符串集合T,一开始集合是空的. 接下来会发生q个操作,操 ...
- 【BZOJ3743】[Coci2015]Kamp 树形DP
[BZOJ3743][Coci2015]Kamp Description 一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的. 有K个人(分布在K个不同的点)要集中到一个点举 ...
- 【BZOJ3745】[Coci2015]Norma cdq分治
[BZOJ3745][Coci2015]Norma Description Input 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output 输出答案对10^9取模后的结果. ...
- bzoj3743 [Coci2015]Kamp 常州模拟赛d6t2
3743: [Coci2015]Kamp Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 484 Solved: 229[Submit][Status ...
随机推荐
- ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 C: 挂盐水
http://acm.ocrosoft.com/problem.php?cid=1316&pid=2 题目描述 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后滴二滴,停一下:再滴三滴 ...
- Qt-Creator 加入qwt库
qwt是基于Qt的开源图表库 从官网下载qwt的源码 http://sourceforge.jp/projects/sfnet_qwt/downloads/qwt/6.1.0/qwt-6.1.0.ta ...
- kvm竟然抓不到kvm的tracepoint
今天终于把kvm给搭起来了,打开了host机的tracepoint竟然一个都没有抓到,这是咋回事? 难道kvm的东西只有在启动的时候才会被抓到? 虚拟出来一块内存一块CPU,虚拟出来一个内存.感觉都好 ...
- [洛谷P2634][国家集训队]聪聪可可
题目大意:给你一棵树,随机选两个点,求它们之间路径长度是$3$的倍数的概率 题解:点分治,求出当前状态的重心,然后求出经过重心的答案,接着分治每棵子树.注意考虑重复计算的情况 卡点:无 C++ Cod ...
- <转自原博客> 可爱的字符串算法们
在非常强又非常关心学弟学妹学习的企鹅学长变态的考纲下,我们无奈中选择一起学习新姿势 first:KMP算法 这是一个小迪更过博客的算法,我就不好意思在这里献丑了,所以献上友链一份:http://rab ...
- 微信支付:回调地址notify_url不能带参数
最近在用Yii2写一个微信商城,在调用微信支付接口时遇到了问题. 支付环节是正常的,微信端能收到支付成功的系统提示,然而回调url始终收不到微信服务器的POST,经过手动测试,回调页面的逻辑也没有问题 ...
- 树(tree)
树(tree) 题目描述 小明正在研究一种砍树游戏.一开始在W列H行的方格上,每一个格子都长着一颗树,格子的行从北到南依次编号,格子的列从西到东依次编号. 小明会砍倒一些树,每砍倒一颗树,树会占据这个 ...
- php56升级后php7 mcrypt_encrypt 报错
mcrypt_encrypt(MCRYPT_BLOWFISH, $passphrase, $data, MCRYPT_MODE_CBC, $iv); openssl_encrypt($data, &q ...
- 转:用VMProtect和ASProtect 的SDK加密应用程序
最近想用VMProtect和ASProtect 的SDK加密一个程序,结果搞了半天没搞成,网上没看到在VC中如何使用VMProtect的SDK加密,于是琢磨了一下,总算成功了,最后有一点点心得,与大家 ...
- Android横竖屏切换生命周期
转自xiaoQLuhttp://www.cnblogs.com/xiaoQLu/p/3324503.html 开源帮助android获得了飞速的发展,开源也导致了数不清的碎片问题.android的前期 ...