杭电ACM——6518,Clumsy Keke(暴力+思维)

突破口:开一个三维数组,模拟三维直角坐标系,详见代码。

代码如下:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
typedef long long ll;
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=1e2+5;
int s[maxn][maxn][maxn];
int main()
{
    int x,y,z,i,j,k;
    int sum;
    while(~scanf("%d%d%d",&x,&y,&z))
    {
        sum=0;
        for(i=0;i<=x;i++)
            for(j=0;j<=y;j++)
                for(k=0;k<=z;k++)
                    s[i][j][k]=0;
        for(i=1;i<=x;i++)
            for(j=1;j<=y;j++)
            {
                scanf("%d",&s[i][j][0]);
                if(s[i][j][0]==1)	//等于1说明在这个位置有小正方形的投影,就将s[i,j,1~z]全部+1(相当于过该点画一条直线垂直于xOy)
                    for(k=1;k<=z;k++)
                        s[i][j][k]++;
            }
        for(i=1;i<=y;i++)
            for(j=1;j<=z;j++)
            {
                scanf("%d",&s[0][i][j]);
                if(s[0][i][j]==1)	//等于1说明在这个位置有小正方形的投影,就将s[1~i,j,z]全部+1(相当于过该点画一条直线垂直于yOz)
                    for(k=1;k<=x;k++)
                        s[k][i][j]++;
            }
        for(i=1;i<=z;i++)
            for(j=1;j<=x;j++)
            {
                scanf("%d",&s[j][0][i]);	//等于1说明在这个位置有小正方形的投影,就将s[ij,1~y,z]全部+1相当于过该点画一条直线垂直于xOz)
                if(s[j][0][i]==1)
                    for(k=1;k<=y;k++)
                        s[j][k][i]++;
            }
        for(i=0;i<=x;i++)
            for(j=0;j<=y;j++)
                for(k=0;k<=z;k++)
                    if(s[i][j][k]==3)	//只有当这个位置的值为3时,才有小正方形(即为三条直线相交之处)
                        sum++;
        printf("%d\n",sum);
    }
    return 0;
}

Tips:这道题要特别注意输入,输入一乱,全盘皆输。

猜你喜欢

转载自blog.csdn.net/shamansi99/article/details/89457832
今日推荐