题意:给定一个n*m的方阵,第i行第j列的高度为a[i][j],问除了下底面之外其余五面的总表面积
n<=50,0<=a[i][j]<=1000
思路:队友写的,抱大腿
考虑当前方格比周围四格高多少即可
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 #define LL long long 5 const int maxn=55; 6 int a[maxn][maxn]; 7 int dx[4]={1,0,-1,0}; 8 int dy[4]={0,1,0,-1}; 9 int main() 10 { 11 int T; 12 scanf("%d",&T); 13 while(T--) 14 { 15 int n,m; 16 memset(a,0,sizeof(a)); 17 scanf("%d%d",&n,&m); 18 for(int i=1;i<=n;i++) 19 for(int j=1;j<=m;j++) 20 scanf("%d",&a[i][j]); 21 int sum=0; 22 for(int i=1;i<=n;i++) 23 for(int j=1;j<=m;j++) 24 { 25 if(!a[i][j]) 26 continue; 27 sum++; 28 for(int k=0;k<4;k++) 29 { 30 int x=dx[k]+i; 31 int y=dy[k]+j; 32 if(a[x][y]<a[i][j]) 33 sum+=a[i][j]-a[x][y]; 34 } 35 } 36 printf("%d ",sum); 37 } 38 }