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;

}

#实习#
全部评论
数理计算出即可 常数级时间复杂度 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
min r+g (r+g+b)/3
点赞 回复 分享
发布于 2018-04-01 08:25
首先想,所有的数量加起来除3结果是错的,因为有可能三个气球都是同一个颜色,分析原因因为剩下两个气球个数不够了(假设R最多,每次两个R一个其他色)R>2*(B+G)。所以如楼上说的判断上述条件如果为真就B+G否则(R+G+B)/3
点赞 回复 分享
发布于 2018-04-01 01:21
这种题感觉要找出求解公式,而不是直接进行搜索。虽然我也没AC,个人观点
点赞 回复 分享
发布于 2018-04-01 00:44
如果 较小两个数的和的两倍小于等于第三个数 输出两个数的和 否则输出3个数的和整除3
点赞 回复 分享
发布于 2018-04-01 00:07
我用dfs40%
点赞 回复 分享
发布于 2018-03-31 23:27

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
03-08 18:11
门头沟学院 Java
Java抽象小篮子:海投就完事了,简历没什么问题,最大问题是学历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务