## 2017.02.18队内胡策(三) 斗地主 ##暴力模拟
来源:互联网 发布:阿里云app备案 编辑:程序博客网 时间:2024/04/30 19:27
//红太阳学长的代码片#include<iostream>#include<cstdio>#include<queue>#include<algorithm>using namespace std;int a[20];struct joker{ int p[20]; int ans; void print() { for(int i=0;i<=14;i++) for(int j=this->p[i];j>=1;j--) printf("%d ",i); printf("\n"); }}A[105];int Ans;queue<joker> q;void bfs(){ joker B; while(!q.empty()) { B=q.front();q.pop(); if(B.ans>=Ans) return ; bool emp=0; for(int i=0;i<=14;i++) if(B.p[i]){emp=1;break;} if(!emp){Ans=min(Ans,B.ans);break;} B.ans++;bool h=0; for(int i=3;i<=10;i++)//单顺子 { int j=0; while(true) { j++; if(!B.p[i+j-1]) break; }j--; if(j>=5) { int k=1; while(k<=j) { B.p[i+k-1]--; if(k>=5)q.push(B); k++; }k--; while(k>=1) { B.p[i+k-1]++; k--; } } } for(int i=3;i<=12;i++)//双顺子 { int j=0; while(true) { j++; if(B.p[i+j-1]<2) break; }j--; if(j>=3) { int k=1; while(k<=j) { B.p[i+k-1]-=2; if(k>=3)q.push(B); k++; }k--; while(k>=1) { B.p[i+k-1]+=2; k--; } } } for(int i=3;i<=13;i++)//三顺子 { int j=0; while(true) { j++; if(B.p[i+j-1]<3) break; }j--; if(j>=2) { int k=1; while(k<=j) { B.p[i+k-1]-=3; if(k>=2)q.push(B); k++; }k--; while(k>=1) { B.p[i+k-1]+=3; k--; } } } for(int i=2;i<=14;i++)//san dai { if(B.p[i]>=3) { B.p[i]-=3; for(int j=0;j<=14;j++)//san dai 1 { if(B.p[j]) { B.p[j]--; q.push(B); B.p[j]++; } } for(int j=0;j<=14;j++)//san dai 2 { if(B.p[j]>=2) { B.p[j]-=2; q.push(B); B.p[j]+=2; } } B.p[i]+=3; } } for(int i=2;i<=14;i++)//si dai 2 { if(B.p[i]>=4) { B.p[i]-=4; for(int j=0;j<=14;j++)//san dai dan { if(B.p[j]) { B.p[j]--; for(int k=0;k<=j;k++) { if(B.p[k]) { B.p[k]--; q.push(B); B.p[k]++; } } B.p[j]++; } } for(int j=0;j<=14;j++)//san dai shuang { if(B.p[j]>=2) { B.p[j]-=2; for(int k=0;k<=j;k++) { if(B.p[k]>=2) { B.p[k]-=2; q.push(B); B.p[k]+=2; } } B.p[j]+=2; } } B.p[i]+=4; } } int pi=0; for(int i=0;i<=14;i++) if(B.p[i]) pi++; Ans=min(Ans,B.ans+pi-1); }}void read(int &a){ a=0; char c=getchar(); while(c>'9'||c<'0') c=getchar(); while(c>='0'&&c<='9') { a*=10; a+=c-'0'; c=getchar(); }}int main(){// freopen("landlords.in","r",stdin);// freopen("landlords.out","w",stdout); int T,n,x; scanf("%d%d",&T,&n); if(n==2) { while(T--) { scanf("%d%d",&a[1],&x); scanf("%d%d",&a[2],&x); if(a[1]==a[2]) puts("1"); else puts("2"); } } if(n==3) { while(T--) { scanf("%d%d",&a[1],&x); scanf("%d%d",&a[2],&x); scanf("%d%d",&a[3],&x); if(a[1]==a[2]&&a[1]==a[3]) { puts("1");continue; } sort(a+1,a+3+1); if(a[1]==a[2]||a[2]==a[3]) { puts("2");continue; } puts("3"); } } if(n==4) { while(T--) { scanf("%d%d",&a[1],&x); scanf("%d%d",&a[2],&x); scanf("%d%d",&a[3],&x); scanf("%d%d",&a[4],&x); if(a[1]==a[2]&&a[1]==a[3]&&a[1]==a[4]) { puts("1");continue; } sort(a+1,a+4+1); if(a[1]==a[2]&&a[1]==a[3]) { puts("1");continue;} if(a[2]==a[3]&&a[2]==a[4]) { puts("1");continue;} if(a[1]==a[2]&&a[3]==a[4]) { puts("2");continue;} if(a[1]==a[2]||a[2]==a[3]||a[3]==a[4]) { puts("3");continue;} puts("4"); } } if(n>=5) { while(T--) { for(int i=1;i<=n;i++) { read(x);if(x==1) x=14; A[T].p[x]++; read(x); } while(!q.empty()) q.pop(); q.push(A[T]);Ans=n; bfs(); printf("%d\n",Ans); } } fclose(stdin); fclose(stdout); return 0;}
0 0
- ## 2017.02.18队内胡策(三) 斗地主 ##暴力模拟
- 2015noipT3 斗地主 暴力模拟
- 斗地主- (三)
- java模拟斗地主发牌(CollectionsDemo)
- 利用集合模拟斗地主(2)
- hdu4930 模拟斗地主
- 集合模拟斗地主
- UE4局域网斗地主(三)
- HDU 4930 斗地主模拟
- Java模拟斗地主发牌
- java 模拟斗地主分派
- 九度OJ 1363 欢乐斗地主 (模拟,细心)
- 利用java集合模拟斗地主(发牌)
- 模拟斗地主洗牌和发牌(集合实现)
- 斗地主(1)
- 斗地主(2)
- 斗地主(3)
- 斗地主(4)
- Chrome快捷键大全
- 关于博达CMS制作网站的心得与体会
- MXNet官方文档教程(5):CPU&GPU多维数组
- Python文件的编码注释 utf-8
- Linux下C语言应用编程——GCC和GDB的使用
- ## 2017.02.18队内胡策(三) 斗地主 ##暴力模拟
- Android Studio versionCode 自增 打包命名
- 数据分析利器之hive优化十大原则
- 比XGBOOST更快--LightGBM介绍
- 210. Course Schedule II
- 论XGBOOST科学调参
- Android面试(1)
- HDU2083 简易版之最短路径
- 开源PLM软件Aras详解七 在Aras的Method中如何引用外部DLL