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

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

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

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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;
}
#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; }
#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;
 }

发表回复