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
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 int a[8],i,sign; 7 while(1) 8 { 9 sign=0; 10 for(i=0;i<8;i++) 11 { 12 scanf("%d",&a[i]); 13 if(a[0]==-1) 14 return; 15 } 16 if(a[0]+a[2]+a[5]+a[7]!=a[1]+a[3]+a[4]+a[6]) 17 {printf("Sorry,it can't be cleared away! ");continue;} 18 else 19 { 20 a[0]+=a[2]; 21 a[4]+=a[6]; 22 a[1]+=a[3]; 23 a[5]+=a[7]; 24 a[0]+=a[5]; 25 a[4]+=a[1]; 26 27 if(a[0]==a[4]) 28 sign=0; 29 else 30 sign=1; 31 } 32 if(sign==0) 33 printf("All the seeds can be cleared away! "); 34 else 35 printf("Sorry,it can't be cleared away! "); 36 } 37 return 0; 38 }