题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=318
题目大意:一个正方体有8个顶点,正方体的顶点上面分别有粒子(可以为0,就是没有)。接下来进行的变换就是在正方体的一条边上的两个顶点可以同时加减任意一个数,但必须保证加减的那个数要是同一个数,假如能够变换成每个顶点上的粒子都为0,则输出YES,否则输出NO。
思路:如果想明白了,这题算是一道水题了。用逆推的思想,假如能够经过一系列变化能够使每个顶点上的粒子都为0,那么在最后一步面临的情况一定的一条边上的两个顶点的粒子数目相等(无论最后两个顶点的粒子是否为0)。再逆推第二步,第三步。。。。。,最终推回最开始的状态,也就是题目给出的数据。如果能推出,则表示能够变换成每个顶点上的粒子都为0。代码就简单了。
代码:
#include<stdio.h>
int main()
{
int n,a,b,c,d,e,f,g,h;
scanf("%d",&n);
while(n--)
{
scanf("%d %d %d %d %d %d %d %d",&a,&b,&c,&d,&e,&f,&g,&h);
b=b-a;
c=c-b;
d=d-c;
f=f-e;
g=g-f;
h=h-g;
if(d==h)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}