G.智商检测(ACM实验室新生赛)

n==4和n==5时,五张牌都知道。

n==1时,只知道一张牌,不能凑出。

n==2时,如果两张牌相加为m,则能凑出。

n==3时,如果3张中的2张或是剩下2张相加为m,则能凑出。

#include<string>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
 using namespace std;
 int n,m;
 int a[10]={};
 int main()
 {
     int x;
     cin>>n>>m;
     for(int i=1;i<=n;i++)   
     {
         cin>>x;
         a[x]=1;
     }
     if(m<3||m>9)
     {
         cout<<"no"<<endl;
         return 0;
     }
     if(n==5||n==4)
         cout<<"yes"<<endl;
     else if(n==1)
         cout<<"no"<<endl;
     else
     {
         int vis=0;
         if(n==3)
         {
             for(int i=1;i<=5;i++)
             for(int j=1;j<=5;j++)
             if(i!=j)
             {
                 if(i+j==m)
                 {
                     if(a[i]==1&&a[j]==1)
                         vis=1;
                     if(a[i]==0&&a[j]==0)
                         vis=1;
                 }
             }
         }
         if(n==2)
         {
             for(int i=1;i<=5;i++)
             for(int j=1;j<=5;j++)
             if(i!=j)
             {
                 if(i+j==m)
                 {
                     if(a[i]==1&&a[j]==1)
                         vis=1;
                 }
             }
         }
         if(vis)
             cout<<"yes"<<endl;
         else
             cout<<"no"<<endl;
     }
     printf("\n");
     return 0;
 }

发表回复