1091.Acute Stroke
来源:互联网 发布:oppo官方软件商店 编辑:程序博客网 时间:2024/04/27 18:02
【题意】
给出一个三维空间的 01 矩阵,算出所有超出阈值的相连的1的数目
【思路】
看到题目描述马上想到了并查集,不过我之前的题目都没用并查集写过,于是有点手生,好在最后还是成功AC,正好练练手了
【注意点】
在归并集合时6个方向只要找坐标减小的3个方向即可,多找了没必要而且会超时
#include <iostream>#include <vector>#include <map>using namespace std;vector<vector<vector<bool>>> valid;vector<vector<vector<int>>> pre;int m,n,l,t;void init(){for(int i=0; i<l; i++){for(int j=0; j<m; j++){for(int k=0; k<n; k++){pre[i][j][k] = i*m*n+j*n+k;}}}}int root(int a, int b, int c){if(a*m*n+b*n+c!=pre[a][b][c]){int x,y,z;z = pre[a][b][c]/(m*n);x = (pre[a][b][c]%(m*n))/n;y = (pre[a][b][c])%n;pre[a][b][c] = root(z,x,y);}return pre[a][b][c];}void merge(int a1, int b1, int c1, int a2, int b2, int c2){int x[2],y[2],z[2],roots[2];roots[0] = root(a1,b1,c1);roots[1] = root(a2,b2,c2);for(int i=0; i<2; i++){z[i] = roots[i]/(m*n);x[i] = (roots[i]%(m*n))/n;y[i] = roots[i]%n;}if(roots[0]!=roots[1]){pre[z[0]][x[0]][y[0]] = pre[z[1]][x[1]][y[1]];}}int main(int argc, char const *argv[]){cin >> m >> n >> l >> t;pre.resize(l,vector<vector<int>>(m,vector<int>(n)));valid.assign(l,vector<vector<bool>>(m,vector<bool>(n,0)));for(int i=0; i<l; i++){for(int j=0; j<m; j++){for(int k=0; k<n; k++){cin >> pre[i][j][k];if(pre[i][j][k]){valid[i][j][k] = 1;}}}}init();for(int i=0; i<l; i++){for(int j=0; j<m; j++){for(int k=0; k<n; k++){if(valid[i][j][k]){if(i>=1 && valid[i-1][j][k]){merge(i,j,k,i-1,j,k);}if(j>=1 && valid[i][j-1][k]){merge(i,j,k,i,j-1,k);}if(k>=1 && valid[i][j][k-1]){merge(i,j,k,i,j,k-1);}}}}}map<int,int> volumes;for(int i=0; i<l; i++){for(int j=0; j<m; j++){for(int k=0; k<n; k++){if(valid[i][j][k]){volumes[root(i,j,k)]++;}}}}int cnt = 0;for(map<int,int>::iterator it=volumes.begin(); it!=volumes.end(); it++){if(it->second>=t){cnt += it->second;}}cout << cnt;system("pause");return 0;}
0 0
- 1091. Acute Stroke
- PAT 1091. Acute Stroke
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091.Acute Stroke
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke(30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke (30)
- 1091. Acute Stroke
- Linux下移植OpenCV + Qt 到ARM(Tiny6410)总结
- servlet处理request和response中文乱码
- C#中Label设置为透明
- hdoj 1102 Constructing Roads 【最小生成树】
- OpenCV数据读写操作
- 1091.Acute Stroke
- apue学习第十八天——从哲学家就餐问题看死锁
- C语言‘指针’笔记
- OpenCV学习笔记 cv.Mat 与 .txt 文件数据的读写操作
- ubuntu的终端命令(收集)
- Mat - 基本图像容器
- JVM 自定义的类加载器的实现和使用
- 数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行
- 初始EF