1374Problem D:正方体积木

//============================================================================
// Name        : 1374.cpp
// Author      : FnLock
// Version     :
// Copyright   : 木有版权
// Description : Hello World in C++, Ansi-style
//============================================================================

/*  

1 2 3 5
0 5 7 0
0 1 1 0
2 1 0 1
 * */

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    while(n--)
    {
        int a,b;
        int area = 0;
        cin >> a >> b;
        int arr[a][b];
        //  输入数组
        for(int i=0; i<a; i++)
        {
            for(int j=0; j<b; j++)
            {
                cin >> arr[i][j];
            }
        }
        //  遍历数组
        for(int i=0; i<a; i++)
        {
            for(int j=0; j<b; j++)
            {
                //  第一种情况:该处无方块
                if(arr[i][j]==0)
                {
                    continue;
                }
                //  第二种情况:该处有方块
                else
                {
                    //  求处方块漏出的面积

                    //  上面
                    area = area+1;
                    //  前面
                    if(i==a-1)
                    {
                        area += arr[i][j] * 1;
                    }
                    else if(i+1<a&&arr[i+1][j] >= arr[i][j])
                    {
                        area +=0;
                    }
                    else
                    {
                        area += arr[i][j]-arr[i+1][j];
                    }
                    //  后面
                    if(i==0)
                    {
                        area += arr[i][j];
                    }
                    else if(i-1>=0&&arr[i-1][j] >= arr[i][j])
                    {
                        area +=0;
                    }
                    else
                    {
                        area += arr[i][j]-arr[i-1][j];
                    }
                    //  左面
                    if(j==0)
                    {
                        area += arr[i][j];
                    }
                    else if(j-1>=0&&arr[i][j-1]>=arr[i][j])
                    {
                        area += 0;
                    }
                    else
                    {
                        area += arr[i][j]-arr[i][j-1];
                    }
                    //  右面
                    if(j==b-1)
                    {
                        area += arr[i][j];
                    }
                    else if(j+1<b&&arr[i][j+1]>=arr[i][j])
                    {
                        area += 0;
                    }
                    else
                    {
                        area += arr[i][j]-arr[i][j+1];
                    }
                }
            }
        }
        cout << area << endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值