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

相关推荐

首先讲三个故事,关于牛客的事件一:2024年,牛客上有一对高学历情侣,求职方向与我当时一致,都是嵌入式方向。他们恰好是我的朋友,专业能力和学历背景都很扎实,也因此拿到了不少优质offer。和很多求职者一样,他们把offer情况整理后发在平台上,本意是记录与交流,但很快引发了争议。有声音指责他们“集邮”“不释放名额”,认为这种展示本身就是一种炫耀。最终讨论失控,当事人删除内容,事件也很快被遗忘。事件二:小红书评论区,一条评价获得了不少共鸣:“感觉牛客就是当年那群做题区毕业了开始找工作还收不住那股味,颇有一种从年级第一掉到年纪第二后抱怨考不上大学的味道”,这条评论被水印里这个同学转发到牛客后,评论...
小型域名服务器:当看到别人比自己强的时候,即便这是对方应得的,很多人会也下意识的歪曲解构对方的意图,来消解自己在这本就不存在的比较中输掉的自信,从而平白制造出很多无谓的争论。比如你会在空余时间来写优质好文,而我回家只会暗区突围,那么我就可以作为键盘侠在这里评论你是不是XXXXXXXX。即便我自己都知道这是假的,但只要这没那么容易证伪,那么当你开始回应的时候,脏水就已经泼出去了,后面可能会有更多的人带着情绪来给我点赞,而毫不关注你写的文章内容本身是啥了。
SAGIMA牛马咖啡
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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