LUOGU 2593 : [Zjoi2006] 超级麻将】的更多相关文章

传送门 解题思路 直接爆搜全T..状态数太多了,所以我们考虑贪心+剪枝.贪心:先拿三个连着的,再拿四个一样的,再拿三个一样的,最后拿两个一样的这样的搜索顺序最优,两个的放最后是因为只要这样的一个,三个连着的放开头是因为这样可以照顾到后面很少的情况.这样肯定还是T,我们考虑剪枝,用hash减.考虑如果数据为 12 0 1 0 0 0-. 这样的 ,我们第一种搜的方案是 a[1]里拿三个4,后面发现不行,返回.第二种方案是a[1]拿四个3,发现这两种方案拿完a[1]后 剩下的序列都是0 1 0 0-…
题目:https://www.luogu.org/problemnew/show/P2593 发现三个连续牌的影响范围只有3.相同牌的影响范围只有1之后就可以dp了. O(100^7)T飞. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int T,a[N]; ][N][N][N],flag; int rdn()…
f[a][b][c][i]表示考虑到第i个,第i位用了b个,第i-1位用了a个,此时有将/无将(c=1/0)的情况是否可达. 转移分以下几类: 1.调一个将 f[a][b][1][i]|=f[a][b-2][0][i]; 2.碰 f[a][b][0/1][i]|=f[a][b-3][0/i][i]; 3.杠 f[a][b][0/1][i]|=f[a][b-4][0/1][i]; 4.顺 f[a][b][0/1][i]|=f[val[i-2]-b][a-b][0/1][i-1],其中b打完 注意到…
题目描述 很多人都知道玩麻将,当然也有人不知道,呵呵,不要紧,我在这里简要地介绍一下麻将规则: 普通麻将有砣.索.万三种类型的牌,每种牌有1~9个数字,其中相同的牌每个有四张,例如1砣~9砣,1索~9索,1万~9万各有4张,所以共36*3=108张牌.胡牌时每人有14张牌,其中只要某人手里有若干句话(就是同种类型的牌连续三张或同种牌三张),另外再加上一对,即可胡牌.当然如果全是对,叫七小对,也可以胡牌.下图是连三张示例. 要判断某人是否胡牌,显然一个弱智的算法就行了,某中学信息学小组超级麻将迷想…
题目描述 要判断某人是否胡牌,显然一个弱智的算法就行了,某中学信息学小组超级麻将迷想了想,决定将普通麻将改造成超级麻将. 所谓超级麻将没有了砣.索.万的区分,每种牌上的数字可以是1~100,而每种数字的牌各有100张.另外特别自由的是,玩牌的人手里想拿多少张牌都可以,好刺激哦! 刺激归刺激,但是拿多了怎么胡牌呢? 超级麻将规定只要一个人手里拿的牌是若干句话(三个连续数字的牌各一张组成一句话,三张或者四张同样数字的牌也算一句话),再加上一对相同的牌,就算胡了. 作为信息学竞赛选手的你,麻烦你给这位…
题目描述 很多人都知道玩麻将,当然也有人不知道,呵呵,不要紧,我在这里简要地介绍一下麻将规则: 普通麻将有砣.索.万三种类型的牌,每种牌有1~9个数字,其中相同的牌每个有四张,例如1砣~9砣,1索~9索,1万~9万各有4张,所以共36*3=108张牌.胡牌时每人有14张牌,其中只要某人手里有若干句话(就是同种类型的牌连续三张或同种牌三张),另外再加上一对,即可胡牌.当然如果全是对,叫七小对,也可以胡牌.下图是连三张示例. 要判断某人是否胡牌,显然一个弱智的算法就行了,某中学信息学小组超级麻将迷想…
传送门 Description Input 第一行一个整数N(N<=100),表示玩了N次超级麻将. 接下来N行,每行100个数a1..a100,描述每次玩牌手中各种牌的数量.ai表示数字为i的牌有ai张.(0<=ai<=100) Output 输出N行,若胡了则输出Yes,否则输出No,注意区分Yes,No的大小写! Sample Input 3 2 4 0 0 0 0 0 -- 0(一共98个0) 2 4 2 0 0 0 0 -- 0(一共97个0) 2 3 2 0 0 0 0 --…
题目地址 :https://www.luogu.org/problemnew/show/P2593. 无脑DP(虽说是抄的额) #include <iostream> #include <cstdio> #include <cstring> using namespace std; inline int read() { ;char ch=getchar(); while(!isdigit(ch))ch=getchar(); )+(res<<)+(ch^),…
设f[i][j][k][0/1]表示选到i时,i-1选j张,i选k张,之前选的所有牌是否选择了对子 然后分情况讨论转移即可 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=105; int n,a[N]; bool f[N][N][N][2]; int main() { scanf("%d",&n); while(n-…
[原题] 1860: [Zjoi2006]Mahjong麻将 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 211  Solved: 122 [Submit][Status] Description Input 第一行一个整数N(N<=100),表示玩了N次超级麻将. 接下来N行.每行100个数a1..a100,描写叙述每次玩牌手中各种牌的数量.ai表示数字为i的牌有ai张.(0<=ai<=100) Output 输出N行,若胡了则输出Ye…
Description Input 第一行一个整数N(N<=100),表示玩了N次超级麻将. 接下来N行,每行100个数a1..a100,描述每次玩牌手中各种牌的数量.ai表示数字为i的牌有ai张.(0<=ai<=100) Output 输出N行,若胡了则输出Yes,否则输出No,注意区分Yes,No的大小写! Sample Input 3 2 4 0 0 0 0 0 …… 0(一共98个0) 2 4 2 0 0 0 0 …… 0(一共97个0) 2 3 2 0 0 0 0 …… 0(一…
题目链接http://codevs.cn/problem/2464/ 题目描述 Description 很多人都知道玩麻将,当然也有人不知道,呵呵,不要紧,我在这里简要地介绍一下麻将规则: 普通麻将有砣.索.万三种类型的牌,每种牌有 1~9个数字,其中相同的牌 每个有四张,例如 1 砣~9 砣,1索~9 索,1 万~9 万各有 4 张,所以共 36*3=108张牌.胡牌时每人有 14 张牌,其中只要某人手里有若干句话(就是同种类型的牌连续三张或同种牌三张) ,另外再加上一对,即可胡牌.当然如果全…
[Luogu 2596] ZJOI2006 书架 第一次指针写 FHQ_Treap(省选噩梦数据结构)AC 啦! 省选试机写它,紧张过度失败了. 省选 Day 1 考场写它,写挂了. 省选 Day 1 当晚认真复习它,结果 Day 2 并不考. 于是省选后用指针写出来了,开心qwq. 这个题嘛,记录一下每个点对应的指针,顺便维护一下父节点,每次需要的时候,就可以一路向上找到这个点的位置. 就这么简单的呀qwq #include <cstdio> #include <cstdlib>…
题目:https://www.luogu.org/problemnew/show/P2593 DP的话,考虑到当前这一位只跟前两位有关,所以记录一下这3位的状态就行: 于是一开始记录的第 i 位,i-1 位的数量,i-2 位的数量,是否有过对子,然后可行性DP: 但是写得太丑,又WA又T... #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using nam…
P1772 [ZJOI2006]物流运输 题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种因素的存在,有的时候某个码头会无法装卸货物.这时候就必须修改运输路线,让货物能够按时到达目的地.但是修改路线是-件十分麻烦的事情,会带来额外的成本.因此物流公司希望能够订一个n天的运输计划,使得总成本尽可能地小. 输入输出格式 输入格式: 第一行是四…
P2585 [ZJOI2006]三色二叉树 题目描述 输入输出格式 输入格式: 输入文件名:TRO.IN 输入文件仅有一行,不超过10000个字符,表示一个二叉树序列. 输出格式: 输出文件名:TRO.OUT 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. 输入输出样例 输入样例#1: 1122002010 输出样例#1: 5 2 思路: 我们只关心绿色节点的数目,而红色蓝色可以看作无色, 但是对于一个根节点和它的两个儿子,必须有一个绿色节点 按照树形DP的思路,我…
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4417 (luogu)https://www.luogu.org/problemnew/show/P3990 题解: 一看就是矩乘优化dp. 每次跳奇数列?那么我们可以将列两两分组,以两列为一组作为矩阵要记录的状态.一个元素位于组内第一列说明它不可能再跳到这一组的第二列(为了避免算重).转移矩阵的构造见代码. 那么我们用矩阵来表示转移方程: 设向量\(F[i]\)表示状态…
woc, 13年前的ZJOI就这么毒瘤的嘛... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=1859 (luogu)https://www.luogu.org/problemnew/show/P2589 题解: 大分类讨论,预处理\(ints[i][j]\)表示碗\(i\)叠在\(j\)上,\(i\)的底部比\(j\)的底部要高多少 然后分类讨论求此数组: (1) \(i\)的下半径比\(j\)的上半径大,则等于\(…
题面:P2596 [ZJOI2006]书架 题解:记录每本书对应的节点编号 普通fhq_treap无法查询一个权值的排名,所以在普通fhq_treap上多记录每个节点的父亲(可加在pushup函数中), 查询时从该节点开始逐步往上跳,记录答案. 其他操作都依附在该排名上. 代码: #include<cstdio> #include<cstring> #include<iostream> #include<cstdlib> using namespace st…
这道题题号很清新啊!第一次开NOI的题,因为最近考到了这道题的升级版. 我们先考虑\(O(n^2)\)大暴力,就是枚举前后端点然后开一个前缀和减一下即可. 然后引入正解,我们设一个三元组\(F(s,l,r)\)表示以\(s\)为左端点,右端点的范围在\([l,r]\)的时候最优的右端点为多少. 左端点确定了,右端点的区间也确定了,那么右端点的位置怎么求? RMQ直接查询即可.由于要求值最大,因此我们RMQ出前缀和最大值即可 然后我们就可以得到一些三元组,考虑如何计算答案. 我们还是通过取最大值这…
这道题还是一道比较不可做的矩阵题 首先我们先YY一个递推的算法:令f[i][j]表示走到第i行第j列时的方案数,那么有以下转移: f[i][j]=f[i-1][j-2*k+1]+f[i+1][j-2*k+1]+f[i][j-2*k+1](1<=k<=i/2) 但这样是很慢的,然后我们就可以前缀和优化 这里有两种方法,一个是用奇偶数行进行讨论,还有一种我认为是比较清晰的也比较容易理解 我们先来看一张图: 我们令f[i][j]表示前面可以转移到它的前缀和.例如图中的蓝色格子就是前6个格子的和 然后…
传送门 感觉要死在\(Splay\)里了 orz 这题用\(Splay\)维护这个序列,其中的第\(k\)大点代表这个序列的第\(k\)个数 第一个操作,先把那个数所在的点旋到根,然后把整个根的左子树接到右子树中最小的点,记得\(splay\)维护整棵树 第二个操作类似,把第一个操作反过来就行 第三个本质是两个相邻位置交换值,直接把这个数所在的点和前驱/后继交换值 第四个,把对应的点旋到根,输出左子树大小 第五个,就是整棵树的第\(x\)大点上的值 #include<bits/stdc++.h>…
题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪.由于各种因素的存在,有的时候某个码头会无法装卸货物.这时候就必须修改运输路线,让货物能够按时到达目的地.但是修改路线是—件十分麻烦的事情,会带来额外的成本.因此物流公司希望能够订一个n天的运输计划,使得总成本尽可能地小. 输入输出格式 输入格式: 第一行是四个整数n(l≤n≤100).m(l≤m≤2…
BZOJ 1863 lyd口中的夹B递推. 挺妙的解法. 第一个感觉是找到一个最大的相邻的$a_i + a_{i - 1}$就可以了,但是这个想法大概只对了一半,一半的意思是说只有在$n$为偶数的时候才适用,因为只有在偶数的时候,所有数能恰好地被分成两组,两组互不干扰. 奇数的时候就相当于多出了一个$1$,怎么办呢? 显然可以二分答案吧,设$mid$表示当前二分到的颜色的数量. 设$f_i$表示在满足$i - 1$和$i$的限制的条件下,$i$和$1$的颜色冲突的最大个数,再设$g_i$表示这个…
实在不想调了QAQ... Code: #include <cstdio> #include <algorithm> #include <cstring> #include <string> #include <iostream> #include <map> #define setIO(s) freopen(s".in","r",stdin),freopen(s".out",…
1860: [Zjoi2006]Mahjong麻将 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 412  Solved: 248[Submit][Status][Discuss] Description Input 第一行一个整数N(N<=100),表示玩了N次超级麻将. 接下来N行,每行100个数a1..a100,描述每次玩牌手中各种牌的数量.ai表示数字为i的牌有ai张.(0<=ai<=100) Output 输出N行,若胡了则输出Ye…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
一.简介 Splay(伸展树)是平衡树中的一种.它通过不断将某个节点旋转到根节点的位置,使整棵树仍满足 BST 的性质,并且保持平衡而不至于退化为链. 频繁访问的节点会被移动到离根节点较近的位置,进而获得更快的访问速度. 可以通过均摊复杂度证明,\(n\) 个点,进行 \(m\) 次 Splay 操作,最终的时间复杂度是 \(\mathcal{O}((n+m)\log n)\).证明. 二.基本操作 一些维护的信息: \(rt\) \(tot\) \(fa(x)\) \(lc(x)\) \(rc…
原题传送门 希望这题不会让你对麻将的热爱消失殆尽 我们珂以统计每种牌出现的次数,不需要统计是第几张牌 判一副牌能不能和,类似这道题 对于这题: 设\(f[i][j][k][0/1]\)表示前\(i\)种牌,顺子\((i-1,i,i+1)\)出现了\(j\)次,顺子\((i,i+1,i+2)\)出现了\(k\)次,有/没有雀头的最多面子数.转移比较简单 我们珂以发现\(j\)这维不太重要,强制dp值不超过\(4\)(超过\(4\)也没有用),雀头数不超过\(7\)(类似),爆搜珂以搜出本质不同的状…
ZJOI2019神题,间接送我退役的神题233 考场上由于T2写挂去写爆搜的时候已经没多少时间了,所以就写挂了233 这里不多废话直接开始讲正解吧,我们把算法分成两部分 1.建一个"胡牌自动机" 首先我们发现这题不能转化为一般DP问题求解的最大瓶颈就是因为它的状态很诡异 但是我们细细一想,形如\(\{1,1,1,2,3,4,5,6,7,8,9,10,12,12\}\)和\(\{3,3,3,5,6,7,9,10,11,14,15,16,20,20\}\)的本质其实是一样的(都是三个顺子+…