链接:https://ac.nowcoder.com/acm/contest/297/B

来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 262144K,其他语言524288K

64bit IO Format: %lld

题目描述

小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

题解:

若sum为奇数,肯定不存在这个数,若是偶数,除2遍历即可

代码1:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm> using namespace std; int main()
{ int n;
cin>>n;
int a[100005];
long long int sum=0;
for(int t=0;t<n;t++)
{
scanf("%d",&a[t]);
sum+=a[t];
}
int temp;
if(sum%2==0)
{
temp=sum/2;
}
else
{
printf("-1\n");
return 0;
}
int s=0;
for(int t=0;t<n;t++)
{
if(a[t]==temp)
{
s++;
}
}
if(s==0)
{
printf("-1\n");
}
else
{
printf("%d\n",s);
}
return 0;
}

代码2:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; int main()
{
int n; while(scanf("%d",&n)!=EOF)
{ int a[100005];
long long int sum=0;
for(int t=0;t<n;t++)
{ scanf("%d",&a[t]);
sum+=a[t];
}
int flag=0;
long long int s=0;
for(int t=0;t<n;t++)
{
if(sum-2*a[t]==0)
{
s++;
flag=1;
}
}
if(flag)
printf("%lld\n",s);
else
{
cout<<"-1"<<endl;
}
}
return 0;
}

little w and Sum(思维)的更多相关文章

  1. hdu 4961 Boring Sum (思维 哈希 扫描)

    题目链接 题意:给你一个数组,让你生成两个新的数组,A要求每个数如果能在它的前面找个最近的一个是它倍数的数,那就变成那个数,否则是自己,C是往后找,输出交叉相乘的和 分析: 这个题这种做法是O(n*s ...

  2. ACM-ICPC 2018 南京赛区网络预赛 J Sum (思维+打表)

    https://nanti.jisuanke.com/t/30999 题意 f(i)表示i能拆分成两个数的乘积,且要求这两个数中各自都没有出现超过1次的质因子的方案数.每次给出n,求∑(n,i=1)f ...

  3. HDU6058 Kanade's sum(思维 链表)

    Kanade's sum Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  4. Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad) D. Divide and Sum (思维,数学,逆元)

    题意:有一个长度为\(2n\)数组,从中选分别选\(n\)个元素出来组成两个序列\(p\)和\(q\),(\(p\)和\(q\)中只要有任意一个元素在\(a\)的原位置不同,就算一个新的情况),选完后 ...

  5. HDU 5776 sum (思维题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5776 题目让你求是否有区间的和是m的倍数. 预处理前缀和,一旦有两个数模m的值相同,说明中间一部分连续 ...

  6. Codeforces 963A Alternating Sum ( 思维 && 数论 )

    题意 : 题目链接 分析 : Tutorial 讲的很清楚 至于为什么这样去考虑 算是一个经验问题吧 如果一个问题要你给出模意义下的答案 就多考虑一下答案是要用逆元构造出来 也就说明有除法的存在 那么 ...

  7. 51Nod 1110 距离之和最小 V3 中位数 思维

    基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 X轴上有N个点,每个点除了包括一个位置数据X[i],还包括一个权值W[i].点P到点P[i]的带权距离 = 实际距离 ...

  8. HDU 1024 Max Sum Plus Plus【动态规划求最大M子段和详解 】

    Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  9. (动态规划)Max Sum Plus Plus--hdu--1024

    http://acm.hdu.edu.cn/showproblem.php?pid=1024 Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Othe ...

随机推荐

  1. innerdb disable error

    innodb=OFF ignore-builtin-innodb skip-innodbdefault-storage-engine=myisam default-tmp-storage-engine ...

  2. 每天一个linux命令(7):rmdir命令

    版权声明更新:2017-05-11博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下面的rmdir命令. ...

  3. test20190611 NOIP模拟赛

    题一:答题比赛 [问题描述] YYH报名参加了一个特殊的电视问答节目.这个节目共有n个问题,每回答正确1题,YYH就会获得1分,而每当YYH连续答对k题,那么他的现有得分乘以2,注意答对第k题后,是先 ...

  4. Python-实现socket简单地连续发数据

    只需用while条件判断来实现 服务器端 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import socket serv ...

  5. 网站跳转到Apache 2 Test Page powered by CentOS

    原来是80端口被占用的问题 解决80端口占用问题 sudo fuser -n tcp -k 覆盖原来的httpd cp /usr/local/apache2/bin/apachectl /etc/in ...

  6. linux日常管理-查看系统负载

    查看系统的负载常用命令w 16:32::15是系统时间 up 16 min 是开机使用时间 1 user 是登录的用户数 重要 load average:0.00 0.00 0.00 负载分别表示1分 ...

  7. Could not get lock /var/lib/dpkg/lock - open 解决方法

    无法获得锁 /var/lib/dpkg/lock E: Could not get lock /var/lib/dpkg/lock - open (11 Resource temporarily un ...

  8. rlwrap:让控制台程序使用input.rc里的设置

    习惯了vi模式,在bash里配置input.rc可以使平时命令行操作都使用vi习惯,翻页和跳动光标都很方便 但是当运行一些交互式程序时,比如redis-cli,lua等,它们却不按input.rc的配 ...

  9. C#使用Json.NET解析Json

    本文转载自 http://xiaosheng.me/2016/10/01/article25/ 最近在 C# 项目中需要使用到 Json 格式的数据,我简单上网搜索了一下,基本上有两种操作 Json ...

  10. 使用JSP输出九九乘法表

    在html网页中编写Java代码是,需要使用<%%>来编写,<%=%>表示取等号后面的值,如<%="hello"%>就会输出hello. < ...