#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=10008;//如果MAXN=100000008,则kk数组开不出,why?
int n,m,k;
int kk[MAXN*MAXN];
int binary_search(int x)//二分查找,降低复杂度
{
int begin=0,end=n*n-1,mid=0;
while(begin<=end)
{
mid=(begin+end)/2;
if(x==kk[mid])
{
return 1;
}
else if(x<kk[mid]) end=mid-1;
else begin=mid+1;
}
return 0;
}
int main()
{
while(cin>>n>>m)
{
int flag=0;
int k[MAXN];
for(int i=0;i<n;i++)
cin>>k[i];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
kk[i*n+j]=k[i]+k[j];
cout<<kk[i*n+j]<<" ";
}
cout<<endl;
sort(kk,kk+n*n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(binary_search(m-k[i]-k[j]))
{
flag=1;
break;
}
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
抽签问题优化
最新推荐文章于 2022-09-23 17:41:29 发布