抽签

来源:互联网 发布:他趣是什么软件 编辑:程序博客网 时间:2024/04/28 16:04
<span style="font-size:18px;"></span><pre name="code" class="cpp">原始代码:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=50;int main(){    int n,m,k[maxn];    scanf("%d%d",&n,&m);    for(int i=0;i<n;i++)    {        scanf("%d",&k[i]);    }    bool f=false;    for(int a=0;a<n;a++)    for(int b=0;b<n;b++)    for(int c=0;c<n;c++)    for(int d=0;d<n;d++)    {        if(k[a]+k[b]+k[c]+k[d]==m)        {            f=true;        }    }    if(f)        puts("Yes");    else        puts("No");    return 0;}


<span style="font-size:18px;"></span><pre name="code" class="cpp">第一次优化,k[d]=m-k[a]-k[b]-k[c],搜索k[d]的值就可以
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int maxn=10000;int n,m,k[maxn];bool binary_search(int x){    int l=0,r=n;    while(r-l>=1)    {        int i=(l+r)/2;        if(k[i]==x)            return true;        else if(k[i]<x)            l=i+1;        else            r=i;    }    return false;}int main(){    scanf("%d%d",&n,&m);    for(int i=0;i<n;i++)        scanf("%d",&k[i]);    sort(k,k+n);    bool f=false;    for(int a=0;a<n;a++)    {        for(int b=0;b<n;b++)        {            for(int c=0;c<n;c++)            {                if(binary_search(m-k[a]-k[b]-k[c]))                    f=true;            }        }    }    if(f)        puts("Yes");    else        puts("No");    return 0;}


<span style="font-size:18px;">二次优化,k[d]+k[c]=m-k[a]-k[b],找出 </span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">k[d]+k[c]所得的数字,然后搜索</span>
<span style="font-size:18px;">#include <iostream>  #include<algorithm>  using namespace std;  int k[100];  int kk[100];  int n;  bool f;  bool binary_search(int x)  {      int l = 0, r = n;      int mid;      while(l < r)      {          mid = (l+r)/2;            if(kk[mid] == x)              return true;          else if(x < kk[mid])              r = mid - 1;          else              l = mid + 1;        }      return false;  }  int main()  {      int m;      cin >> n >> m;      for(int i=0; i<n; i++)      {          cin >> k[i];      }      int a, b, c, d;      for(int c=0; c<n; c++)      {          for(int d=0; d<n; d++)          {              kk[c*n + d] = k[c] + k[d];          }      }      sort(kk,kk+n*n);      for(a=0; a<n; a++)      {                for(b=0; b<n; b++)              {                  if(binary_search(m-k[a]-k[b]))                      f = true;                }        }      if(f)          cout << "Yes\n";      else          cout << "No\n";      return 0;  }  </span>

0 0
原创粉丝点击