Codeforces Round #521 (Div. 3) C. Good Array
1 second
256 megabytes
standard input
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]a=[1,3,3,7] is good because there is the element a4=7a4=7 which equals to the sum 1+3+31+3+3 .
You are given an array aa consisting of nn integers. Your task is to print all indices jj of this array such that after removing the jj -th element from the array it will be good (let's call such indices nice).
For example, if a=[8,3,5,2]a=[8,3,5,2] , the nice indices are 11 and 44 :
- if you remove a1a1 , the array will look like [3,5,2][3,5,2] and it is good;
- if you remove a4a4 , the array will look like [8,3,5][8,3,5] and it is good.
You have to consider all removals independently, i. e. remove the element, check if the resulting array is good, and return the element into the array.
The first line of the input contains one integer nn (2≤n≤2⋅1052≤n≤2⋅105 ) — the number of elements in the array aa .
The second line of the input contains nn integers a1,a2,…,ana1,a2,…,an (1≤ai≤1061≤ai≤106 ) — elements of the array aa .
In the first line print one integer kk — the number of indices jj of the array aa such that after removing the jj -th element from the array it will be good (i.e. print the number of the nice indices).
In the second line print kk distinct integers j1,j2,…,jkj1,j2,…,jk in any order — nice indices of the array aa .
If there are no such indices in the array aa , just print 00 in the first line and leave the second line empty or do not print it at all.
5
2 5 1 2 2
3
4 1 5
4
8 3 5 2
2
1 4
5
2 1 2 4 3
0
In the first example you can remove any element with the value 22 so the array will look like [5,1,2,2][5,1,2,2] . The sum of this array is 1010 and there is an element equals to the sum of remaining elements (5=1+2+25=1+2+2 ).
In the second example you can remove 88 so the array will look like [3,5,2][3,5,2] . The sum of this array is 1010 and there is an element equals to the sum of remaining elements (5=3+25=3+2 ). You can also remove 22 so the array will look like [8,3,5][8,3,5] . The sum of this array is 1616 and there is an element equals to the sum of remaining elements (8=3+58=3+5 ).
In the third example you cannot make the given array good by removing exactly one element.
首先思路是预处理一个数组maxx,维护除了i位置a[i]以外的最大值。然后求sum=sigma(a[i]),遍历一遍,if(maxx[i]==(sum-a[i]-maxx[i]))
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=; int a[maxn],n,maxl[maxn],maxr[maxn],maxx[maxn],ans[maxn];
ll sum;
int main() {
scanf("%d",&n);
for(int i=;i<=n;i++) {
scanf("%d",&a[i]);
sum+=a[i];
}
for(int i=;i<=n;i++) {
maxl[i]=max(a[i-],maxl[i-]);
}
for(int i=n-;i>=;i--) {
maxr[i]=max(a[i+],maxr[i+]);
}
for(int i=;i<=n;i++) maxx[i]=max(maxl[i],maxr[i]);
int cnt=;
for(int i=;i<=n;i++) {
if(maxx[i]==sum-a[i]-maxx[i]) {
ans[cnt++]=i;
}
}
if(!cnt) printf("0\n");
else {
printf("%d\n",cnt);
for(int i=;i<cnt;i++) printf("%d ",ans[i]);
}
}
本以为这样挺好的,后来发现可以更简单,看了题解,若有所思。 因为除去a[i]以后,如果存在这样的好位置,那么剩余的数之和一定是偶数,(因为就是2倍的最大值)。然后判断最大值存不存在即可。
代码为正解:
#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e6;
int main() {
#ifdef _DEBUG
freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
int n;
cin >> n;
vector<int> a(n);
vector<int> cnt(MAX + );
for (int i = ; i < n; ++i) {
cin >> a[i];
++cnt[a[i]];
}
long long sum = accumulate(a.begin(), a.end(), 0ll);
vector<int> ans;
for (int i = ; i < n; ++i) {
sum -= a[i];
--cnt[a[i]];
if (sum % == && sum / <= MAX && cnt[sum / ] > ) {
ans.push_back(i);
}
sum += a[i];
++cnt[a[i]];
}
cout << ans.size() << endl;
for (auto it : ans) cout << it + << " ";
cout << endl;
return ;
}
Codeforces Round #521 (Div. 3) C. Good Array的更多相关文章
- Codeforces Round #521 (Div. 3) E. Thematic Contests(思维)
Codeforces Round #521 (Div. 3) E. Thematic Contests 题目传送门 题意: 现在有n个题目,每种题目有自己的类型要举办一次考试,考试的原则是每天只有一 ...
- Codeforces Round #258 (Div. 2) . Sort the Array 贪心
B. Sort the Array 题目连接: http://codeforces.com/contest/451/problem/B Description Being a programmer, ...
- Codeforces Round #521 (Div. 3) D. Cutting Out 【二分+排序】
任意门:http://codeforces.com/contest/1077/problem/D D. Cutting Out time limit per test 3 seconds memory ...
- CodeForces Round #521 (Div.3) D. Cutting Out
http://codeforces.com/contest/1077/problem/D You are given an array ss consisting of nn integers. Yo ...
- CodeForces Round #521 (Div.3) B. Disturbed People
http://codeforces.com/contest/1077/problem/B There is a house with nn flats situated on the main str ...
- Codeforces Round #555 (Div. 3) E. Minimum Array 【数据结构 + 贪心】
一 题面 E. Minimum Array 二 分析 注意前提条件:$0 \le a_{i} \lt n$ 并且 $0 \le b_{i} \lt n$.那么,我们可以在$a_{i}$中任取一个数 ...
- CodeForces Round #521 (Div.3) E. Thematic Contests
http://codeforces.com/contest/1077/problem/E output standard output Polycarp has prepared nn competi ...
- Codeforces Round #521 (Div. 3) F1. Pictures with Kittens (easy version)
F1. Pictures with Kittens (easy version) 题目链接:https://codeforces.com/contest/1077/problem/F1 题意: 给出n ...
- CodeForces Round #521 (Div.3) A. Frog Jumping
http://codeforces.com/contest/1077/problem/A A frog is currently at the point 00 on a coordinate axi ...
随机推荐
- C#的颜色解析及操作和相关Brush
一.颜色表示方式 // // Summary: // Creates a System.Drawing.Color structure from a 32-bit ARGB value. // // ...
- 第三章 Java内存模型(上)
本章大致分为4部分: Java内存模型的基础:主要介绍内存模型相关的基本概念 Java内存模型中的顺序一致性:主要介绍重排序和顺序一致性内存模型 同步原语:主要介绍3个同步原语(synchroized ...
- 数据库访问优化漏斗法则- 四、减少数据库服务器CPU运算
数据库访问优化漏斗法则这个优化法则归纳为5个层次:1.减少数据访问次数(减少磁盘访问)2.返回更少数据(减少网络传输或磁盘访问)3.减少交互次数(减少网络传输)4.减少服务器CPU开销(减少CPU及内 ...
- PROCEDURE存储过程传入表参数
) ,itemNum ) ,itemQty )) ---2.创建一个存储过程以表值参数作为输入 alter proc usp_TestProcWithTable @tb LocationTa ...
- JAVA中几个修饰符的作用以及一些相关话题
几个传统的修饰符: public 该类的子类,以及同包,或者其他情况下可以访问该修饰符修饰的方法/变量 protacted 只有同包,子类,该类本身可以访问 private 只有该类自身能访问 无修饰 ...
- ubuntu16.04 安装opencv3.4
1.去官网下载opencv,在本教程中选用的时opencv3.4.1,其他版本的配置方法异曲同工. 下载链接http://opencv.org/releases.html,选择sources版本 2. ...
- nginx显示目录下面的文件
location / { root /data/source; index index.html index.htm; autoindex on; #autoindex指令,显示文件目录下面的 ...
- function几种自执行的形式
1.(function(){})();这种是最常用的形式 2.var t = function(){}(); 3.-function(){}(); 这三种形式都能自执行
- opencv新版本的数据结构
转自 http://blog.csdn.net/yang_xian521/article/details/7108387 记得我在OpenCV学习笔记(四)——新版本的数据结构core里面讲过新版本的 ...
- 简单好用的General开发框架
1.开篇概述 从2004年学习编程,2007年学习C#以来,做的多半都是跟数据库打交道的工作,所以也积累了很多数据库方面的知识,用过一些ORM框架,从了解掌握到自己实现,慢慢积累了很多代码,直到201 ...