360第二题 求大佬看看对不对

int main() {

int p;

cin >> p;

vector res;

for(int q = 0; q < p; q++)

{

    int ans = 0,r,g,b;

    vector rgb;

    cin >>r>>g>>b;

    rgb.push_back(r);

    rgb.push_back(g);

    rgb.push_back(b);

    sort(rgb.begin(),rgb.end());

    while((rgb[0]+rgb[1]+rgb[2]) > 2 && (rgb[1]>0))

    {

        //if(rgb[0] > rgb[1] || rgb[1] > rgb[2])

        sort(rgb.begin(),rgb.end());

        if(rgb[0] == 1 && rgb[1] == 1 && rgb[2] == 1)

        {

            ans++;

            break;

        }

        if(rgb[0] == 0)

        {

            if(rgb[2]/2 >= rgb[1])

                ans+= rgb[1];

            else

                ans += rgb[2]/2;

            break;

        }

        else if(rgb[1] == rgb[2])

        {

            if((rgb[1]/2) >= rgb[0])

            {

                ans += rgb[0];

                rgb[0] = 0;

                rgb[1] -= rgb[0] * 2;

            }else

            {

                int tt = rgb[1]/2;

                ans += tt;

                rgb[0] -= tt;

                rgb[1] -= tt*2;

            }

        }

        else

        {

            if((rgb[2] - rgb[1])/2 >= rgb[0])

            {

                ans+= rgb[0];

                rgb[2] -= rgb[0]*2;

                rgb[0] = 0;

            }

            else

            {

                int tt = (rgb[2] - rgb[1]+1)/2;

                ans += tt;

                rgb[0] -= tt;

                rgb[2] -= 2*tt;

            }

        }

    }

    res.push_back(ans);

}

for(int q = 0; q < p; q++)

{

    cout<<res[q]<<endl;

}

return 0;

}

#实习#
全部评论
首先想,所有的数量加起来除3结果是错的,因为有可能三个气球都是同一个颜色,分析原因因为剩下两个气球个数不够了(假设R最多,每次两个R一个其他色)R>2*(B+G)。所以如楼上说的判断上述条件如果为真就B+G否则(R+G+B)/3
点赞 回复 分享
发布于 2018-04-01 01:21
min r+g (r+g+b)/3
点赞 回复 分享
发布于 2018-04-01 08:25
数理计算出即可 常数级时间复杂度 AC代码 #include<iostream> #include<vector> #include<algorithm> #include<cmath> using namespace std; int main() {     int t;     cin>>t;     while(t--)     {         vector<long long >color;         long long  ans=0,temp;         for(int i=0;i<3;++i)         {             cin>>temp;             color.push_back(temp);         }         sort(color.begin(),color.end());         ans+=color[0];         ans+=min((color[1]+color[2]-2*color[0])/3,color[1]);         cout<<ans<<endl;     }     return 0; }
点赞 回复 分享
发布于 2018-04-01 13:50
我用dfs40%
点赞 回复 分享
发布于 2018-03-31 23:27
如果 较小两个数的和的两倍小于等于第三个数 输出两个数的和 否则输出3个数的和整除3
点赞 回复 分享
发布于 2018-04-01 00:07
这种题感觉要找出求解公式,而不是直接进行搜索。虽然我也没AC,个人观点
点赞 回复 分享
发布于 2018-04-01 00:44

相关推荐

勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务