mahjong
题目描述
“为什么, 你们的力量在哪里得到如此地......”
“我们比 1 分钟前的我们还要进步, 虽然很微小, 但每转一圈就会前进一寸。这就是钻头啊!”
“那才是通向毁灭的道路。为什么就没有意识到螺旋族的极限”
“那是你的极限。那只不过是在封闭的宇宙里, 象国王一样将其他生命困住的你自己的极限而已。给
我记好了, 我们的钻头将在这片宇宙中钻开风洞。已经倒下的人们的愿望, 和后继迩来的人们的希望。将
这两股思念交织成二重螺旋, 凿出驰骋于明天的未来之路。这就是天元突破! 这就是 Gurren Lagann! 我
的钻头是开创天际的钻头!”
终于,GranzeBorma 爆炸了。
“那么, 这片宇宙, 一定要保护好......”
西蒙回答了 Anti-Spiral 这最后的一句话。
“那是当然。人类还没有愚蠢到那种地步”
Anti-Spiral 的终结, 化做为银河各地的螺旋族欢喜的信息, 从四面八方传来。
——在那这之后要说的话, 也所剩无几了。
回到地球后的妮亚与西蒙结了婚, 并且永远地离开了, 因为她是由 Anti-Spiral 创造出来的假想生命。
但是在离别的那一瞬间, 妮亚与西蒙依然互相微笑着。
时光飞逝, 在地球大总统罗修的努力下, 全银河螺旋力和平利用会议得以召开。超银河大 Gurren 承
载着地球的代表踏上旅途。还有通过新闻, 想起与大家的种种回忆的昔日大 Gurren 团的成员。
然后——
在一个远离市区的地方, 有一个男人教会了少年使用钻头的方法。
夜空中,Gurren Lagann 画出螺旋的轨道, 从男人与少年的头顶飞过。
在那前方, 螺旋的朋友们正在那片群星中等待着我们。
终于有一天,在这颗古老的星球上诞生了一种了不起的游戏——mahjong
游戏只使用万、筒、条三种花色,即以下 27 种牌面:
每一种牌面各有 4 张,总计 108 张牌。
胡牌的牌型为 4 个“句子”和 1 副“将牌”。句子一共以下有两种形式: • 三张相同花色且连续的牌,如图1 • 三张相同的牌,如图2 图1 图2 将牌:两张相同的牌,如: 当手牌构成 4 个“句子”和 1 副“将牌”时则构成胡牌牌型,如: 听牌:当 13 张手牌再加上某一张就能成胡牌牌型时称之为听牌,如: 听牌时再加上某一张就能胡牌,那我们就称那张牌是听的牌 如图牌型就听三、六条 现在你手中有 14 张牌,求打出第几张牌会使得你听得牌的张数最多,最多听多少张牌
搜索即可,暴力枚举丢掉哪张牌...每种牌爆搜判断过去
意会一下...代码有注释(tong[][]是一个桶数组)
#include<cstdio>
#include<queue>
#include<iostream>
#include<cstring>
using namespace std;
inline int read(){
int ans=,f=;char chr=getchar();
while(!isdigit(chr)){if(chr=='-') f=-;chr=getchar();}
while(isdigit(chr)){ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
return ans*f;
}const int n=;
struct P{int cnt,typ,num;char p;}a[];
int tong[][],ans1,ans2;
bool dfs(int a,int b,int c,int d){//a--->两个相同牌个数 b--->牌型 c--->将 d--->句子
if(a>=) return ;
bool ff;int fa,fb;
if(c==&&d==) return ;
if(b==) fb=,fa=a+;else fb=b+,fa=a;//下一个牌型
if(tong[a][b]>=&&!c){//当将牌用
tong[a][b]-=;
ff=dfs(a,b,,d);
tong[a][b]+=;
if(ff) return ;
}if(tong[a][b]>=){//当句子用
tong[a][b]-=;
ff=dfs(fa,fb,c,d+);
tong[a][b]+=;
if(ff) return ;
}if(b>&&tong[a][b]&&tong[a][b-]&&tong[a][b-]){//当对子(要加上一个)用
tong[a][b]--,tong[a][b-]--,tong[a][b-]--;
ff=dfs(a,b,c,d+);
tong[a][b]++,tong[a][b-]++,tong[a][b-]++;
if(ff) return ;
}return dfs(fa,fb,c,d);
}
inline bool hu(){
int a=,b=;
for(int i=;i<=n;++i){
for(int j=;j<;j++){
if(tong[j][i]==) a++;
if(tong[j][i]==) b++;
}
}
if(a==&&b==) return ;
return ;
}
int main(){
for(int i=,x;i<=n;++i){
cin>>x;char chr=getchar();
a[i].num=x;
if(chr=='p') a[i].typ=;
else if(chr=='w') a[i].typ=;
else a[i].typ=;
++tong[a[i].typ][a[i].num];
}int pp=;
if(hu()) pp=-;
for(int i=,pp;i<=n;++i){pp=;
--tong[a[i].typ][a[i].num];
for(int j=;j<=;++j)
for(int k=;k<=;++k){
++tong[j][k];
if(dfs(,,,)) pp+=-tong[j][k];
tong[j][k]--;
}++tong[a[i].typ][a[i].num];
if(pp>ans1) ans1=pp,ans2=i;
}
cout<<ans2<<" "<<ans1+pp;
return ;
}
/*
1p 1p 1p 2w 2w 2w 3w 3w 3w 1s 1s 1s 2s 2s
13 7
*/
/*
1p 1p 1p 2w 2w 2w 3w 3w 3w 1s 1s 1s 6s 6s
1 3
*/
mahjong的更多相关文章
- 2015暑假多校联合---Mahjong tree(树上DP 、深搜)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5379 Problem Description Little sun is an artis ...
- UVa 11210 (DFS) Chinese Mahjong
大白书第一章的例题,当时看起来很吃力,现如今A这道题的话怎么写都无所谓了. 思路很简单,就是枚举胡哪张牌,然后枚举一下将牌,剩下如果能找到4个顺子或者刻子就胡了. 由于粗心,34个字符串初始化写错,各 ...
- HDU 4431 Mahjong (DFS,暴力枚举,剪枝)
题意:给定 13 张麻将牌,问你是不是“听”牌,如果是输出“听”哪张. 析:这个题,很明显的暴力,就是在原来的基础上再放上一张牌,看看是不是能胡,想法很简单,也比较好实现,结果就是TLE,一直TLE, ...
- uva 11210 Chinese Mahjong(暴力搜索)
Chinese Mahjong Mahjong () is a game of Chinese origin usually played by four persons with tiles res ...
- hdu4431 Mahjong
Mahjong Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Chinese Mahjong UVA - 11210 (暴力+回溯递归)
思路:得到输入得到mj[]的各个牌的数量,还差最后一张牌.直接暴力枚举34张牌就可以了. 当假设得到最后一张牌,则得到了的牌看看是不是可以胡,如果可以胡的话,就假设正确.否者假设下一张牌. 关键还是如 ...
- Chinese Mahjong UVA - 11210 (DFS)
先记录下每一种麻将出现的次数,然后枚举每一种可能得到的麻将,对于这个新的麻将牌,去判断可不可能胡,如果可以胡,就可以把这张牌输出出来. 因为eye只能有一张,所以这个是最好枚举的,就枚举每张牌成为ey ...
- UVa 11210 Chinese Mahjong (暴力,递归寻找)
题意:这个题意.有点麻烦,就是说给定13张牌,让你求能“听”的牌.(具体的见原题) 原题链接: https://uva.onlinejudge.org/index.php?option=com_onl ...
- bzoj 1860: [Zjoi2006]Mahjong麻将 题解
[原题] 1860: [Zjoi2006]Mahjong麻将 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 211 Solved: 122 [Subm ...
- 【题解】 UVa11210 Chinese Mahjong
pdf传送门 直接模拟+搜索,考虑一下选哪一个是将,然后搜出顺子和刻子,最后判断一下可不可行就好了! #include<stdio.h> #include<string.h> ...
随机推荐
- spring cloud feign 坑
feign是啥? 很多人可能对于feign 不是很熟悉,可以看一下其他网友的实例分享:spring cloud feign简介 如果觉得上面这个比较难的话,还有一个简单入门的:spring cplou ...
- java8新特性 日期
1. LocalDateTime 2. Instant package com.atguigu.java8; import java.time.DayOfWeek; import java.time. ...
- BAT、网易、京东等如何做大数据风控的?
大数据风控目前应该是前沿技术在金融领域的最成熟应用,相对于智能投顾.区块链等还在初期的金融科技应用,大数据风控目前已经在业界逐步普及,从BATJ这样的大企业,到交易规模比较大的网贷平台,再到做现金贷. ...
- N的阶乘 mod P
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N和P(P为质数),求N! Mod P = ? (Mod 就是求模 %) 例如:n = 10, P = 11,10 ...
- 利用python进行数据分析--(阅读笔记一)
以此记录阅读和学习<利用Python进行数据分析>这本书中的觉得重要的点! 第一章:准备工作 1.一组新闻文章可以被处理为一张词频表,这张词频表可以用于情感分析. 2.大多数软件是由两部分 ...
- spring mvc参数校验
一.在SringMVC中使用 使用注解 1.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Fina ...
- go语言使用官方的 log package 来记录日志
原文:https://www.goinggo.net/2013/11/using-log-package-in-go.html ------------------------------------ ...
- VM Workstation 虚拟机下如何安装VMtools
不同版本Linux原理类似,这里以Debian为例. 1 根据提示点击Install Tools,CDROM中出现VmwareTools的安装包,在你的主文件夹下新建一个文件夹(随便叫什么都行,我新建 ...
- Redis源代码分析(三十)--- pubsub公布订阅模式
今天学习了Redis中比較高大上的名词,"公布订阅模式".公布订阅模式这个词在我最開始接触听说的时候是在JMS(Java Message Service)java消息服务中听说的. ...
- 负载均衡算法,轮询方式 大话设计模式之工厂模式 C#
负载均衡算法,轮询方式 2018-04-13 17:37 by 天才卧龙, 13 阅读, 0 评论, 收藏, 编辑 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现 ...