列表

详情


NC21752. little w and Sum

描述

小w与tokitsukaze一起玩3ds上的小游戏,现在他们遇到了难关。

他们得到了一个数列,通关要求为这个数列的和为0,并且只有一次改变一个数的符号的机会(正数变成负数,负数变成正数)。

请问小w与tokitsukaze能否通关,如果能,请输出有多少个数符合要求,如果不能,请输出-1。

输入描述

第一行包括一个正整数n(1≤n≤10^5),表示这个数列有n个数。
接下来一行有n个数x (-100≤x≤100),表示数列(数列的和保证不等于0)。

输出描述

输出有多少个符合要求的数,如果没有,请输出-1。

示例1

输入:

5
1 3 -5 3 4

输出:

2

说明:

只要把一个3变成-3,数列的和就变为0。数列里总共有两个3,所以有2个符合要求的数。

示例2

输入:

4
1 2 4 8

输出:

-1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 19ms, 内存消耗: 1016K, 提交时间: 2019-01-08 23:01:07

#include<bits/stdc++.h>
int i,n,ans=0,sum=0,a[100005];int main(){scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",a+i),sum+=a[i];for(i=0;i<n;i++)if(sum==2*a[i])ans++;printf("%d\n",ans?ans:-1);}

Python3(3.5.2) 解法, 执行用时: 66ms, 内存消耗: 10868K, 提交时间: 2018-12-14 21:42:35

n = input()
s = input()
a = list(map(int, s.split()))

s = sum(a)
ans = a.count(s//2)

if s % 2 != 0 or ans == 0:
    print(-1)
else:
    print(ans)

上一题