题目链接:BZOJ - 1028

题目分析

枚举听的是哪种牌,再枚举成对的是哪种牌,再贪心判断:

从1到n枚举每一种牌,如果这种牌的个数小于0,就返回不合法。

将这种牌的张数 % 3, 剩下的只能和 i + 1, i + 2 这两种牌构成顺,所以 Num[i + 1] -= Num[i]; Num[i + 2] -= Num[i];

牌的种类要枚举到 n + 2,因为第 n - 1 和第 n 种牌可能会减掉 n + 1,n + 2 的牌。

代码

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm> using namespace std; const int MaxN = 400 + 5; int n, m, Top;
int Cnt[MaxN], Num[MaxN], Ans[MaxN]; int main()
{
scanf("%d%d", &n, &m);
int a;
for (int i = 1; i <= 3 * m + 1; ++i)
{
scanf("%d", &a);
++Cnt[a];
}
bool Flag;
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= n + 2; ++j) Num[j] = Cnt[j];
++Num[i];
for (int j = 1; j <= n; ++j)
{
if (Num[j] < 2) continue;
Num[j] -= 2;
Flag = true;
for (int k = 1; k <= n + 2; ++k)
{
if (Num[k] < 0)
{
Flag = false;
break;
}
Num[k] %= 3;
Num[k + 1] -= Num[k];
Num[k + 2] -= Num[k];
}
if (Flag)
{
Ans[++Top] = i;
break;
}
for (int k = 1; k <= n + 2; ++k) Num[k] = Cnt[k];
++Num[i];
}
}
if (Top == 0) printf("NO\n");
else
{
for (int i = 1; i <= Top - 1; ++i) printf("%d ", Ans[i]);
printf("%d\n", Ans[Top]);
}
return 0;
}

  

[BZOJ 1028] [JSOI2007] 麻将 【枚举+贪心判断】的更多相关文章

  1. BZOJ 1028: [JSOI2007]麻将 暴力

    1028: [JSOI2007]麻将 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/prob ...

  2. BZOJ 1028 [JSOI2007]麻将

    1028: [JSOI2007]麻将 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1270  Solved: 576[Submit][Status][ ...

  3. 【BZOJ】1028: [JSOI2007]麻将(贪心+暴力)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1028 表示不会贪心QAQ 按顺序枚举,如果能形成刻子那么就形成刻子,否则形成顺子.orz 证明?:因 ...

  4. BZOJ.1028.[JSOI2007]麻将(贪心)

    题目链接 枚举对子,枚举每张牌,先出完它的刻子,剩下的出顺子.\(O(n^3)\). 不是这样 -> 出完所有刻子,最后出顺子.(日常zz) 优先仨相同的,然后顺子,有一次且一定要用一次机会补顺 ...

  5. 【BZOJ1028】[JSOI2007]麻将(贪心)

    [BZOJ1028][JSOI2007]麻将(贪心) 题面 BZOJ 洛谷 题解 感觉好久没打过麻将了,似乎都快不会打了. 这个数据范围看着就觉得是\(O(n^2m)\). 那么就枚举听哪张牌,然后枚 ...

  6. 1028: [JSOI2007]麻将

    1028: [JSOI2007]麻将 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2638  Solved: 1168[Submit][Status] ...

  7. 1028: [JSOI2007]麻将 - BZOJ

    Description 麻将是中国传统的娱乐工具之一.麻将牌的牌可以分为字牌(共有东.南.西.北.中.发.白七种)和序数牌(分为条子.饼子.万子三种花色,每种花色各有一到九的九种牌),每种牌各四张.在 ...

  8. BZOJ 1029 JSOI2007 建筑抢修 贪心+堆

    题目大意:n个建筑须要抢修.第i个建筑须要T1时间抢修.必须在T2时间之前抢修完成.求最多能抢修多少建筑 首先我们对T2排序 然后依次修理 可是这样贪心显然是不对的 比方说这组数据: 5 10 10 ...

  9. BZOJ 1029: [JSOI2007]建筑抢修 贪心

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1029 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落 ...

随机推荐

  1. 【HDU】5247-找连续数(直接暴力)

    ORZ,这道题想复杂了,原来直接暴力就能够了复杂度为 n * n * logn #include<cstdio> #include<set> #include<algor ...

  2. MYSQL学习笔记3--mysql 2PC二阶段协义 与 日志闪回

    mysql两份日志: binlog :server innodb redo log:engine 两份日志顺序一致性:否则主备不一致 两份日志:原子性,同时都有,同时都无 2PC二阶段协义: 第一阶段 ...

  3. C#_ 项目打包附加数据库

    C#_ 项目打包附加数据库 2010-07-11 23:22:45|  分类: Winfrom|举报|字号 订阅     实现效果:安装项目时直接附加数据库. 1.首先在需要部 署的项目的解决方案资源 ...

  4. CPP: 跨平台生成GUID/UUID

    #ifndef XGUID_H#define XGUID_H #include <string>#include <stdio.h>#ifdef WIN32#include & ...

  5. hdu2018java

    母牛的故事 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  6. RedHat7搭建PHP开发环境(Zend Studio)

    下载Zend Studio # wget http://downloads.zend.com/studio-eclipse/13.0.1/ZendStudio-13.0.1-linux.gtk.x86 ...

  7. Linux查看当前系统登录用户、登录日志、登录错误日志

    1.查看当前系统的登录用户 w who 2.查看成功登录历史记录 last -n 3.查看尝试登录失败的历史记录 lastb -n 4.显示每个用户最近一次登录成功的信息 lastlog

  8. mybatis中几种typeHandler的定义使用

    1.存储到数据库, 将LONG数组转换成字符串;从数据库获取数据, 将字符串转为LONG数组 package com.winturn.utils.handler; import java.sql.Ca ...

  9. 第1条:了解Objective-C 语言的起源

    1.OC语言是由Smalltalk演化而来.该语言使用“消息结构” 而 非“函数调用”. 使用“消息结构”的语言,其运行时所执行的代码由运行环境来决定: 编译器不需要关心接收消息的对象是什么类型,只在 ...

  10. Flex基础相关

    本篇文章转载于http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html,原作者阮一峰. 网页布局(layout)是CSS的一个重点应用. 布局的 ...