题意:相同的数分为同一个集合,求所有集合的子集数量。每个集合的子集数量都是2n-1。
题记:用map记录下每个集合数的个数,然后遍历map求除子集数量,最后相加即可。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,mod=1e9+7;
int a[N];
int solve(int x){
int sum=1;
while(x--){
sum=(sum*2)%mod;
}
return sum-1;
}
int main(){
int n;
while(cin>>n){
map<int,int>m;
for(int i=0;i<n;i++){
cin>>a[i];
m[a[i]]++;
}
map<int,int>::iterator it;
int ans=0;
for(it=m.begin();it!=m.end();it++){
ans=(ans+solve(it->second))%mod;
}
cout<<ans<<endl;
}
return 0;
}