YTU.3293:克隆玩具

问题 M: 克隆玩具

时间限制: 1 Sec  内存限制: 128 MB
提交: 257  解决: 45
[提交][状态][讨论版][命题人:acm4302]

题目描述

你只有一个A类型玩具,现在有个有两种功能的机器:
1. 加工一个A类型的玩具能够再得到一个A类型的玩具和一个B类型的玩具。
2. 加工一个B类型的玩具,能得到两个B类型的玩具。
问经过多次加工之后,能否恰好得到n个B类型的玩具和m个A类型的玩具(不能扔掉任何玩具哦)。

 

输入

两个整数n,m(0<=n,m<=1e9)加工之后B类型玩具的数量和A类型玩具的数量。

输出

能恰好得到n个B类型的玩具和m个A类型的玩具的话输出:Yes 
不能的话输出:No

样例输入

6 3

样例输出

Yes

提示

样例中,用两次功能1,得到三个A类玩具和两个B类玩具;再使用两次功能2,再得到4个B类玩具,这样就一共得到了6个玩具B和3个玩具A。

分析:本来现在都不怎么喜欢写题解了,但是这道题实在是坑了我不少时间,必须要总结一下经验。

首先题目的理解就有些问题,A可以加工成A+B,但是这个模板A也是在的。

B可以加工成两个B,模板同样是在的,扣题目字眼的我一直没理解对意思.....以为B加工后之前的就消失不见了....

那么就好分析多了,可以用n-m+1算出需要通过操作2得到B的数量,因为m是包含了初始的一个A的,所以后面+1.

操作二得到的B的个数必须是偶数,这是显而易见的。判断即可。

需要注意的特例:

1.如果m为0,那么n不管为多少都为NO

2.A的数量最多比B多一个,因为只有操作一可以产生A,但同时也产生了B

AC代码:

/*特殊情况一定要仔细考虑!*/ 
#include<iostream>
using namespace std;
int main()
{
int flag=0;
int n,m;
cin>>n>>m;
if(n>0&&m==0)
{
	cout<<"No";
	return 0;
}
else if(m-n>1)
	flag=0;
else if((n-m+1)%2==0) 
{
	flag=1;
}
if(flag)
cout<<"Yes";
else
cout<<"No";
return 0;	
} 

 

 

posted @ 2018-09-29 20:05  一砂一极乐  阅读(119)  评论(0编辑  收藏  举报