5 solutions

  • 4
    @ 2023-10-6 10:28:10
    #include <bits/stdc++.h>
    using namespace std;
    bool a[25][25][25];
    int main(int argc, char **argv){
    	int w,x,h,q,x1,x2,y1,y2,z1,z2,cnt = 0;
    	scanf("%d %d %d\n%d",&w,&x,&h,&q);
    	while (q--){
    		scanf("%d %d %d %d %d %d",&x1,&y1,&z1,&x2,&y2,&z2);
    		for (int i = x1;i <= x2;i++){
    			for (int j = y1;j <= y2;j++){
    				for (int k = z1;k <= z2;k++){
    					a[i][j][k] = 1;
    				}
    			}
    		}
    	}
    	for (int i = 1;i <= w;i++){
    		for (int j = 1;j <= x;j++){
    			for (int k = 1;k <= h;k++){
    				if(!a[i][j][k]){
    					cnt++;
    				}
    			}
    		}
    	}
    	cout << cnt;
    	return 0;
    }
    /*
    [[[2,1,0,0],
    [1,1,0,0],
    [0,0,0,0],
    [0,0,0,0]
    ],
    [[1,1,0,0],
    [1,2,0,0],
    [0,0,0,0],
    [0,0,0,0]
    ],
    [[0,0,0,0],
    [0,0,0,0],
    [0,0,0,0],
    [0,0,0,0]
    ],
    [[0,0,0,0],
    [0,0,0,0],
    [0,0,0,0],
    [0,0,0,0]
    ]]
    */
    
    • 2
      @ 2023-10-2 11:33:48
      #include <iostream>
      using namespace std;
      int w,x,h,ans,q;
      int a[21][21][21];//立方体模型
      int main()
      {
          cin>>w>>x>>h>>q;
          while(q--)
          {
              int x1,y1,z1,x2,y2,z2;
              cin>>x1>>y1>>z1>>x2>>y2>>z2;//输入
              for(int i=min(x1,x2); i<=max(x1,x2); i++)
              {
                  for(int j=min(y1,y2); j<=max(y1,y2); j++)
                  {
                      for(int k=min(z1,z2); k<=max(z1,z2); k++)
                      {
                          a[i][j][k]=1; //标记每个已经被切割过的点
                      }
                  }
              }
          }
          for(int i=1; i<=w; i++)
          {
              for(int j=1; j<=x; j++)
              {
                  for(int k=1; k<=h; k++)
                  {
                      if(a[i][j][k]==0)
                      {
                          ans++;//判断是否切割
                      }
                  }
              }
          }
          cout<<ans<<endl;//输出
          return 0;//完结撒花
      }
      
      • @ 2023-10-6 10:20:42

        中间切割不用min和max,因为x1<x2,y1<y2,z1<z3

    • 0
      @ 2024-11-22 19:28:02
      #include <bits/stdc++.h>
      using namespace std;
      int xxx,yyy,zzz,sum=0,q;
      bool ppp[25][25][25];
      int main(){
      	int x1,x2,y1,y2,z1,z2;
          cin>>xxx>>yyy>>zzz>>q;
          for(int i=0;i<q;i++){
          	cin>>x1>>y1>>z1>>x2>>y2>>z2;
          	for(int x=x1-1;x<x2;x++)for(int y=y1-1;y<y2;y++)for(int z=z1-1;z<z2;z++)ppp[x][y][z]=1;
      	}
      	for(int x=0;x<xxx;x++)for(int y=0;y<yyy;y++)for(int z=0;z<zzz;z++)if(ppp[x][y][z]==0)sum++;
      	cout<<sum;
          return 0;
      }
      
      • 0
        @ 2023-11-29 16:27:00

        纯暴力

        #include<iostream>
        using namespace std;
        int main(){
        	int w;
        	int x;
        	int h;
        	int q;
        	cin
        	>>w
        	>>x
        	>>h
        	>>q;
        	bool a[w+1][x+1][h+1];
        	for(int i=1;i<w+1;i++)
        	for(int j=1;j<x+1;j++)
        	for(int l=1;l<h+1;l++)
        	a[i][j][l]=1;
        	for(int i=0;i<q;i++){
        		int x1;
        		int x2;
        		int y1;
        		int y2;
        		int z1;
        		int z2;
        		cin
        		>>x1
        		>>y1
        		>>z1
        		>>x2
        		>>y2
        		>>z2;
        		for(int i=x1;i<=x2;i++)
        		for(int j=y1;j<=y2;j++)
        		for(int l=z1;l<=z2;l++)
        		a[i][j][l]=0;
        	}
        	int ans=0;
        	for(int i=1;i<w+1;i++)
        	for(int j=1;j<x+1;j++)
        	for(int l=1;l<h+1;l++)
        	if(a[i][j][l]==1)
        	ans++;
        	cout<<ans;
        }
        
        • 0
          @ 2023-11-2 22:14:02

          #include <bits/stdc++.h> using namespace std; int a[30][30][30]; int main() { int w,x,y,q; cin>>w>>x>>y; cin>>q; int s=0; for(int i=0;i<w;i++){ for(int j=0;j<x;j++){ for(int k=0;k<y;k++){ a[w][x][y]=0; } } } for(int i=1;i<=q;i++){ int x1,y1,z1,x2,y2,z2; cin>>x1>>y1>>z1>>x2>>y2>>z2; for(int j=min(x1,x2);j<=max(x1,x2);j++){ for(int j1=min(y1,y2);j1<=max(y1,y2);j1++){ for(int j2=min(z1,z2);j2<=max(z1,z2);j2++){ if(a[j][j1][j2]!=1){ s++; } a[j][j1][j2]=1;

          }
          		}
          	}
          	}
          	
          cout<<w*x*y-s;
          return 0;
          

          }

          • 1

          Information

          ID
          902
          Time
          1000ms
          Memory
          125MiB
          Difficulty
          5
          Tags
          (None)
          # Submissions
          84
          Accepted
          35
          Uploaded By