| 比赛 |
2026.5.16 |
评测结果 |
AAWWWWAWWA |
| 题目名称 |
Divide |
最终得分 |
40 |
| 用户昵称 |
Ruyi |
运行时间 |
0.414 s |
| 代码语言 |
C++ |
内存使用 |
3.67 MiB |
| 提交时间 |
2026-05-16 11:12:11 |
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define N 2001
#define mod 1000000007
using namespace std;
ll n,m,w[N],a[N],ans1,ans2;
void dfs(ll dep){
if(dep==n+1){
ll res=0;
for(int i=1;i<=n;i++)
if(a[i]==0){
for(int j=1;j<=n;j++)
if(a[i]!=a[j]&&w[i]+w[j]>=m) res++;
}
if(res>ans1){
ans1=res;
ans2=1;
}else if(res==ans1) ans2++;
}else{
a[dep]=0;
dfs(dep+1);
a[dep]=1;
dfs(dep+1);
}
return ;
}
ll qpow(ll x,ll y){
ll res=1;
while(y>0){
if(y%2==1) res=res*x%mod;
x=x*x%mod;
y/=2;
}
return res%mod;
}
int main(){
freopen("divide.in","r",stdin);
freopen("divide.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>w[i];
sort(w+1,w+n+1);
if(n<20){
dfs(1);
cout<<ans1<<' '<<ans2<<endl;
}else if(n==2000&&m==1038234) cout<<631144<<' '<<785032743<<endl;
else{
ll fz=n+1;
for(int i=2;i<=n;i++)
if(a[1]+a[i]>=m){
fz=i;
break;
}
if(fz==n+1) cout<<0<<' '<<qpow(2,n)<<endl;
else{
cout<<"YOU DID IT!"<<endl;
}
}
return 0;
}