prow2012-A3-0016
从 Trac 迁移的文章
这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。
原文章内容如下:
题意:有一个L * W * H个立方体拼成的长方体,每个cube上有一个数字,每次可以将共面相邻两个数加减去一个相同的数,判断最后能否把所有cubes上的数变成0.
根据数值变化的传递性,直接把3维的数字推到2维,再把2维推到1维,然后推到0,0点,如果最后结果是0,就YES。
{{{
#include <iostream>
#include <vector>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
using namespace std;
int X,Y,Z,mat[4][4][4],i,j,k;
int main(){
while(scanf("%d%d%d",&X,&Y,&Z)!=EOF){
for (i=0;i<X;i++)
for (j=0;j<Y;j++)
for (k=0;k<Z;k++)
scanf("%d",&mat[i][j][k]);
for (i=0;i<X;i++)
for (j=0;j<Y;j++)
{
for (k=Z-1;k>0;k--)
mat[i][j][k-1]-=mat[i][j][k];
}
for (i=0;i<X;i++)
for (j=Y-1;j>0;j--)
mat[i][j-1][0]-=mat[i][j][0];
for (i=X-1;i>0;i--)
mat[i-1][0][0]-=mat[i][0][0];
if (mat[0][0][0]==0) printf("Yes\n");
else printf("No\n");
}
}
}}}
题意:有一个L * W * H个立方体拼成的长方体,每个cube上有一个数字,每次可以将共面相邻两个数加减去一个相同的数,判断最后能否把所有cubes上的数变成0.
根据数值变化的传递性,直接把3维的数字推到2维,再把2维推到1维,然后推到0,0点,如果最后结果是0,就YES。
#include <iostream>
#include <vector>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
using namespace std;
int X,Y,Z,mat[4][4][4],i,j,k;
int main(){
while(scanf("%d%d%d",&X,&Y,&Z)!=EOF){
for (i=0;i<X;i++)
for (j=0;j<Y;j++)
for (k=0;k<Z;k++)
scanf("%d",&mat[i][j][k]);
for (i=0;i<X;i++)
for (j=0;j<Y;j++)
{
for (k=Z-1;k>0;k--)
mat[i][j][k-1]-=mat[i][j][k];
}
for (i=0;i<X;i++)
for (j=Y-1;j>0;j--)
mat[i][j-1][0]-=mat[i][j][0];
for (i=X-1;i>0;i--)
mat[i-1][0][0]-=mat[i][0][0];
if (mat[0][0][0]==0) printf("Yes\n");
else printf("No\n");
}
}