Bother
Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 17 Accepted Submission(s) : 14
Problem Description
随着物理学的发展,科学家们发现了越来越多的粒子。有一天,筱莜在做实验的时候发现了一种麻烦的粒子,因为这些粒子必须成对产生或消失。 面对这些粒子,筱莜开始头痛,怎么放置这些粒子才能让他们都消失呢? 经过很多天的努力,筱莜终于设计出了一个实验装置,它是一个的立方体,编号A,B,C,……H,如图所示, [center][img]/data/images/C61-1002-1.JPG[/img][/center] 每个顶点上都有一定数量的“麻烦”子,不同顶点初始的“麻烦”子数量可能不同。每次可以选择两个相邻的顶点,让他们同时产生或者消失。例如:每个照相机里的初始粒子数为1,0,1,0,3,1,0,0,那么一个合法的操作顺序为:EF-,EA-,AD+,AE-,DC-(EF-表示点E、F减少同样数目的粒子,+表示同样数目增加)。这样所有的粒子都消失了。 因为有时给出的粒子数不能全部消失,这事又让筱莜头痛了,现在请你帮助小兔判断一下,给出的粒子最后能不能都消失掉。
Input
多组输入,每组数据为8个数字(int范围内),以-1结束.
Output
如果能使所有粒子都消失,输出“All the seeds can be cleared away!”,否则输出“Sorry,it can't be cleared away!”。
Sample Input
1 0 1 0 3 1 0 0 28 74 11 80 75 30 63 1 -1
Sample Output
All the seeds can be cleared away! Sorry,it can't be cleared away! [hint]我们可以将立方体的8个顶点染成红色和蓝色,要求任意两个相邻的顶点颜色补同。 若A,B,C,D的粒子数分别是a,b,c,d,A,C同色, 我们可以通过运输将C点的粒子都移到A点(先让A,B同时增加c个粒子,然后将B,C同时减少c个粒子, 此时A,B,C,D的粒子为,a+c,b,0,d),这样我们解决这个问题就简单多了。[/hint]
Author
Rabbit
Source
HZIEE 2007 Programming Contest
#include <stdio.h>
#include <stdlib.h> int main()
{
int a[],i,sign;
while()
{
sign=;
for(i=;i<;i++)
{
scanf("%d",&a[i]);
if(a[]==-)
return;
}
if(a[]+a[]+a[]+a[]!=a[]+a[]+a[]+a[])
{printf("Sorry,it can't be cleared away!\n");continue;}
else
{
a[]+=a[];
a[]+=a[];
a[]+=a[];
a[]+=a[];
a[]+=a[];
a[]+=a[]; if(a[]==a[])
sign=;
else
sign=;
}
if(sign==)
printf("All the seeds can be cleared away!\n");
else
printf("Sorry,it can't be cleared away!\n");
}
return ;
}