首先在第二个和第三个堆上工作与在第一个和第二个堆上工作之间的逻辑差异

J·多伊

几天前,我试图解决一个 CodeForces 的问题:

有三堆石头,比如A、B和C。我们可以从A中取出1块石头,然后从B中取出2块;或者 1 来自 B,然后是 2 来自 C。给定每个堆中的石头数,返回可以移除的最大石头数。例如,在 的情况下3,4,5,可以移除的最大石头数是9- 首先B 的 2 个和 C 的 4 个,然后是 A 的 1 个和 B 的 2 个。

我编写了代码,其中我从 B 中删除了 2 的倍数,从 A 中删除了单数,然后从 C 中删除了 2 的倍数,从 B 中删除了单数,如下所示:

#include<algorithm>
#include<cstdio>
#include<iostream>

using namespace std;

int main() {
    int n;
    cin >> n;
    ios_base::sync_with_stdio(false);
    cin.tie(null);

    while(--n) {
        int a, b, c, ans=0;
        cin >> a >> b >> c;

        while(a>=1 && b>=2) {     //This one
            a--;
            b-=2;
            ans+=3;
        }

        while(b>=1 && c>=2) {     //That one
            b--;
            c-=2;
            ans+=3;
        }

        cout<<ans<<"\n";
    }

    return 0;
}

这打破了3,4,5上面给出的例子- 我的输出6不是9. 通过判断的其他解决方案交换了上面评论的两个循环。

虽然我理解上失败的例子,我无法直观地了解什么是交换两个环路实现之间的区别-这是为什么有必要对工作堆BC第一,在工作前AB

注意:我已经从问题中删除了这个问题实际上不需要的其他细节。

杰森

如果考虑 中石头的价值B,每取一块石头就相当于取两块石头C取每块石头A相当于两块石头B,不取一块石头C

所以,为了最大化石头的数量,你要先从 中取出石头B,然后从 中取出A

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Node js在第二个或第三个调用上工作

从SQL查询中获取第一个/第二个/第三个元素

删除第二个和第三个冒号之间的文本

从第二个和第三个表中获取与第一个表中的匹配值相对应的值

串联显示除第一个值外的第二个和第三个值

如何从jQuery中的.each循环中获取第一个,第二个和第三个元素的值?

第一个代码片段与第二个和第三个代码输出不同的可能原因是什么?

与第二个和第三个节点的HAProxy连接应仅与第一个节点连接

单击第一个和第二个活动的文本,应该对第三个活动可见

如何快速设置数字上方的第一个、第二个和第三个字母

Android Spinner:根据第一个微调器过滤器填充第二个和第三个微调器

如果第一个值不存在,如何使用拆分的第二个和第三个值?(Java)

如何根据第一个选项选择更改第二个下拉列表和基于第二个选项选择的第三个下拉列表

从字符串 id 数组创建对象数组,第一个对象的第一个值是第二个,第二个是第三个,依此类推

如何在一行上打印第一个和第二个元素,然后在下一行打印第二个和第三个,然后在下一行打印第三个和第四个,依此类推

在Highcharts列图中的第二个和第三个系列之间添加一个间隙,显示四个系列

在 Excel 中查找第二个和第三个匹配值

在每次访问时,获取一个非随机字段,但从第一个、第二个、第三个

给定一个CSV文件,如何删除每行第二个和第三个选项卡之间的内容?

RxJ:一个接一个地执行3个可观察对象,并使用第一个,第二个以及第三个请求中的第一个和第二个请求的结果

如何使用Flexbox将三个元素放在同一列中,第一个元素放在顶部,第二个和第三个元素位于剩余空间的中心?

如何使用CHARINDEX和SUBSTRING提取第二个和第三个“ _”之间的特定文本?

想要将数据从一个意图传递到第二个,并在数据传递到第三个意图之后。第一个到第二个已经完成bt第二个到第三个意图没有起作用

提取R中第二个和第三个下划线之间的值

提取第二个和第三个下划线之间的字符串

如何找到第二个和第三个正斜杠之间的字符串?

SQL获取第二个和第三个下划线之间的字符串

替换第二个和第三个下划线之间的任何内容

如何在“,,”的第二个和第三个实例之间选择字符串?