L-House BuildingMinecraftは建物の表面積を求めます

トピックリンク

題名:

複数の立方体で構成される2次元の建物を作成し、その表面積を見つけます

アイデア:

加算が複雑すぎるため、逆思考減算を使用できます。
ご存知のとおり、キューブには6つの面があります。まず、キューブの数を調べ(cとします)、次に6を掛けてすべての面を取得し、次に2つの部分を減算します。最初の部分は上下、2番目の部分は前後です。約。上下に各位置を解くことができ、各位置は2 * n-1です。ここで、nはこの位置の正方形の数です。
次に、2番目の部分は、この正方形の列の前、後ろ、左、および右です(この正方形の行にaがあると仮定します)。これは、彼の周りの4つの方向を比較して、彼より高い方向があるかどうかを確認します(bと仮定します)。カバーされているaがあり、それよりも短く、bがカバーされています。この列で4方向にカバーされている数値の合計を見つけ、すべてのポイントをトラバースして合計します。最後に6にcを掛けます-これら2つの部分の合計は
役に立ちません。ACコードを参照してください

#include <cstdio>
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;

typedef long long ll;

int  a, b, n, m, c;
int k;
int tr[55][55];

int dx[4] = {
    
    -1, 1, 0, 0};
int dy[4] = {
    
    0, 0, -1, 1};

int judge(int x, int y)
{
    
    
    if(x <= 0 || y <= 0 || x > n || y > m)//就是这个地方,我写了个y < m 然后找了一晚上的错误!!!
        return 0;
    else
        return 1;
}

int sl(int x,int y)
{
    
    
    int sum = 0;
    for(int i = 0; i < 4; i++)
    {
    
    
        if(tr[x + dx[i]][y + dy[i]] >= tr[x][y] && judge(x + dx[i], y + dy[i]))
            sum += tr[x][y];
        else if(tr[x + dx[i]][y + dy[i]] < tr[x][y] && judge(x + dx[i], y + dy[i]))
            sum += tr[x + dx[i]][y + dy[i]];
        else if(judge(x + dx[i], y + dy[i]) == 0)
            sum += 0;
    }
    return sum;
}

int main()
{
    
    
    cin>>a;
    while(a--)
    {
    
    
        k = 0;
        b = 0;
        c = 0;
        cin>>n>>m;
        for(int i = 1; i <= n; i++)
        {
    
    
            for(int j = 1; j <= m; j++)
            {
    
    
                cin>>tr[i][j];
                b += tr[i][j];//求一共多少个小立方体
                if(tr[i][j] != 0)
                    k += 2 * tr[i][j] - 1;//求每个点上下面遮住了几个,加起来
            }
        }
        for(int i = 1; i <= n; i++)
        {
    
    
            for(int j = 1; j <= m; j++)
            {
    
    
                c+=sl(i, j);
            }
        }
        cout<<6 * b - k - c<<endl;
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/weixin_51216553/article/details/110098101