[C++] 純文本查看 復制代碼
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int t;
int x,y,z;
int list[100][100];
bool eat[100][100];
int main()
{
scanf("%d",&t);
while(t--)
{
//init
memset(eat,0,sizeof(eat));
//inputs
scanf("%d%d%d", &x, &y,&z);
for(int i = 0 ; i < x ; i++)
for(int j = 0 ; j < y ; j++)
scanf("%d",&list[j]);
for(int i = 0 ; i < x ; i++)
for(int j = 0 ; j < y ; j++)
if(list[j] == 1)
{
eat[j] = true;
if(i > 0)
eat[i-1][j] = true;
if(j > 0)
eat[j-1] = true;
if(i < x-1)
eat[i+1][j] = true;
if(j < y-1)
eat[j+1] = true;
}
int cost = 0;
for(int i = 0 ; i < x ; i++)
for(int j = 0 ; j < y ; j++)
if(eat[j])
cost++;
printf("%d\n",x*y*z-cost*3);
}
return 0;
}
[C++] 純文本查看 復制代碼
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int map[52][52];
int dx[4]={0,0,1,-1};
int dy[4]={-1,1,0,0};
int main()
{
int T;
int N,M,K,ans;
cin>>T;
while(T--)
{
memset(map,0,sizeof(map));
ans=0;
cin>>N>>M>>K;
for(int i=1;i<=N;++i)
for(int j=1;j<=M;++j)
cin>>map[j];
for(int i=1;i<=N;++i)
{
for(int j=1;j<=M;++j)
{
if(map[j]==1)ans++;
else
{
bool f=false;
for(int k=0;k<4;++k)
if(map[i+dx[k]][j+dy[k]]==1)
f=true;
if(f)ans++;
}
}
cout<<endl;
}
cout<<N*M*K-ans*min(ans,3)<<endl;
}
}