题解 CF606A 【Magic Spheres】
【题意】
可将两个同种颜色的球体转换为一个任意颜色的球体,使每种颜色的球体数量超过要求的数量,判断能否完成。
【思路】
①若已有个数>要求个数,则(已有个数-要求个数)÷ 2为多出的球体能够转换得到的球体个数,记为l。
②若已有个数<要求个数,则(要求个数-已有个数)为需要转换得到的球体个数,记为r。
③若l≥r,则能完成;反之不能完成。
先上一份错误代码,有注意点
#include <cstdio>
int a,b,c,x,y,z;
int l,r;
int main()
{
scanf("%d%d%d%d%d%d",&a,&b,&c,&x,&y,&z);
a>x?l+=a-x:r+=x-a;
b>y?l+=b-y:r+=y-b;
c>z?l+=c-z:r+=z-c;
if(l>=r*2) printf("Yes");
else printf("No");
return 0;
}
不能将多出的总个数与缺少总个数的两倍进行比较,可能会导致两种颜色不同的球体转换成另一球体,比如一个蓝色的和一个紫色的合成一个橙色的,不符合题意。
【代码】
#include <cstdio>
int a,b,c,x,y,z; //与题目内含义相同
int l,r; //l表示多出的球体个数能转换得到的球体个数,r表示缺少的球体个数
int main()
{
scanf("%d%d%d%d%d%d",&a,&b,&c,&x,&y,&z);
a>x?l+=(a-x)/2:r+=x-a;
b>y?l+=(b-y)/2:r+=y-b;
c>z?l+=(c-z)/2:r+=z-c;
if(l>=r) printf("Yes"); //转换得到的个数≥缺少的个数
else printf("No"); //转换得到的个数<缺少的个数
return 0;
}