2015编程之美挑战赛:扑克牌 全排列
来源:互联网 发布:淘宝高仿nike鞋店推荐 编辑:程序博客网 时间:2024/04/30 09:18
第一题:扑克牌
题目连接:http://hihocoder.com/contest/msbop2015round2b/problem/1
时间限制:2000ms
单点时限:1000ms
内存限制:256MB
- 样例输入
51 TC2 TC TS5 2C AD AC JC JH4 AC KC QC JC6 AC AD AS JC JD KD
- 样例输出
Case #1: 1Case #2: 0Case #3: 48Case #4: 24Case #5: 120
描述
一副不含王的扑克牌由52张牌组成,由红桃、黑桃、梅花、方块4组牌组成,每组13张不同的面值。现在给定52张牌中的若干张,请计算将它们排成一列,相邻的牌面值不同的方案数。
牌的表示方法为XY,其中X为面值,为2、3、4、5、6、7、8、9、T、J、Q、K、A中的一个。Y为花色,为S、H、D、C中的一个。如2S、2H、TD等。
输入
第一行为一个整数T,为数据组数。
之后每组数据占一行。这一行首先包含一个整数N,表示给定的牌的张数,接下来N个由空格分隔的字符串,每个字符串长度为2,表示一张牌。每组数据中的扑克牌各不相同。
输出
对于每组数据输出一行,形如"Case #X: Y"。X为数据组数,从1开始。Y为可能的方案数,由于答案可能很大,请输出模 264 之后的值。
数据范围
1 ≤ T ≤ 20000
小数据
1 ≤ N ≤ 5
大数据
1 ≤ N ≤ 52
实现代码如下:
#include <cstring>#include <algorithm>#include <iostream>#include <cstdio>using namespace std;//定义一个结构体,因为牌是有花色的//相同牌值不同花色的牌在同一位置时是算做不同的情况的typedef struct node{ int x,y;//x表示牌面的值,y本应表示花色的(为了区分相同牌面的牌有多张) //这里简单处理,直接把y记为这张牌的输入次序了}NODE;NODE cnt[55];//结构体比较函数int cmp(const NODE &a,const NODE &b){ if(a.x==b.x) return a.y<b.y; return a.x<b.x;}//把输入的牌的牌面转换为1到13int change(char s){ int c; switch(s) { case 'A': c=1; break; case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':c=s-'0'; break; case 'T': c=10; break; case 'J': c=11; break; case 'Q': c=12; break; case 'K': c=13; } return c;}int main(){ int t,T=1,n; char s,c; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0;i<n;i++) { cin>>s>>c; cnt[i].x=change(s); cnt[i].y=i; } sort(cnt,cnt+n,cmp); int sum=0; do { bool flag=1; for(int i=1;i<n;i++) { if(cnt[i].x==cnt[i-1].x) { flag=0; break; } } if(flag) sum++; }while(next_permutation(cnt,cnt+n,cmp));//这里用了全排列的函数 printf("Case #%d: %d\n",T++,sum); } return 0;}
0 0
- 2015编程之美挑战赛:扑克牌 全排列
- 2015编程之美挑战赛
- 编程之美 扑克牌
- 全排列(编程之美)
- 2015编程之美挑战赛初赛题目
- [编程之美-11]字符串的全排列问题
- [编程之美-04]字符串的全排列
- 2015微软编程之美挑战赛初赛第1场
- 2015微软编程之美挑战赛初赛第2场
- 2015编程之美挑战赛:八卦的小冰
- 2015编程之美初赛第二场扑克牌
- hihoCoder 1159 扑克牌 编程之美2015初赛第二场
- 2013 编程之美挑战赛 长方形
- 2013 编程之美挑战赛 竞价
- 2013 编程之美挑战赛 相似字符串
- 2013 编程之美挑战赛 管道系统
- 2013 编程之美挑战赛 集会
- 2013 编程之美挑战赛 集会
- Install Beyond Comapre on ubuntu 14
- 工作日志 4.27
- 联想G480—win8.1安装Centos7双系统
- hdu 2852 KiKi's K-Number
- HDU ACM 1041Computer Transformation(大数模拟+找规律)
- 2015编程之美挑战赛:扑克牌 全排列
- c++模拟操作系统进程调度算法(优先数,时间片轮转)
- iOS 数据持久化之NSUserDefaults-保存Settings
- 分析、化验、检验、检测、测量、测试、计量、实验、试验的区别
- 几个FireFox的插件
- 心态篇一
- ATM自动取款机系统的功能需求分析
- 陈华:我是如何走上互联网这条路的
- 安装第三方库rsa遇到的问题