[sjtu oj] 1006 求和游戏

 

 

考虑到数据量,不可能建立等长的数组(也没有意义)

需要做的只是记录最小累计值(minn),并且每读入一个值(tem)就将目前的累计值(now)与最小值比较,更小则替代,答案(ans)取当前累计值与最小值的差值

考虑到题目要求,ans小于等于0时输出Game Over

 

注意,以上变量都为long long(其实没有必要,才2e9,还在int范围内

注意*2,答案至少需要两个元素,实现就是改变更新minn和ans的顺序,即使用前一个值的minn,从而保证至少两个

 

(但是我还是错的qwq,并且是1,3两个数据点。。。)

(10分钟后的)Update:我搞出来了!!

我是个憨憨,前一个值的minn还是只有一个啊啊啊啊啊啊啊啊,心痛

 

 

正确代码:

#include<bits/stdc++.h>

using namespace std;

int n;
int tem,pre,now,ans;

int main(){
    cin>>n;
    
    cin>>tem;
    ans+=tem;now+=tem;
    pre=tem;cin>>tem;
    ans+=tem;now+=tem;

    for(int i=3;i<=n;i++)
    { 
        pre=tem;
        cin>>tem;
        now=now>pre?now+tem:pre+tem;
        if(ans<now) ans=now;
    }

    if(ans>0) cout<<ans;
    else cout<<"Game Over";

    return 0;
}

 

 错误代码(1,3×)

#include<bits/stdc++.h>

using namespace std;

int n,flag;
int tem,minn,now,ans;

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>tem;
        now+=tem;
        ans=max(ans,now-minn);
        minn=(minn>now)?now:minn;
    }
    if(ans<=0) puts("Game Over");
    else cout<<ans;
    return 0;
}

 

posted @ 2021-03-03 18:52  Adaxy  阅读(35)  评论(0编辑  收藏  举报