UVA 11210 Chinese Mahjong(中国麻将 , 大模拟)

解题思路:

关键在于如何判断十四张牌能否和牌,这里采用dfs来判断,详情看代码。

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <stack>
using namespace std;
const int maxn = 1000 + 10;
string card[] = { "1T" , "2T" , "3T" , "4T" , "5T" , "6T" , "7T" , "8T" , "9T" ,
"1S" , "2S" , "3S" , "4S" , "5S" , "6S" , "7S" , "8S" , "9S" ,
"1W" , "2W" , "3W" , "4W" , "5W" , "6W" , "7W" , "8W" , "9W" ,
"DONG" , "NAN" , "XI" , "BEI" , "ZHONG" , "FA" , "BAI"};
string S[20];
int C[maxn];
int h[maxn];
int id(string s)
{
	for(int i=0;i<34;i++) if(s == card[i]) return i;
	return -1;
}
int dfs(int dep)
{
	for(int i=0;i<34;i++) if(h[i] >= 3)
	{
		if(dep == 3) return 1;
		h[i] -= 3;
		if(dfs(dep + 1)) return 1;
		h[i] += 3;
	}
	for(int i=0;i<=24;i++) if(i % 9 <= 6 && h[i] >= 1 && h[i+1] >= 1 && h[i+2] >= 1)
	{
		if(dep == 3) return 1;
		h[i]--;h[i+1]--;h[i+2]--;
		if(dfs(dep + 1)) return 1;
		h[i]++;h[i+1]++;h[i+2]++;
	}
	return 0;
}
bool check()
{
	for(int i=0;i<34;i++)
	{
		if(h[i] >= 2)
		{
			h[i] -= 2;
			if(dfs(0)) return 1;
			h[i] += 2;
		}
	}
	return 0;
}
int solve()
{
	int flag = 0;
	for(int i=0;i<34;i++)
	{
		memset(h , 0 , sizeof(h));
		for(int j=0;j<13;j++)
			h[C[j]]++;
		if(h[i] >= 4) continue;
		h[i]++;
		if(check())
		{
			flag = 1;
			cout<<' '<<card[i];
		}
		h[i]--;
	}
	if(!flag) printf(" Not ready");
	printf("\n");
}
int main()
{
	string str; int kcase = 1;
	while(cin>>str && str != "0")
	{
		S[0] = str;C[0] = id(str);
		for(int i = 1;i<13;i++)
			{ cin>>S[i]; C[i] = id(S[i]); }
		printf("Case %d:",kcase++);
		solve();
	}
	return 0;
}
时间: 2024-12-24 10:10:03

UVA 11210 Chinese Mahjong(中国麻将 , 大模拟)的相关文章

uva 11210 Chinese Mahjong(暴力枚举)

uva 11210 Chinese Mahjong Mahjong () is a game of Chinese origin usually played by four persons with tiles resembling dominoes and bearing various designs, which are drawn and discarded until one player wins with a hand of four combinations of three

UVa 11210 Chinese Mahjong (暴力,递归寻找)

题意:这个题意.有点麻烦,就是说给定13张牌,让你求能“听”的牌.(具体的见原题) 原题链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2151 析:看到这个题,真是麻烦啊,我又不懂麻将,看了好久才明白什么是“听”.分析一下思路. 首先对所有的牌都进行编号,然后暴力,首先的是先判断是哪个是将,然后再进一步判断, 哪一个是刻子,和顺子

UVA 11210 Chinese Mahjong

#include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cctype> #include <cstdio> #include <string> #inc

11210 - Chinese Mahjong(dfs)

题目:11210 - Chinese Mahjong 题目大意:给出十三个麻将, 问再取哪一个能胡?把所有的情况列出来,并且按照题目要求的顺序.胡的条件需要一个而且仅一个对,然后剩下要么是三个相同的,要么是三个连续的(前提是后缀相同,并且只有 T, S, W在考虑范围内) 解题思路:把要取的情况一个个枚举出来,然后dfs, 找是否加入这个可以胡就可以了,找的话就三种情况去判断一下.但是要注意:三个连续要注意需要后缀相同,我这里是把麻将转成数字,然后统计这个麻将出现的次数,所以需要些边界的判断.

中国十大技术社区你都知道哪些?

社区是聚集一类具有相同爱好或者相同行业的群体,IT技术社区就是聚集了IT行业内的技术人,在技术社区可以了解到行业的最新进展,学习最前沿的技术,认识有相同爱好的朋友,在一起学习和交流. 技术社区一般有三类人:第一类技术人,就是遇到问题搜索一下,绝大部分程序员都是通过这种方式来了解技术社区的,或者遇到问题的时候在社区去提问:第二类的技术人,有意识的常去技术社区查看博客,学习新知识:第三类人,就是写文章的人,喜欢分享某一类技术,或者他们的实战经历.往往写文章的人,也喜欢看文章. 总的来说,技术社区就是

AC日记——神奇的幻方 洛谷 P2615(大模拟)

题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将K填在(K−1)

uva 10710 - Chinese Shuffle(完美洗牌)

题目链接:uva 10710 - Chinese Shuffle 题目大意:给出n张牌,按照顺序排列好,进行n-1次完美洗牌,问是否可以变成原来德序列. 解题思路:根据完美洗牌的性质,于是第x张牌经过p次后德位置有x?2p,于是只需要证明第1张牌最后是否在远处即可. #include <cstdio> #include <cstring> typedef long long ll; ll pow_mod(ll a, ll n, ll mod) { ll ans = 1; while

罗森伯格再次荣获中国十大布线品牌以及数据中心产品应用奖

由中国工程建设标准化协会主办,中国数据中心工作组(CDCC).综合布线工作组联合承办的2016中国数据中心年度论坛于11月15~16日在北京新云南假日大酒店召开.论坛中揭晓了2016年度中国综合布线十大品牌.罗森伯格作为全球可信赖的通讯网络供应商, 在本次大会上再次荣获"中国十大布线品牌"以及"数据中心产品应用奖"两大奖项."中国综合布线十大品牌"评选活动是综合布线工作组基于对综合布线产业的长期关注和理解,以及对于品牌竞争力的透彻分析,权威开展的

URAL 1715. Another Ball Killer (大模拟)

1715. Another Ball Killer Time limit: 2.0 second Memory limit: 64 MB Contestants often wonder what jury members do during a contest. Someone thinks that they spend all the contest fixing bugs in tests. Others say that the jury members watch the conte