HackerRank

时间:2016-08-24 15:55:10

标签: c++ c++11 c++14

以下是HackerRank(评级中等)的问题:

当Daenerys拿到她的新手机时,里面没有游戏。所以她去了游戏商店并下载了一款名为Princess and Angels的顶级游戏。

在游戏公主中以0总强度开始。在公主和她的城堡之前有N个天使。每一位天使都给予艾力。但是有些天使实际上穿着天使服装是邪恶的,他们在试图与公主战斗时会给予负面力量。如果丹妮莉丝可以在没有死亡的情况下通过所有的N天使,那么这场比赛就可以赢得比赛。如果公主的总体力量不到0,公主就会死去。幸运的是,公主有一种特殊的力量。她可以和天使一起战斗,并且最多可以逆转它的力量。如果她用x力量对我的天使使用那种力量,她可以施加这种力量并使其成为-x。

丹妮莉丝可以预见N天使的优势。当穿过每个天使时,力量会增加到总强度。公主也可以在加入之前扭转那个天使的力量,但只有一次。

鉴于天使的N优势,你能否帮助丹妮莉斯找出她可以获得的最佳结果?

打印“她做到了!” (如果她没有引号)她可以赢得比赛。否则打印她可以到达的最大位置(即由于负的总强度而导致她死亡的位置)。

输入格式

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

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

约束

1·; = T< = 1000

1·; = N< = 100000

-1000< =&强度LT; = 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;
}

1 个答案:

答案 0 :(得分:2)

我想:

想象一下以下输入:

5
6 -5 -2 -2 -2

您的算法将遇到6并添加它,因此力量变为6

接下来我们遇到-5。由于这不会杀死我们,我们接受这种损失。力量变为1

接下来我们来-2。这会杀死我们(把我们带到-1)所以我们用力量来翻转它。我们的力量变为3

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

但是,如果你曾使用-5上的力量使总强度达到11那么你就会结束,所以在这种情况下你的回答是不正确的。