题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3234
题意:求长方体交的表面积。
思路:flood-fill
const int N=205;int f[N][N][N];bool visit[N][N][N];int n;int dx[]={1,-1,0,0,0,0};int dy[]={0,0,1,-1,0,0};int dz[]={0,0,0,0,1,-1};queue> > Q;int main(){ n=getInt(); int i; int maxX=0,maxY=0,maxZ=0; int minX=222,minY=222,minZ=222; for(i=1;i<=n;i++) { int x1=getInt(),y1=getInt(),z1=getInt(); int x2=getInt(),y2=getInt(),z2=getInt(); x1++; y1++; z1++; x2++; y2++; z2++; f[x1][y1][z1]++; f[x1][y1][z2]--; f[x1][y2][z1]--; f[x2][y1][z1]--; f[x2][y2][z1]++; f[x2][y1][z2]++; f[x1][y2][z2]++; f[x2][y2][z2]--; minX=min(minX,x1); minY=min(minY,y1); minZ=min(minZ,z1); maxX=max(maxX,x2+2); maxY=max(maxY,y2+2); maxZ=max(maxZ,z2+2); } int j,k; for(i=minX;i<=maxX;i++) for(j=minY;j<=maxY;j++) for(k=minZ;k<=maxZ;k++) { f[i][j][k]+=f[i-1][j][k]+f[i][j-1][k]+f[i][j][k-1]; f[i][j][k]-=f[i-1][j-1][k]+f[i-1][j][k-1]+f[i][j-1][k-1]; f[i][j][k]+=f[i-1][j-1][k-1]; } Q.push(MP(maxX,MP(maxY,maxZ))); visit[maxX][maxY][maxZ]=1; int ans=0; while(!Q.empty()) { int x=Q.front().first; int y=Q.front().second.first; int z=Q.front().second.second; Q.pop(); for(i=0;i<6;i++) { int xx=x+dx[i]; int yy=y+dy[i]; int zz=z+dz[i]; if(xx>=minX-1&&xx<=maxX&&yy>=minY-1&&yy<=maxY&&zz>=minZ-1&&zz<=maxZ&&!visit[xx][yy][zz]) { if(f[xx][yy][zz]) ans++; else Q.push(MP(xx,MP(yy,zz))),visit[xx][yy][zz]=1; } } } printf("%d\n",ans);}