这是HackerRank的错误解决方案

Mistake in this solution for HackerRank

本文关键字:解决方案 错误 HackerRank 这是      更新时间:2023-10-16

这是一个来自HackerRank(评级中等)的问题:

当丹妮莉丝得到她的新手机时,里面没有游戏。于是,她去游戏商店下载了一款评分最高的游戏《公主与天使》。

在游戏中,公主开始时总实力为0。公主和她的城堡前有N个天使。每个天使都给我力量。但有些天使实际上是邪恶的穿着天使的衣服,他们给负面力量试图与公主战斗。如果丹妮莉丝能不死地穿过所有N个天使,就能赢得游戏。如果公主的总力量小于0,她就会死。幸运的是公主有一种特殊的力量。她可以和天使战斗并且几乎一次逆转它的力量。如果她对一个拥有x力量的天使使用这种力量,她就可以把它变成-x。

丹妮莉丝可以预见N个天使的力量。当穿过每个天使时,力量被加到总力量中。公主也可以在加入之前逆转那个天使的力量,但只有一次。

给定N个天使的力量,你能帮丹妮莉丝想出她能得到的最好的结果吗?

print "She did it!"(没有引号)如果她能赢得比赛。否则打印她可能到达的最大位置(即由于负总强度而死亡的位置)。

输入格式

第一行输入包含T,测试用例的数量。

每个测试用例有两行,第一行有N个,下一行有N个空格分隔的整数。

约束

1 & lt; = T<= 1000

1 & lt; = N<= 100000

-1000 & lt; = strength<= 1000

输出格式

对于每个测试用例,打印单行表示问题的答案。

这是我对解决方案的尝试:

#include <iostream>
using namespace std;

int main() {
    int strength, power, n, t, count = 1, i, pos;
    cin>>t;
    while(count <= t)
        {
        strength = 0;
        power = 1;
        cin>>n;
        int a[n];
        for(i = 0; i < n; i++)
            cin>>a[i];
        for(i = 0; i < n; i++)
            {
            if((strength + a[i]) < 0 && power == 1)
                {
                strength -= a[i];
                power = 0;
            }
            else if((strength + a[i] < 0) && power == 0)
               {
                if(strength >= 0)
                    {
                    pos = i + 1;
                    strength += a[i];
                    break;
                }
            }
            else if((strength + a[i]) >= 0)
                strength += a[i];
        }
        if(strength >= 0)
            cout<<"She did it!"<<endl;
        else if(strength < 0)
            cout<<pos<<endl;
        count++;
    }
    return 0;
}

我想:

想象以下输入:

5
6 -5 -2 -2 -2

你的算法将遇到6并将其相加,因此强度变为6

接下来我们遇到了-5。既然我们不会死,我们就接受损失。强度变为1

接下来是-2。这将杀死我们(带我们到-1),所以我们使用能量翻转它。我们的力量变成了3

下面的两个-2将因此杀死我们。

然而,如果你在-5上使用了能量,使11的总强度在那一点上,你就会到达终点,所以在这种情况下,你的答案是错误的