1 条题解
-
1
#include<bits/stdc++.h> using namespace std; int n,m,t[4001],a[4001]; bool bj; bool check() { for(int i=1;i<=n;i++) { if(t[i]>=2)//只有凑成对子以上个数时才能胡牌。 { bool ok=1;//进行标记是否找到。 t[i]-=2;//将其当做对子。 for(int j=1;j<=n+2;j++)a[j]=t[j];//不能改变原来数组的值。 for(int j=1;j<=n+2;j++) { if(a[j]<0)//如果小于0则代表不能胡牌,直接退出循环,进行下一个对子的判断。 { ok=0; break; } a[j]%=3;//刻子 a[j+1]-=a[j];//顺子 a[j+2]-=a[j];//顺子 } t[i]+=2; if(ok)return 1; } } return 0; } int main() { cin>>n>>m; for(int i=1,x;i<=m*3+1;i++)cin>>x,t[x]++;//用桶来存储麻将个数。 for(int i=1;i<=n;i++) { t[i]++; if(check())bj=1,cout<<i<<" "; //只要找到一个解就标记找到了,并输出解。 t[i]--; } if(!bj)cout<<"NO"; return 0; }
- 1
信息
- ID
- 2982
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 5
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者