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)