1. 程式人生 > >【HDOJ5538】House Building(計算幾何)

【HDOJ5538】House Building(計算幾何)

for fine tdi ++ spa memset 其余 building while

題意:給定一個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\n",sum); 37 } 38 }

【HDOJ5538】House Building(計算幾何)