不正经题解 - 思维题
2024-07-08 08:28:20
发布于:上海
55阅读
0回复
0点赞
首先我们要明白:存在着某个数字可以为其他所有数字之和,这个数字一定是这个序列的最大值,否则单序列的最大值就会比这个数字大。所以,我们就可以模拟了:首先我们可以 计算数组的前缀和与前缀最大值。接下来判断对于每一个前缀,前缀最大值是否与前缀和减去前缀最大值相等。所有都是 的。
#include <cstdio>
#include <algorithm>
using namespace std;
int a[200005];
inline int read(){
register int x=0;register char ch=getchar();
while(ch<'0'||ch>'9'){ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x;
}
int main(){
int n;
scanf("%d",&n);
for(register int i=1;i<=n;i++) a[i]=read();
register long long mx=0,sum=0;
register int cnt=0;
for(register int i=1;i<=n;i++){
sum+=a[i];
if(mx<a[i]) mx=a[i];
if(sum-mx==mx) cnt++;
}
printf("%d",cnt);
return 0;
}
全部评论 1
d
2024-07-08 来自 上海
0
有帮助,赞一个