[FZYZOJ 2132] Zrn神犇之一起来看流星雨
2015-06-09 17:28
555 查看
P2132 -- Zrn神犇之一起来看流星雨
时间限制:1000MS内存限制:131072KB
Description
Zrn神犇带着妹纸来到异度空间看流星雨。那儿有个矩形的星盘,一共有N*M格,流星雨都会落在那里。只是,那里的流星雨很奇特,都是很有节奏地、成排成排地落下的。每个时刻都会落下一排的流星,它们落在星盘上,形成了一个一个星群。
而Zrn神犇和妹纸对于星群的定义是不一样的。Zrn神犇认为,一颗星星和它周围的四个格子里的星星属于同一个星群。而妹纸认为,一颗星星和它周围的八个格子里的星星都属于同一个星群。
比如在第一个时刻,星盘上可能是这样的:
#include<bits/stdc++.h> using namespace std; int f[2][40000010],r[20001][2001],t[2],n,m,ans[2][20001],k; int getf0(int x) {return f[0][x]==x?x:f[0][x]=getf0(f[0][x]);} int getf1(int x) {return f[1][x]==x?x:f[1][x]=getf1(f[1][x]);} void join0(int a,int b) { int fa=getf0(a),fb=getf0(b); if(fa!=fb) f[0][fa]=fb,t[0]--; } void join1(int a,int b) { int fa=getf1(a),fb=getf1(b); if(fa!=fb) f[1][fa]=fb,t[1]--; } int read() { int x=0; int fx=1; char ch=getchar(); while(ch<'0'||ch>'9') {if(ch=='-') fx=-1; ch=getchar();} while(ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();} return x*fx; } int main() { n=read(),m=read(); for (int i=0;i<n;++i) { for(int j=0;j<m;++j) { char c=getchar(); if(c=='*') { ++k; f[0][k]=f[1][k]=r[i][j]=k; t[0]++,t[1]++; if(j&&r[i][j-1]) { join0(r[i][j],r[i][j-1]); join1(r[i][j],r[i][j-1]); } if(i&&r[i-1][j]) { join0(r[i][j],r[i-1][j]); join1(r[i][j],r[i-1][j]); } if(i&&j&&r[i-1][j-1]) join1(r[i][j],r[i-1][j-1]); if(i&&j+1<m&&r[i-1][j+1]) join1(r[i][j],r[i-1][j+1]); } } getchar(); ans[0][i]=t[0]; ans[1][i]=t[1]; } int T,rx; T=read(); while(T--) { rx=read();rx--; printf("%d %d\n",ans[0][rx],ans[1][rx]); } return 0; }
View Code
最后终于最变态的点优化到0.92s,还加了读入优化,不然就0.98s了吧=-=
相关文章推荐
- 解析GRE阅读中的省略情况
- Java压缩/解压缩二进制文件--http中content-encoding:deflate也可以使用
- 验证码安全问题汇总
- asterisk+dahdi+chan_ss7搭建E1呼叫小型测试环境(二)
- spring 第一篇(1-3):鸟瞰spring蓝图
- 那些在学习iOS开发前就应该知道的事(part 1)
- Hadoop项目实战-用户行为分析之应用概述(一)
- PHP获取站点根目录
- 2015.6.9,正式在CSDN上开博客了!
- SAT写作范文VS评分标准
- mysql Could not initialize master info structure 解决方法
- hessian rpc使用实例
- Android运行cmd抓取tcpdump包并保存本地
- Hello 博客园!
- bzoj 4000 矩阵快速幂优化DP
- [Node.js] Introduction to apiCheck.js
- php 上传图片
- GRE阅读逻辑题
- 我和我的朋友
- IOS 开发学习34 使用webview