2 条题解

  • 0
    @ 2024-5-7 19:13:34
    #include <stdio.h>
    int main()
    {
        int a,b,c;
        int v[21][21][21]={0};
        scanf("%d%d%d",&a,&b,&c);
        int i1,i2,i3;
        for(i1=1;i1<=a;i1++)
            for(i2=1;i2<=b;i2++)
                for(i3=1;i3<=c;i3++)
                    v[i1][i2][i3]=1;
        int times,time;
        int x1,x2,y1,y2,z1,z2;
        scanf("%d",&times);
        for(time=1;time<=times;time++)
        {
            scanf("%d%d%d%d%d%d",&x1,&y1,&z1,&x2,&y2,&z2);
            for(i1=x1;i1<=x2;i1++)
                for(i2=y1;i2<=y2;i2++)
                    for(i3=z1;i3<=z2;i3++)
                        v[i1][i2][i3]=0;
        }
        int sum=0;
        for(i1=1;i1<=a;i1++)
            for(i2=1;i2<=b;i2++)
                for(i3=1;i3<=c;i3++)
                    sum+=v[i1][i2][i3];
        printf("%d",sum);
    }
    //有点小抽象,其他都还好
    
    • 0
      @ 2023-8-25 15:54:21

             \ \ \ \ \ \ \ 解释参考注释。

      #include <cstdio>
      
      bool cube[21][21][21];//三维立方体空间
      
      int opCutting(int x1, int y1, int z1, int x2, int y2, int z2){
          //切割操作函数
          for(int i = x1; i <= x2; i++){
              for(int j = y1; j <= y2; j++){
                  for(int k = z1; k <= z2; k++){
                      if(cube[i][j][k]){
                          //如果这部分之前未被切掉(状态为true),则切掉(状态置为false)
                          cube[i][j][k] = false;
                      }
                  }
              }
          }
          return 0;
      }
      
      int opInitCube(int x, int y, int z){
          for(int i = 1; i <= x; i++){
              for(int j = 1; j <= y; j++){
                  for(int k = 1; k <= z; k++){
                      //初始化未切割立方体,全部状态置为true
                      cube[i][j][k] = true;
                  }
              }
          }
          return 0;
      }
      
      int main(){
          int w, x, h, q, x1, y1, z1, x2, y2, z2, ans = 0;
          scanf("%d %d %d", &w, &x, &h);//读入初始立方体参数
          opInitCube(w, x, h);//初始化立方体
          scanf("%d", &q);//读入操作次数
          for(int _ = 1; _ <= q; _++){//切割,启动!
              scanf("%d %d %d %d %d %d", &x1, &y1, &z1, &x2, &y2, &z2);
              opCutting(x1, y1, z1, x2, y2, z2);
          }
          for(int i = 1; i <= w; i++){
              for(int j = 1; j <= x; j++){
                  for(int k = 1; k <= h; k++){
                      //计算还有多少未切割的小方块,即状态为true的格子
                      if(cube[i][j][k]){
                          ans++;
                      }
                  }
              }
          }
          printf("%d", ans);
          return 0;
      }
      
      • 1

      信息

      ID
      99
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      (无)
      递交数
      313
      已通过
      69
      上传者