Description
Carl is a beginner magician. He has a blue, b violet and c orange magic spheres. In one move he can transform two spheres of the same color into one sphere of any other color. To make a spell that has never been seen before, he needs at least x blue, y violet and z orange spheres. Can he get them (possible, in multiple actions)?
Input
The first line of the input contains three integers a, b and c (0 ≤ a, b, c ≤ 1 000 000) — the number of blue, violet and orange spheres that are in the magician's disposal.
The second line of the input contains three integers, x, y and z (0 ≤ x, y, z ≤ 1 000 000) — the number of blue, violet and orange spheres that he needs to get.
Output
If the wizard is able to obtain the required numbers of spheres, print "Yes". Otherwise, print "No".
Sample Input
4 4 0 2 1 2
Yes
5 6 1 2 7 2
No
3 3 3 2 2 2
Yes
代码:
#include<stdio.h>
int main()
{
int a,b,c,x,y,z,sum1,sum2,q,w,e,o,p;
while(scanf("%d%d%d",&a,&b,&c)!=EOF)
{
sum1=0,sum2=0;
scanf("%d%d%d",&x,&y,&z);
q=a-x;w=b-y;e=c-z;
if(q<0) sum1+=q;
else {if(q%2!=0) sum2+=(q-1)/2; else sum2+=q/2;}
if(w<0) sum1+=w;
else {if(w%2!=0) sum2+=(w-1)/2; else sum2+=w/2;}
if(e<0) sum1+=e;
else {if(e%2!=0) sum2+=(e-1)/2; else sum2+=e/2;}
sum1=-sum1;
if(sum1==0)
printf("YES\n");
else
{
if(sum2>=sum1)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
思路:
也就是计算可以有多少张万能牌,而且不能有多余的普通牌,一张万能牌可以和一个普通牌合成一个万能牌,最后在比较万能牌和缺多少牌。假如万能牌多了的话,两张可以合成一张,也就是说可以一张一张减掉,无所谓。
Hint
In the first sample the wizard has 4 blue and 4 violet spheres. In his first action he can turn two blue spheres into one violet one. After that he will have 2 blue and 5 violet spheres. Then he turns 4 violet spheres into 2 orange spheres and he ends up with 2 blue, 1 violet and 2orange spheres, which is exactly what he needs.