【发布时间】:2020-03-26 17:54:54
【问题描述】:
我正在从 CodeForces 解决this question:
我们得到三个值,
r、g和b,分别代表三堆中红色、绿色和蓝色糖果的数量。 Tanya 一天不能吃两颗相同颜色的糖果,也就是说,她每天只吃两颗不同颜色的糖果。找出 Tanya 可以吃糖果的最大天数。
我做了一个简单的方法如下:
int main() {
int t, r, g, b;
cin>>t;
while(t--) {
int counter=0;
cin >> r >> g >> b;
while(r && g) {
r--;
g--;
counter++;
}
while(g && b) {
g--;
b--;
counter++;
}
while(r && b) {
r--;
b--;
counter++;
}
cout<<counter<<"\n";
}
return 0;
}
但是,它在输入 7 4 10 和 8 2 8 上中断。我的代码分别返回7 和8,而不是10 和9(我不确定10 和9 如何是输入的预期答案)。 editorial 讨论对输入进行排序并检查 b <= r + g 是否返回 (r+g+b)/2 如果 true 和 r+g 否则返回。我只想说,我无法理解社论说什么。
有人可以指出为什么 我的 逻辑不正确以及我缺少什么吗?
谢谢!
【问题讨论】: