Good Array
题目链接:https://vjudge.net/problem/CodeForces-1077C
题目大意:给你n个数组成的序列,如果从中删除一个数后,其余的n-1个数组成der序列满足其中一个数
等于其余数der和,求满足条件的数的位置
题目思路:n-1个数组成的序列,设这个和值为a n-1个数der和就是 2*a,也就是说除去删除der那个数剩下的
的和能被2整除,并且这n-1个数中存在值为a的数。也就是说我们需要先求的n个数的和,并且标记每一个数出现的次数
在遍历一遍每一个值,如果sum-a[i]能被2整除并且vis[(sum-a[i])/2]为真值,就记录这个位置i。代码如下:
#include<iostream> #include<string.h> #include<algorithm> using namespace std; const int maxn=2e5+10; const int maxns=1e6+10; int dp[6]; int vis[maxns]; int a[maxn]; int main() { int n; cin>>n; long long sum=0; int maxx=-1; for(int i=1;i<=n;i++) { cin>>a[i]; maxx=max(maxx,a[i]); vis[a[i]]++; sum+=a[i]; } int cnt=0; int ans[maxn]; for(int i=1;i<=n;i++) { if((sum-a[i])%2==0) { long long flag=(sum-a[i])/2; if(flag>maxx) continue; vis[a[i]]--; //a[i]被删除自然要-1; if(vis[flag]) { ans[++cnt]=i; } vis[a[i]]++; //恢复原序列 } } cout<<cnt<<endl; for(int i=1;i<=cnt;i++) cout<<ans[i]<<(i==cnt?' ':' '); return 0; }