我正在解决 CodeForces 上的这个问题:
然而,它在输入“7 4 10”和“8 2 8”时出现错误。我的代码分别返回“7”和“8”,而不是预期的“10”和“9”(我不确定“10”和“9”是如何得出的)。 editorial 提到对输入进行排序并检查b <= r + g,如果为
我们有三个值,
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,如果为
true
则返回(r+g+b)/2,否则返回r+g。可以说,我无法理解这篇文章在说什么。
请问有人能指出我的逻辑有什么问题,我错过了什么吗?
谢谢!