team2012-E1-mysol-0016

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

{{{
/* 解题报告 //

L * W * H 的三维网格,每个格子有一个初值
你可以做任意次操作,每次选择相邻两个格子,同加或同减任意的值
问最终能否让格子里的数字都变为 0

如果把格子像棋盘那样黑白染色,可以发现答案为 Yes 必要条件:
黑格里的数字之和必须等于白格里的数字之和
原因很简单,每次操作会同时改变一个黑格和一个白格,所以它们的和必须相等

另外比如 ABCDEF 六个连续的格子
在做了 AB += x, BC -= x, CD += x, DE -= x, EF += x 这五个操作后
最终的实际效果就是 AF += x,可以发现,通过操作的传递
可以让任意的一个黑格和一个白格同加或同减任意的值
或是让任意的两个黑格或两个白格一个格子加一个格子减任意的值

这意味着,只要黑格里的数字之和必须等于白格里的数字之和,答案就是 Yes

// By 猛犸也钻地 @ 2012.07.22 */
}}}

{{{
#include <cstdio>
using namespace std;

int main(){
    int x,y,z;
    while(scanf("%d%d%d",&x,&y,&z)==3){
        int c,sum[2]={};
        for(int i=0;i<x;i++)
        for(int j=0;j<y;j++)
        for(int k=0;k<z;k++){
            scanf("%d",&c);
            sum[(i^j^k)&1]+=c;
        }
        puts(sum[0]==sum[1]?"Yes":"No");
    }
}
}}}
/* 解题报告 //
L * W * H 的三维网格,每个格子有一个初值
你可以做任意次操作,每次选择相邻两个格子,同加或同减任意的值
问最终能否让格子里的数字都变为 0
如果把格子像棋盘那样黑白染色,可以发现答案为 Yes 必要条件:
黑格里的数字之和必须等于白格里的数字之和
原因很简单,每次操作会同时改变一个黑格和一个白格,所以它们的和必须相等
另外比如 ABCDEF 六个连续的格子
在做了 AB += x, BC -= x, CD += x, DE -= x, EF += x 这五个操作后
最终的实际效果就是 AF += x,可以发现,通过操作的传递
可以让任意的一个黑格和一个白格同加或同减任意的值
或是让任意的两个黑格或两个白格一个格子加一个格子减任意的值
这意味着,只要黑格里的数字之和必须等于白格里的数字之和,答案就是 Yes
// By 猛犸也钻地 @ 2012.07.22 */
#include <cstdio>
using namespace std;
int main(){
    int x,y,z;
    while(scanf("%d%d%d",&x,&y,&z)==3){
        int c,sum[2]={};
        for(int i=0;i<x;i++)
        for(int j=0;j<y;j++)
        for(int k=0;k<z;k++){
            scanf("%d",&c);
            sum[(i^j^k)&1]+=c;
        }
        puts(sum[0]==sum[1]?"Yes":"No");
    }
}