比赛 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;
}