zoukankan      html  css  js  c++  java
  • COJ 1697:模拟

    题意:给一个边长A B C的长方体,求取出N个1*1*1的正方体后所剩几何体的表面积(包括内部)

    思路:取出正方体后对原几何体表面积的影响,取决于取这个正方体前,其与原几何体接触的面数

    比如说该正方体取出前有4个面和原几何体有联系,那取出后表面积+2

    这样可以看到面数为0 1 2 3 4 5 6,分别对应表面积变化-6 -4 -2 0 2 4 6

    以此考虑就好

    #include"cstdio"
    #include"queue"
    #include"iostream"
    using namespace std;
    const int N = 2005;
    struct node{
        long long x,y,z;
        node(){}
        node(long long a,long long b,long long c):x(a),y(b),z(c){}
    }p[N];
     
    int s[7];
    int pre[N];
    long long a,b,c,n;
     
    int get_(node t){
        int ans=6;
        if(!t.x) ans--;
        if(!t.y) ans--;
        if(!t.z) ans--;
        if(t.x==a-1) ans--;
        if(t.y==b-1) ans--;
        if(t.z==c-1) ans--;
        return ans;
    }
     
    bool check(node a,node b){
        if(a.x==b.x&&a.y==b.y&&(a.z-b.z==1||a.z-b.z==-1)) return true;
        if(a.x==b.x&&a.z==b.z&&(a.y-b.y==1||a.y-b.y==-1)) return true;
        if(a.z==b.z&&a.y==b.y&&(a.x-b.x==1||a.x-b.x==-1)) return true;
        return false;
    }
     
    int main(){
        //freopen("in.txt","r",stdin);
        s[0]=-6;
        for(int i=1;i<=6;i++) s[i]=s[i-1]+2;
        while(~scanf("%lld%lld%lld%lld",&a,&b,&c,&n)){
            for(int i=0;i<n;i++){
                long long x,y,z;
                scanf("%lld%lld%lld",&x,&y,&z);
                p[i]=node(x,y,z);
            }
     
            long long ans=(a*b+b*c+a*c)*2;
            for(int i=0;i<n;i++) pre[i]=get_(p[i]);
            for(int i=0;i<n;i++){
                for(int j=0;j<i;j++)
                    if(check(p[i],p[j]))
                        pre[i]--;
                ans+=s[pre[i]];
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Java 流(Stream)、文件(File)和IO
    Java集合笔记
    希尔排序
    多线程
    查找算法
    快速排序
    leetcode题解58
    9.回文数
    SonarQube代码质量管理平台安装及使用
    用GitBlit 和 VS GitSourceControlProvider 搭建基于 Http(s) 的 Git 工作平台
  • 原文地址:https://www.cnblogs.com/luxiaoming/p/5276871.html
Copyright © 2011-2022 走看看