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)?
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.
If the wizard is able to obtain the required numbers of spheres, print "Yes". Otherwise, print "No".
4 4 0
2 1 2
Yes
5 6 1
2 7 2
No
3 3 3
2 2 2
Yes
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 2 orange spheres, which is exactly what he needs.
对于这题笔者只有比较合理的解释就是通过相对应数之间的差值来计算最后的总值是否大于0,如果大于0则可以通过合并来缩小数的数量,或许在读到这时你会觉得如果出现奇数怎么办,那就看一下代码就会知道了:
#include<cstdio>
#include<algorithm>
using namespace std;
int ans = 0;
void fun(int n)
{
if( n >= 0)
{
ans += n/2; //这就是防止出现奇数的关键
}
else
{
ans += n;
}
}
int main(void)
{
int a,b,c;
int x,y,z;
scanf("%d%d%d",&a,&b,&c);
scanf("%d%d%d",&x,&y,&z);
fun(a-x);
fun(b-y);
fun(c-z);
if(ans >= 0)
printf("Yes\n");
else
printf("No\n");
return 0;
}