[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; }