纸片:二分法

抽签:将写有n个纸片的口袋中抽取四次,可放回,判断抽取的这四张纸片加起来能否等于m;
INPUT:
输入n,m,和n个数。
n<100;
OUTPUT:
输出能否等于m;
能:Yes,否:No;
代码//二分法:

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000000;
int a[maxn];
int n,m;
int binary_search(int x)
{
    int l=0,r=n;
    while(r-l>1)//可以作为二分法的模板
    {
        int i=(l+r)/2;
        if(a[i]==x)return 1;
        else if(a[i]<x)
            l=i+1;
        else r=i;
    }
    return 0;
}
int main()
{
    while(cin>>n>>m)
    {
        for(int i=0;i<n;i++)
            cin>>a[i];
        sort(a,a+n);
        int flag=1;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
            for(int k=0;k<n;k++)
        {
           if(binary_search(m-a[i]-a[j]-a[k]))
                {flag=0;break;}
        }
        if(!flag)cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

你可能感兴趣的:(namespace)