08 2017 档案

摘要:SVD(奇异值分解)真的是一个神奇的东西,这里就写个小结。 其实原理并不是那么难理解。 它在数据去噪方面和降维上有特殊作用,也与PCA有很大的联系。 首先我们先回顾一下 EVD,特征值分解,可以对SVD有更好地理解 一、特征值分解 特征值分解是每本线性代数书上基本都会涉及到的东西,涉及的基本原理也比 阅读全文
posted @ 2017-08-21 00:43 Saurus 阅读(231) 评论(0) 推荐(0) 编辑
摘要:#include #include #include using namespace std; typedef long long LL; const int maxn = 1e5 + 100; class FWT{ public: void fwt(LL *a, int n){ for(int d = 1; d >T; while(T--){ ... 阅读全文
posted @ 2017-08-16 18:13 Saurus 阅读(170) 评论(0) 推荐(0) 编辑
摘要:题解: 考虑用线段树维护楼的最大值,然后这个问题就很简单了。 每次可以向左二分出比x高的第一个楼a,同理也可以向右二分出另一个楼b,如果a,b都存在,答案就是b-a-1。 注意到二分是可以直接在线段树上进行的,所以复杂度是O(nlogn)。 当然这里是用分块做的,更暴力一些。 阅读全文
posted @ 2017-08-16 18:12 Saurus 阅读(206) 评论(0) 推荐(0) 编辑
摘要:题解: 比较水的题目 dp[i][j]表示[i...j]最少改变几次变成回文字符串 那么有三种转移 dp[i][j] = dp[i+1][j-1] + s[i] != s[j] dp[i][j] = dp[i+1][j] + 1(删除左边的字符,或者在右边添加一个字符与左边匹配) dp[i][j] 阅读全文
posted @ 2017-08-16 18:08 Saurus 阅读(190) 评论(0) 推荐(0) 编辑
摘要:题解: 其实就是对应三种dp的转移方式 1、拼接类型 dp[i][j] = dp[i][c] + dp[c][j] 2、不变类型 dp[i][j] = j-i+1 3、重复类型(必须满足有k个循环节) dp[i][j] = width(k) + 2 + dp[i][i+L-1] 直接记忆化搜索即可, 阅读全文
posted @ 2017-08-16 18:05 Saurus 阅读(269) 评论(0) 推荐(0) 编辑
摘要:题解: 可以考虑每一层结点的子树大小 必定满足下面的情况,即 a,a,a,a,a,a,b,c,c,c,c........ 然后每一层依次往上更新,结果是不变的 一共有logn层,所以依次扫上去,统计结果即可 注意到k=1的时候,是一条链,需要特殊处理orz 这个打表可以发现明显的规律,也是二进制的一 阅读全文
posted @ 2017-08-16 18:01 Saurus 阅读(187) 评论(0) 推荐(0) 编辑
摘要:题解: 考虑一开始时,左边从1开始枚举,右边从n开始枚举 我们可以得到一个最大的值k。 但是如果这样依次枚举,复杂度肯定是n^3,是不行的 考虑如何利用上一次的结果,如果我们把1和n同时去掉 就可以利用上一步的结果了(因为剩下的匹配仍然没有改变) 这样依次扫一遍,每次O(n)的时间可以得到O(n)对 阅读全文
posted @ 2017-08-16 17:56 Saurus 阅读(184) 评论(0) 推荐(0) 编辑
摘要:题解: 这里是用解析解的做法, 我们发现如果以P和Q做椭圆,那么当椭圆与圆相切的时候,答案最优 那么方程就是这样的 联立之后,解delta等于0,可以得到 答案就是2a了 注意不一定任何情况都有解,当delta等于0时,不一定存在那个点,这个时候显然就为中垂线与圆的交点,特判一下即可 此外点重合也要 阅读全文
posted @ 2017-08-16 17:52 Saurus 阅读(205) 评论(0) 推荐(0) 编辑
摘要:题解: 然后就是接下来如何fwt 也就是如何处理bit(x) - bit(y) = bit(k)这个条件。 其实就是子集卷积。 把bit(x)和bit(y)划分成两个集合,然后就是子集卷积的形式。 这里设两个新的数组 A[bit(y)][y], B[bit(x)][x],代表拆出来的相应数组 然后对 阅读全文
posted @ 2017-08-16 17:42 Saurus 阅读(430) 评论(0) 推荐(0) 编辑
摘要:B. 题解: 枚举约数即可,判断n个数能否填约数的整数倍 C. 这题暴力贪心就可以过了orz 不过也有二分+动态维护凸包的神奇做法,这里不多说了 阅读全文
posted @ 2017-08-07 21:07 Saurus 阅读(174) 评论(0) 推荐(0) 编辑
摘要:题解: 我是参考的 http://blog.csdn.net/qq_32570675/article/details/76571666 这一篇 orz 原来可以这么变换,涨姿势 代码: 阅读全文
posted @ 2017-08-05 20:37 Saurus 阅读(182) 评论(0) 推荐(0) 编辑
摘要:题解: 官方题解太简略了orz 具体实现的方式其实有很多 问题就在于确定A[j]以后,如何找符合条件的A[i] 这里其实就是要提前预处理好 我是倒序插入点的,所以要沿着A[k]爬树,找符合的A[i] 如果发现A[i]与A[k]的第p位不同,比如A[k]位1,A[i]为0,那么所有的在i右边的第p位为 阅读全文
posted @ 2017-08-05 14:34 Saurus 阅读(119) 评论(0) 推荐(0) 编辑
摘要:题解: (并查集处理往上跳的时候,一定要先让u,v往上跳到并查集的祖先,不然会wa掉) 代码如下: 阅读全文
posted @ 2017-08-04 17:58 Saurus 阅读(173) 评论(0) 推荐(0) 编辑
摘要:题解: 其实贪心地算就可以了 一个最优的分配就是每条边权贡献的值为min(k, sz[x]),sz[x]是指子树的大小 然后最后加起来就是答案。 阅读全文
posted @ 2017-08-01 22:51 Saurus 阅读(156) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示