题解 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;
}