链接:http://codeforces.com/contest/550/problem/B
题意:
给出n个数字,在这n个数字中选择至少两个数字,使得之和在l,r之间,并且最大和最小值之间差值必须大于x
思路:
因为n的范围是15,一共有2^15种情况,暴力枚举即可
二进制有时真的很有用!
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAX 1000005
int mp[16];
int main(void){
int n,l,r,x;cin >> n >> l >> r >> x;
for(int i =1;i<=n;i++)cin>>mp[i];
int total = 1 << n ;
int cnt = 0;
for(int i = 0;i < total;i++){
int sum = 0;
int nmax = 0, nmin = 99999999;
for(int j = 1;j <= n;j++){
if(i&(1<<(j-1))){
sum+=mp[j];
nmax = max(nmax,mp[j]);
nmin = min(nmin,mp[j]);
}
}
if(sum<=r && sum >= l && nmax-nmin>=x)cnt++;
}
cout << cnt;
}