2015年7月4日 星期六

2015/07/04 Codeforces 550B. Preparing Olympiad

// http://codeforces.com/problemset/problem/550/B
#include <algorithm>
#include <iostream>
#include <cstdio>

using namespace std;

int N, L, R, X;
int C[30];

int main()
{
    scanf("%d %d %d %d", &N, &L, &R, &X);

    for(int Ni = 0; Ni < N; Ni++)
        scanf("%d", &C[Ni]);

    sort(C, C+N);

    int Ans = 0;

    for(int i = 1; i < 1<<N; i++)
    {
        int mx = 0, mn = N-1, sum = 0;

        for(int Ni = 0, Vi = 1; Ni < N; Ni++, Vi<<=1)
            if( i&Vi )
            {
                sum += C[Ni];
                mx = max(mx, Ni);
                mn = min(mn, Ni);
            }

        if( L <= sum && sum <= R && C[mx]-C[mn] >= X ) Ans++;
    }

    printf("%d\n", Ans);
}

沒有留言:

張貼留言