1

#include<cstdio>
#include<algorithm>
#include<cstring>
#define p 1000000007
typedef long long ll;
using namespace std;
ll n,a,b,cnt[5],ok,ans[5];
inline ll pw(ll m,ll n)
{
       ll b = 1;  
    while (n > 0)  
    {  
          if (n & 1)  
             b = (b*m)%p;  
          n = n >> 1 ;  
          m = (m*m)%p;  
    }  
    return b;  
}
int main()
{
    scanf("%lld%lld%lld",&n,&a,&b);
    if (a>b) swap(a,b),ok=1;
    for (int i=1,x;i<=n;i++)
    {
        scanf("%d",&x),x%=(a+b);
        cnt[(x>=a) + (x>=b) + (x>=b && x>=2*a)]++;
    }
    ans[0]=(
            (pw(2,cnt[1])-1)*(pw(2,cnt[2]+cnt[3])) + 
            (pw(2,cnt[3])-cnt[3]-1+p)*(pw(2,cnt[2])) +
            cnt[3]*(cnt[2]?pw(2,cnt[2]-1):0) 
            )%p;
    ans[2]=((cnt[2]?pw(2,cnt[2]-1):0)+cnt[3]*(cnt[2]?pw(2,cnt[2]-1):1))%p;
    ans[3]=(ans[2]?pw(2,cnt[2]-1):1);
    for (int i=0;i<4;i++)
        ans[i]=(ans[i]*pw(2,cnt[0]))%p;
    if (ok) swap(ans[0],ans[1]);
    for (int i=0;i<4;i++)
    printf("%lld ",ans[i]);
    return 0;
}

 

posted @ 2018-01-16 17:25  MSPqwq  阅读(115)  评论(0编辑  收藏  举报