A 掌握魔法の东东 II

从瑞神家打牌回来后,东东痛定思痛,决定苦练牌技,终成赌神!
东东有 A × B 张扑克牌。每张扑克牌有一个大小(整数,记为a,范围区间是 0 到 A - 1)和一个花色(整数,记为b,范围区间是 0 到 B - 1。
扑克牌是互异的,也就是独一无二的,也就是说没有两张牌大小和花色都相同。
“一手牌”的意思是你手里有5张不同的牌,这 5 张牌没有谁在前谁在后的顺序之分,它们可以形成一个牌型。 我们定义了 9 种牌型,如下是 9 种牌型的规则,我们用“低序号优先”来匹配牌型,即这“一手牌”从上到下满足的第一个牌型规则就是它的“牌型编号”(一个整数,属于1到9):
同花顺: 同时满足规则 5 和规则 4.
炸弹 : 5张牌其中有4张牌的大小相等.
三带二 : 5张牌其中有3张牌的大小相等,且另外2张牌的大小也相等.
同花 : 5张牌都是相同花色的.
顺子 : 5张牌的大小形如 x, x + 1, x + 2, x + 3, x + 4
三条: 5张牌其中有3张牌的大小相等.
两对: 5张牌其中有2张牌的大小相等,且另外3张牌中2张牌的大小相等.
一对: 5张牌其中有2张牌的大小相等.
要不起: 这手牌不满足上述的牌型中任意一个.
现在, 东东从A × B 张扑克牌中拿走了 2 张牌!分别是 (a1, b1) 和 (a2, b2). (其中a表示大小,b表示花色)
现在要从剩下的扑克牌中再随机拿出 3 张!组成一手牌!!
其实东东除了会打代码,他业余还是一个魔法师,现在他要预言他的未来的可能性,即他将拿到的“一手牌”的可能性,我们用一个“牌型编号(一个整数,属于1到9)”来表示这手牌的牌型,那么他的未来有 9 种可能,但每种可能的方案数不一样。
现在,东东的阿戈摩托之眼没了,你需要帮他算一算 9 种牌型中,每种牌型的方案数。

输入描述

第 1 行包含了整数 A 和 B (5 ≤ A ≤ 25, 1 ≤ B ≤ 4).

第 2 行包含了整数 a1, b1, a2, b2 (0 ≤ a1, a2 ≤ A - 1, 0 ≤ b1, b2 ≤ B - 1, (a1, b1) ≠ (a2, b2)).

输出描述

输出一行,这行有 9 个整数,每个整数代表了 9 种牌型的方案数(按牌型编号从小到大的顺序)

输入样例

Input
5 2
1 0 3 1
Output
0 0 0 0 8 0 12 36 0
Input
25 4
0 0 24 3
Output
0 2 18 0 0 644 1656 36432 113344

思路分析

因为题中数据范围比较小,所以可以直接暴力枚举就可以。时间复杂度为O(n3)O(n^3)O(n3) 。以此枚举将要抽到的3种牌,注意题目要求没有顺序之分,故当枚举第3张牌时,第4张牌要在第3张牌的“后面”,第5张牌要在第4张牌的“后面”。“后面”可以定义为,相同花色时大小较大,花色不同时花色较大。

代码

#include<iostream>
#include<set>
#include<algorithm>
#include<vector>
using namespace std;
int A,B,a1,b1,a2,b2,a3,b3,a4,b4,a5,b5,ans[10],num;
struct poker{int  number,color;bool operator<(const poker& p) const{return number!=p.number?  number<p.number: color<p.color;}
};
vector<poker> v;int main(){   cin>>A>>B;cin>>a1>>b1>>a2>>b2;for(int i1=0;i1<B;i1++){for(int j1=0;j1<A;j1++){if(i1==b1&&j1==a1) continue;if(i1==b2&&j1==a2) continue;for(int i2=i1;i2<B;i2++){int j2=0;if(i2==i1){j2=j1;}for(;j2<A;j2++){if(i2==b1&&j2==a1) continue;if(i2==b2&&j2==a2) continue;if(i2==i1&&j2==j1) continue;                   for(int i3=i2;i3<B;i3++){int j3=0;if(i3==i2){j3=j2;}for(;j3<A;j3++){if(i3==b1&&j3==a1) continue;if(i3==b2&&j3==a2) continue;if(i3==i1&&j3==j1) continue;                         if(i3==i2&&j3==j2) continue;v.clear();v.push_back({a1,b1});v.push_back({a2,b2});v.push_back({j1,i1});v.push_back({j2,i2});                          v.push_back({j3,i3});num++;sort(v.begin(),v.end());//1、同花顺 if(v[0].number==v[1].number-1&&v[1].number==v[2].number-1&&v[2].number==v[3].number-1&&v[3].number==v[4].number-1){if(v[0].color==v[1].color&&v[1].color==v[2].color&&v[2].color==v[3].color&&v[3].color==v[4].color){ans[1]++;v.pop_back();continue;}}//2、炸弹if(v[0].number==v[3].number||v[1].number==v[4].number){ans[2]++;v.pop_back();continue;}//3、3带2if((v[0].number==v[1].number&&v[2].number==v[4].number)||(v[0].number==v[2].number&&v[3].number==v[4].number) ){ans[3]++;v.pop_back();continue;}//4、同花if(v[0].color==v[1].color&&v[1].color==v[2].color&&v[2].color==v[3].color&&v[3].color==v[4].color){ans[4]++;v.pop_back();continue;    }//5、顺子 if(v[0].number==v[1].number-1&&v[1].number==v[2].number-1&&v[2].number==v[3].number-1&&v[3].number==v[4].number-1){ans[5]++;v.pop_back();continue;    }//6、三条if(v[0].number==v[2].number||v[1].number==v[3].number||v[2].number==v[4].number){ans[6]++;v.pop_back();continue;}                            //7、两对if(v[0].number==v[1].number){if(v[2].number==v[3].number||v[3].number==v[4].number){ans[7]++;v.pop_back();continue;   }}if(v[1].number==v[2].number&&v[3].number==v[4].number){ans[7]++;v.pop_back();continue;  }//8、一对if(v[0].number==v[1].number||v[1].number==v[2].number||v[2].number==v[3].number||v[3].number==v[4].number){ans[8]++;v.pop_back();continue;} //9、ans[9]++; v.pop_back();}}v.pop_back();}}v.pop_back();}}for(int i=1;i<=9;i++){cout<<ans[i]<<" ";}}

SDU 程序设计思维与实践 Week6 掌握魔法の东东 II相关推荐

  1. SDU程序设计思维Week6-限时模拟 掌握魔法の东东II

    程序设计思维Week6-限时模拟 掌握魔法の东东II Description 东东有 A × B 张扑克牌.每张扑克牌有一个大小(整数,记为a,范围区间是 0 到 A - 1)和一个花色(整数,记为b ...

  2. SDU 程序设计思维与实践 week7 B TT 的旅行日记【Dijkstra】

    B TT 的旅行日记 题意描述 众所周知,TT 有一只魔法猫 今天他在 B 站上开启了一次旅行直播,记录他与魔法猫在喵星旅游时的奇遇. TT 从家里出发,准备乘坐猫猫快线前往喵星机场.猫猫快线分为经济 ...

  3. 山东大学程序设计思维与实践 四月模拟:TT与可怜的猫

    4月模拟-TT与可怜的猫 程序设计思维实践-复杂模拟题训练2 山东大学计算机科学与技术学院程序设计思维与实践 sdu程序设计思维与实践 山东大学程序设计思维实践作业 山大程序设计思维实践 山东大学程序 ...

  4. 山东大学计算机科学与技术学院程序设计思维与实践作业 week10-树型数据结构及其应用

    山东大学计算机科学与技术学院程序设计思维与实践作业 山大程序设计思维与实践作业 sdu程序设计思维与实践 山东大学程序设计思维实践作业H10 山大程序设计思维实践作业H10 山东大学程序设计思维与实践 ...

  5. 山大程序设计思维与实践 六月模拟:猪国杀

    六月模拟:猪国杀 山东大学计算机科学与技术学院程序设计思维与实践作业 山大程序设计思维与实践 sdu程序设计思维与实践 山东大学程序设计思维实践作业H 山大程序设计思维实践作业H 山东大学程序设计思维 ...

  6. 程序设计思维与实践 Week9 作业三道

    A - 咕咕东的目录管理器 题面 咕咕东的雪梨电脑的操作系统在上个月受到宇宙射线的影响,时不时发生故障,他受不了了,想要写一个高效易用零bug的操作系统 -- 这工程量太大了,所以他定了一个小目标,从 ...

  7. 山东大学计算机科学与技术学院程序设计思维与实践作业 week5-数学基础与线性结构

    山东大学计算机科学与技术学院程序设计思维与实践作业 山大程序设计思维与实践作业 sdu程序设计思维与实践 山东大学程序设计思维实践作业H5 山大程序设计思维实践作业H5 山东大学程序设计思维与实践 w ...

  8. SDU程序设计思维实践题目总结

    题目来源及链接 题目名称及讲解博客链接 涉及算法 原题以及原题链接 第二周作业 Maze BFS POJ-3984 Pour water BFS POJ-1606 第二周实验 化学 模拟 codefo ...

  9. SDU程序设计思维Week7-作业 C-TT的美梦

    程序设计思维Week7-作业 C-TT的美梦 Description 有 N 个商业城市,编号 1 - N,其中 1 号城市是 TT 所在的城市,即首都. 喵星上共有 M 条有向道路在商业城市相互往来 ...

最新文章

  1. ORA-01031: insufficient privileges的解决方法
  2. 带有支付功能的产品如何进行测试
  3. MFC中定义全局变量和全局函数的方法
  4. Rnotebook中用python画图
  5. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'xx' is defined
  6. Maxscript中渲染中文版Vray完成贴图(VrayCompleteMap)的方法
  7. hive-内置函数(常用内置函数汇总)
  8. 设计企业网站大纲_企业网站设计布局
  9. Qt笔记-Q3DScatter中元素的移动和旋转
  10. [极客大挑战 2019]Knife [RoarCTF 2019]Easy Calc
  11. jpa 查询编写sql_学习编写基本SQL查询
  12. 谈嵌入式软件分层设计
  13. Latex排版技巧:输入罗马数字
  14. ML Hyperlink
  15. 华硕服务器不分区重装系统,华硕笔记本重装系统不能进入系统怎么办
  16. 电子科大CTF安全萌新赛部分WP
  17. 沟通和编程一样,也是一门艺术系列1(最佳的沟通态度)
  18. ae怎么设置gpu渲染_AE怎么开启影驰GTX750 GPU显卡加速?AE渲染开启GPU设置教程
  19. python的pyaudio教程入门_Python PyAudio 安装使用
  20. 枚举类型(2):实现,而非继承、随机选取、使用接口组织枚举

热门文章

  1. 大四学年在某软件公司实习(java + groovy + vue.js)近半年工作总结
  2. Nginx配置和路由
  3. WebRTC本地媒体——媒体模型
  4. 一年级小嘎蹦豆儿的故事
  5. 苹果手机最傻Ⅹ的地方:
  6. android学习和广告平台赚钱zz
  7. 游戏数据上链面临的挑战
  8. 数据结构专题-学习笔记:李超线段树
  9. 使用ElasticSearch踩过的坑
  10. android同步功能吗,Android手机和iCloud同步是什么鬼?