
多校训练2016
羁绊残阳
四川大学计算机科学与技术
展开
-
hdu5727 枚举排列 + 二分图匹配
可以先枚举阴珠子的排列,因为是环,所以起点无所谓,最多8!8!然后再让阳珠子去插空,对于不损坏的建立边,求最大匹配就是了。 这里二分图最大匹配的无向图,两边的节点编号不是一样的,竟然搞混淆了。。。 这样复杂度是O(n!∗n∗n2)O(n!*n*n^2)#include <cstdio>#include <ctime>#include <set>#include <iostream>#原创 2016-07-23 16:25:04 · 354 阅读 · 0 评论 -
hdu 5791 dp简单
分析模拟序列添加的过程即可。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define pr(x) cout << #x << ": " << x << " " #define pl(x) cout << #x << ": " << x <<原创 2016-08-03 13:24:35 · 322 阅读 · 0 评论 -
hdu5787 数位dp 数位压缩
分析: 大概是比较经典的数位dp,需要维护连续的kk个数字不相同,所以我们的状态记录里需要记录前k−1k-1个数字是哪些,扩展下一位的时候不能出现前k−1k-1位的数字。 这样就来设计状态:dp[len][k][ban]dp[len][k][ban],表示前长度为lenlen,连续的kk个字符禁止出现相同,前k−1k-1个数字为banban。 这里的banban用了数字压缩的技巧,比如前33个原创 2016-08-03 12:47:14 · 605 阅读 · 1 评论 -
hdu 5724 Chess (sg函数 + 状态压缩)
分析: - 用二进制来压缩当前状态。 - 没有子状态的其sg为0(这在操作中就可自动实现。 - 对于当前状态的子状态进行枚举,二进制数一定是减小到所以符合sg函数转移。 - 求所有sg值的异或。 预处理sg函数的时间复杂度为O(220∗202)O(2^{20}*20^2)#include <iostream>#include <cstring>#include <cstdio>usi原创 2016-07-21 23:44:41 · 374 阅读 · 0 评论 -
hdu 5726 GCD (线段树 + 区间预处理)
分析:-用线段树来维护区间gcd。 -枚举右端点,从上一个右端点转移到以该点为右端点的所有区间的gcd值。 - gcd值是在10910^9的范围以内,所以用map来离散化。 - 以该点为区间右端点的话,所有区间的gcd数不会超过loga[i]log^{a[i]}。心得:求满足条件的区间的个数,通常就是枚举端点,然后区间之间相互转移。#include <iostream>#in原创 2016-07-22 11:24:51 · 524 阅读 · 0 评论 -
hdu 5768 中国剩余定理 + 容斥原理
-中国剩余定理介绍定理1:两个公差互质的等差数列的交为一个新的等差数列,并且该等差数列的公差为原来两个公差的乘积。{x≡a(mod m1)x≡b(mod m2)\begin{equation}\left \{\begin{aligned}x\equiv a(mod\ m_1)\\x \equiv b(mod \ m_2)\\\end{aligned}\right.\end{equat原创 2016-08-01 11:55:43 · 433 阅读 · 0 评论 -
hdu 5785 manacher回文处理 + 扫描线
分析:首先考虑遍历所有的两头的i,ki,k,然后去找他们中间的一个点cc,让这个点把str[i...k]str[i...k]且成两段回文串。 这样是可行的,但是复杂度枚举两头已经是O(n2)O(n^2)了。然后考虑换一个思路,枚举所有的中间的隔代cc,然后以cc为隔代的满足条件的所有回文串的两头。 这样发现,用所有以cc左边元素为结尾的回文串的左边界和乘以以cc右边元素为开始的所有回文串的右原创 2016-08-04 11:05:56 · 428 阅读 · 0 评论 -
hdu 5769 后缀数组
分析:首先知道求不同子串个数的做法,就是,每个后缀减去它的高度数组。这相当于一种划分,然后减去交叉部分。 这里多了一个含有字符x,求每个字符后面第一个x出现的位置,再去减去交叉部分和不含x部分的较大值即可。#include <cstdio>#include <cstring>#include <string>#include <iostream>#include <algorithm>u原创 2016-07-31 00:39:18 · 586 阅读 · 0 评论 -
hdu 5723 (最小生成树 + 树上的期望)
多校简单题 - 第一个问,最小生成树。 - 第二个问,求出最小生成树后建图。 枚举每一条边,然后期望是边的期望和,边的期望就是两边节点数的乘,乘以花费。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <string>#incl原创 2016-07-20 11:41:23 · 1293 阅读 · 0 评论 -
hdu 5734 LIS变形
分析: 一个数前面有多少个零,就用它来减去这些零数,这样做的目的是尽量多选0,但是压缩当前值.对于两个数,他们的差距减小了,它们之间的0的个数,这不影响先后的值. 去掉所有的零后,再对当前序列求LIS,最后再加上0的个数. 总得来说,这种策略让所有的0的被用到了.#include <iostream>#include <algorithm>#include <cstdio>#includ原创 2016-07-30 15:21:16 · 288 阅读 · 0 评论 -
hdu 5763 kmp + dp
分析: 乍一看以为很容斥,其实把它拆分成dp很容易解决重复. 根据数据量显然是一个一维o(1)o(1)转移的dp. 定义dp[i]dp[i]表示以ii结尾的种数,考虑依次添加字符,如果以当前结尾的后缀不构成模式串显然种数不增加,否则加上前面部分. kmp简化的写法很强势.#include <iostream>#include <cstdio>#include <cstring>#inc原创 2016-07-29 17:12:04 · 296 阅读 · 0 评论 -
hdu 5774 Bubble Sort(树状数组)
分析: 对于在位置ii的数字aia_i,假设它右边有fif_i个比它小的数字,它能被移动的最右边的位置是i+fii+f_i。 二个这个数字的最左边位置要么是它的起始位置,要么是它排序后的最终位置,所以它的最左边位置就是:min(ai,i)min(a_i, i)。 求fif_i用数组数组求逆序对的方法,求它左边有多少个比它小的数字然后计算出它右边比它小的数字个数即可。#include <cstd原创 2016-07-28 16:04:27 · 377 阅读 · 0 评论 -
hdu 5754 博弈递推 dfs记忆优化
分析: 根据博弈递推的原则: -必败态只能转移到必胜态。 -必胜态一定可以转移到必败态。 令dp[i][j][op]dp[i][j][op]为在棋盘中(i,j)(i,j)位置,棋子为opop时的胜败状态,根据其子状态递推即可。 这里注意车只有对角线是必败很显然。 对于马,如果它只能走到必胜态和平态,那么它就宁愿走到平态,这比输了好。 皇后的时候转移有可能是O(n)O(n)的会复杂度过高原创 2016-07-27 14:05:38 · 359 阅读 · 0 评论 -
hdu 5745 dp+bitset优化
分析: 这题实际上是一个dp[105][103][3]dp[10^5][10^3][3]的空间和时间优化,由于其是一个bool的形式,我们可以让第一维存在bitset中,第二维滚动数组实现,来优化空间。至于时间就是bitset进行逻辑运算是按照字节来的常数优化了很多。#include <cstdio>#include <cstring>#include <iostream>#include原创 2016-07-26 11:21:28 · 664 阅读 · 0 评论 -
hdu 5752 Sqrt Bo
题意: 给你一个数,问你最少开多少次,可以变成1。如果超过五次还没有变成1,就输出TAT 分析: 开根号是比lognlogn还强的函数,超过一定界限就是”TAT”。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>using namespace std;原创 2016-07-27 10:54:37 · 202 阅读 · 0 评论 -
SCU2016-01 G题(最大流 + floyd_warshall)
分析:其实就是经典的限制终点的容量的最大流。建立超级源点和汇点。最小化最大路径,二分一下。对于任意最短路Floyd_warshall一下。 code:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <queue>using namesp原创 2016-08-26 19:25:24 · 535 阅读 · 0 评论