枚举暴力 cf B. Preparing Olympiad

来源:互联网 发布:数据库阻塞和死锁区别 编辑:程序博客网 时间:2024/06/07 19:46

链接: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 1000005int 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;}


0 0
原创粉丝点击