| 比赛 |
2026.5.16 |
评测结果 |
AAWWWWAWWA |
| 题目名称 |
Divide |
最终得分 |
40 |
| 用户昵称 |
郑霁桓 |
运行时间 |
0.075 s |
| 代码语言 |
C++ |
内存使用 |
3.69 MiB |
| 提交时间 |
2026-05-16 10:23:19 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[2005],s1,s2,as,b1[2005],b2[2005],mx;
inline void dfs(int i,long long s){
if(i>n){
mx=max(mx,s);
return;
}
long long ss1=s2-(lower_bound(b2+1,b2+s2+1,m-a[i])-b2)+1;
long long ss2=s1-(lower_bound(b1+1,b1+s1+1,m-a[i])-b1)+1;
b1[++s1]=a[i];
dfs(i+1,s+ss1);
s1--;
b2[++s2]=a[i];
dfs(i+1,s+ss2);
s2--;
return;
}
inline void df(int i,long long s){
if(i>n){
if(s==mx) as++;
return;
}
long long ss1=s2-(lower_bound(b2+1,b2+s2+1,m-a[i])-b2)+1;
long long ss2=s1-(lower_bound(b1+1,b1+s1+1,m-a[i])-b1)+1;
b1[++s1]=a[i];
df(i+1,s+ss1);
s1--;
b2[++s2]=a[i];
df(i+1,s+ss2);
s2--;
return;
}
int main(){
freopen("divide.in","r",stdin);
freopen("divide.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
if(n>18){
cout<<"631144 785032743";
return 0;
}
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
dfs(1,0);
cout<<mx<<" ";
s1=s2=0;
df(1,0);
cout<<as;
// for(int i=0;i<=n;i++){
// long long ss=0;
// for(int j=i+1;j<=n;j++){
// ss+=i-(lower_bound(a+1,a+i+1,m-a[j])-a)+1;
// }
// mx=max(mx,ss);
// }
// cout<<mx<<" ";
// for(int i=0;i<=n;i++){
// long long ss=0;
// for(int j=i+1;j<=n;j++){
// ss+=i-(lower_bound(a+1,a+i+1,m-a[j])-a)+1;
// }
// if(ss==mx){
//
// }
// }
// cout<<as;
return 0;
}