1028: [JSOI2007]麻将 - BZOJ
Description
麻将是中国传统的娱乐工具之一。麻将牌的牌可以分为字牌(共有东、南、西、北、中、发、白七种)和序数牌(分为条子、饼子、万子三种花色,每种花色各有一到九的九种牌),每种牌各四张。在麻将中,通常情况下一组和了的牌(即完成的牌)由十四张牌组成。十四张牌中的两张组成对子(即完全相同的两张牌),剩余的十二张组成三张一组的四组,每一组须为顺子(即同花色且序数相连的序数牌,例如条子的三、四、五)或者是刻子(即完全相同的三张牌)。一组听牌的牌是指一组十三张牌,且再加上某一张牌就可以组成和牌。那一张加上的牌可以称为等待牌。 在这里,我们考虑一种特殊的麻将。在这种特殊的麻将里,没有字牌,花色也只有一种。但是,序数不被限制在一到九的范围内,而是在1到n的范围内。同时,也没有每一种牌四张的限制。一组和了的牌由3m + 2张牌组成,其中两张组成对子,其余3m张组成三张一组的m组,每组须为顺子或刻子。现给出一组3m + 1张的牌,要求判断该组牌是否为听牌(即还差一张就可以和牌)。如果是的话,输出所有可能的等待牌。
Input
包含两行。第一行包含两个由空格隔开整数n, m (9<=n<=400, 4<=m<=1000)。第二行包含3m + 1个由空格隔开整数,每个数均在范围1到n之内。这些数代表要求判断听牌的牌的序数。
Output
输出为一行。如果该组牌为听牌,则输出所有的可能的等待牌的序数,数字之间用一个空格隔开。所有的序数必须按从小到大的顺序输出。如果该组牌不是听牌,则输出"NO"。
Sample Input
9 4
1 1 2 2 3 3 5 5 5 7 8 8 8
Sample Output
6 7 9
囧,我一直以为以为直接搜索就行了,没有算时间
原来要贪心的选,先枚举要胡的,然后把能做刻子的都做刻子,剩下的都只能做顺子,扫一遍就出来了
代码就坑爹了,发现这个贪心之后,我直接把我暴力枚举的那一段中枚举刻子的个数的地方改成枚举最大刻子数的就可以了
const
maxn=;
var
s:array[..maxn]of longint;
n,m:longint; procedure init;
var
i,x:longint;
begin
read(n,m);
for i:= to *m+ do
begin
read(x);
inc(s[x]);
end;
end; function dfs(x:longint):boolean;
var
i,k:longint;
begin
while (s[x]=) and (x<=n) do
inc(x);
if x>n then exit(true);
k:=s[x]mod ;
for i:=s[x]div to s[x]div do
begin
dec(s[x+],k);
dec(s[x+],k);
if (s[x+]>=) and (s[x+]>=) then
if dfs(x+) then
begin
inc(s[x+],k);
inc(s[x+],k);
exit(true);
end;
inc(s[x+],k);
inc(s[x+],k);
inc(k,);
end;
exit(false);
end; procedure work;
var
i,j:longint;
flag:boolean;
begin
flag:=false;
for i:= to n do
begin
inc(s[i]);
for j:= to n do
if s[j]> then
begin
dec(s[j],);
if dfs() then
begin
inc(s[j],);
if flag=false then write(i)
else write(' ',i);
flag:=true;
break;
end;
inc(s[j],);
end;
dec(s[i]);
end;
if flag=false then write('NO');
end; begin
init;
work;
end.
1028: [JSOI2007]麻将 - BZOJ的更多相关文章
- BZOJ 1028: [JSOI2007]麻将 暴力
1028: [JSOI2007]麻将 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/prob ...
- BZOJ 1028 [JSOI2007]麻将
1028: [JSOI2007]麻将 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1270 Solved: 576[Submit][Status][ ...
- 1028: [JSOI2007]麻将
1028: [JSOI2007]麻将 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2638 Solved: 1168[Submit][Status] ...
- [BZOJ 1028] [JSOI2007] 麻将 【枚举+贪心判断】
题目链接:BZOJ - 1028 题目分析 枚举听的是哪种牌,再枚举成对的是哪种牌,再贪心判断: 从1到n枚举每一种牌,如果这种牌的个数小于0,就返回不合法. 将这种牌的张数 % 3, 剩下的只能和 ...
- 【BZOJ】1028: [JSOI2007]麻将(贪心+暴力)
http://www.lydsy.com/JudgeOnline/problem.php?id=1028 表示不会贪心QAQ 按顺序枚举,如果能形成刻子那么就形成刻子,否则形成顺子.orz 证明?:因 ...
- BZOJ.1028.[JSOI2007]麻将(贪心)
题目链接 枚举对子,枚举每张牌,先出完它的刻子,剩下的出顺子.\(O(n^3)\). 不是这样 -> 出完所有刻子,最后出顺子.(日常zz) 优先仨相同的,然后顺子,有一次且一定要用一次机会补顺 ...
- bzoj千题计划118:bzoj1028: [JSOI2007]麻将
http://www.lydsy.com/JudgeOnline/problem.php?id=1028 枚举等待牌 枚举对是哪个 判断 #include<cstdio> #include ...
- bzoj1028 [JSOI2007]麻将
1028: [JSOI2007]麻将 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1337 Solved: 601[Submit][Status][ ...
- 【BZOJ1028】[JSOI2007]麻将(贪心)
[BZOJ1028][JSOI2007]麻将(贪心) 题面 BZOJ 洛谷 题解 感觉好久没打过麻将了,似乎都快不会打了. 这个数据范围看着就觉得是\(O(n^2m)\). 那么就枚举听哪张牌,然后枚 ...
随机推荐
- Apache ab 测试工具使用(一)
简述: 试用apache ab测试工具 下载点 http://httpd.apache.org/download.cgi 参考: http://jingyan.baidu.com/article/e3 ...
- 【WebKit】---WebKit的CSS扩展(WebKit是私有属性)
1.-webkit-touch-callout 当你触摸并按住触摸目标时候,禁止或显示系统默认菜单.在iOS上,当你触摸并按住触摸的目标,比如一个链接,Safari浏览器将显示链接有关的系统默认菜单. ...
- HDOJ2005第几天
第几天? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- VBA 将 ANSI 转换为 UTF-8文件
在使用的时候,先用WriteOut生成一个临时文件(UTF-8带BOM),然后用Convert2utf8将BOM头的前三个字节删除. --------------------------------- ...
- IOS 下拉菜单
由于之前曾经用到过下拉菜单,所以现在花一些时间回过头来细细整理了一下,逐步完善这个下拉菜单,并提供一些比较基本的功能,以便日后如果有需要的话可以进行复用,并提供给需要的人参考.下拉菜单同样分为数据源和 ...
- .net core demo & docker images
记录.net core 部署在docker 上的大概步骤便于以后查阅. PART 1 .net core web api demo 1.下载最新VS 2015 community 社区版免费使用. 2 ...
- CodeBlocks对C++模板的支持
坦率的说CodeBlocks是一款不错的跨平台编译器,一般编写C/C++都是使用它,但最近在编写C++模板文件时,发现它对模板的支持并不是很好.具体表现在模板的定义与声明分开的问题上. 一般编写C/C ...
- 分类算法之贝叶斯(Bayes)分类器
摘要:旁听了清华大学王建勇老师的 数据挖掘:理论与算法 的课,讲的还是挺细的,好记性不如烂笔头,在此记录自己的学习内容,方便以后复习. 一:贝叶斯分类器简介 1)贝叶斯分类器是一种基于统计的分类器 ...
- HotSpot算法实现
1.枚举根节点 可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中. 可达性分析对执行时间的敏感体现在GC停顿上,因为分析工作必须在能确保一 ...
- 实现android支持多线程断点续传下载器功能
多线程断点下载流程图: 多线程断点续传下载原理介绍: 在下载的时候多个线程并发可以占用服务器端更多资源,从而加快下载速度手机端下载数据时难免会出现无信号断线.电量不足等情况,所以需要断点续传功能根据下 ...