您的位置:首页 > 编程语言 > C语言/C++

CodeForces 550B

2015-07-17 16:45 246 查看
题意:有n个问题,从中至少选出两个问题,其难度总和不小于l,不大于r,且最大难度与最小难度之差要大于x。

参考了大神的代码,才写出来。

思路:状态压缩,枚举

AC代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
int n,l,r,x,c[20],maxx,minn,s,ans,cnt;
long long sum;
while(scanf("%d%d%d%d",&n,&l,&r,&x)!=EOF)
{
ans = 0;
for(int i = 0;i < n;i ++)
scanf("%d",&c[i]);
s = (1 << n) - 1;
for(int i = 1;i <= s;i ++)
{
cnt = 0; maxx = 0; minn = 99999999; sum=0;
for(int j = 0;j < n;j ++)
{
if((1 << j)&i)
{
cnt ++;
sum += c[j];
maxx = max(maxx,c[j]);
minn = min(minn,c[j]);
}
}
if(cnt >= 2&&maxx-minn >= x&&sum >= l&&sum <= r)
ans ++;
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息