C. Good Array

C. Good Array

time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Let's call an array good if there is an element in the array that equals to the sum of all other elements. For example, the array a=[1,3,3,7]

is good because there is the element a4=7 which equals to the sum 1+3+3

.

You are given an array a

consisting of n integers. Your task is to print all indices j of this array such that after removing the j

-th element from the array it will be good (let's call such indices nice).

For example, if a=[8,3,5,2]

, the nice indices are 1 and 4

:

  • if you remove a1

, the array will look like [3,5,2]

  • and it is good;
  • if you remove a4

 

思路很简单:创建两个数组,数组 a 记录输入的数,数组 b 记录数字出现的次数,再创建一个容器vector用来存储符合要求的数字的下标(记住数组和容器一定要初始化或者在循环中创建),记录数字出现的次数,枚举每一个数字,用一个s记录每个数字相加的和,用s减去该数字的大小,如果原数组中出现了减去过后的一半,则满足条件,加进容器中。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
using namespace std;

long long a[1000005],b[1000005];
long long s,t;

int main()
{
	int n;
	while(cin>>n){
        vector<int> ans;
        s = 0;
        memset(b,0,sizeof(b));
        for(int i = 0;i < n;i++){
            cin>>a[i];
            s += a[i];
            b[a[i]]++;
        }
        for(int i = 0;i < n;i++){
            t = s-a[i];
            if(t % 2 != 0 || t > 2000000)//必须判断大于2e6的情况,不然第6个test就会RE 
                continue;//不是偶数的显然不合适
            t /= 2;
            if(b[t] - (a[i] == t) > 0){//(a[i] == t) 为真时为1,为假时为0,可以排除a[i]==t的情况
                ans.push_back(i);
            }
        }
        int len = ans.size();
        cout<<len<<endl;
        for(int i = 0;i < len;i++){
            if(i == 0)
                cout<<ans[i]+1;
            else
                cout<<" "<<ans[i]+1;
        }
        cout<<endl;
	}
	return 0;
}

 

全部评论

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务