社区讨论
50分求调
P4799[CEOI 2015] 世界冰球锦标赛 (Day2)参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mm4oe74v
- 此快照首次捕获于
- 2026/02/27 17:14 2 周前
- 此快照最后确认于
- 2026/03/01 13:30 上周
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,x;
ll a[45];
ll mp[1148576];
vector<int> b;
ll ans=0;
ll len=0;
ll find(ll nums)
{
int l=0,r=len-1;
int pos=-1;
while(l<=r)
{
int mid=l+(r-l)/2;
if(mp[mid]<=nums)
{
pos=mid;
l=mid+1;
}
else
{
r=mid-1;
}
}
return pos+1;
}
int main()
{
cin>>n>>x;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=n/2;i<n;i++)
{
b.push_back(a[i]);
}
int m=b.size();
for (int i = 0; i < (1 << m); i++)
{
ll sum = 0;
for (int j = 0; j < m; j++)
{
if ((i >> j) & 1) sum += b[j];
}
if(sum>x)
{
continue;
}
mp[len++]=sum;
}
sort(mp,mp+len);
for (int i = 0; i < (1 << (n/2)); i++)
{
ll sum = 0;
for (int j = 0; j < n/2; j++) {
if ((i >> j)&1) sum += a[j];
}
if(sum<=x)
{
int s=find(x-sum);
ans+=s;
}
}
cout<<ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...