您的位置:首页 > 其它

二进制暴力

2015-06-07 09:51 211 查看
CF:550B

题意:输入n,l,r,x,再输入n个数,在这n个数中任意选其中某些数相加和为sum,要求sum>=l&&sum<=r,而且这组数中最大值与最小值之差>=x

#include <iostream>

#include<stdio.h>

#include<string.h>

#include<string>

#include<queue>

#include<math.h>

using namespace std;

#define inff 1000000000

int main()

{

int c,n,l,r,x,i,maxn,minn,sum,ans;

int a[16];

while(cin>>n>>l>>r>>x)

{

for(i=1;i<=n;i++)

{

cin>>a[i];

}

ans=0;

for(c=1;c<=(1<<n);c++)

{

maxn=0;minn=inff;

sum=0;

for(i=0;i<n;i++)

{

if((c>>i)&1)

{

maxn=max(maxn,a[i+1]);

minn=min(minn,a[i+1]);

sum+=a[i+1];

}

}

if(maxn-minn>=x&&sum>=l&&sum<=r)

{

ans++;

}

}

cout<<ans<<endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: