上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 26 下一页
摘要: 生成树的上的一个非根结点对应一条生成树上的边,然后这个结点的子树上连出去的边就对应去掉这条边的割,然后就可以对树外的边求LCA,在LCA上标记,利用这个信息可以算出有多少条边在子树上,以及有多少条边不再子树上。其实可以更进一步,非叶子结点一定不会比叶子结点更优,连的边只不会减少。所以只要统一叶子结点... 阅读全文
posted @ 2015-09-22 20:35 陈瑞宇 阅读(483) 评论(1) 推荐(0) 编辑
摘要: 感谢这道题让我复习了一遍线代,还学习了一些奇奇怪怪的数论。令二项展开以后根号部分抵消了显然有所以要求的答案是如果n比较小的话,可以直接对二项式快速幂,但是这题n很大这个问题和矩阵的特征值以及数列递推有奇怪的联系广义的fibonacci数列的形式如下写成矩阵形式就是有一个奇怪的结论:其中lambda1... 阅读全文
posted @ 2015-09-22 20:27 陈瑞宇 阅读(582) 评论(2) 推荐(0) 编辑
摘要: 今天第二次做BC,不习惯hdu的oj,CE过2次。。。1002 Clarke and problem和Codeforces Round #319 (Div. 2) B Modulo Sum思路差不多,将a[i]对p取余数,最后得到0的方案总数即使答案,dp转移,一个状态方案总数等于能转移过来的状态方... 阅读全文
posted @ 2015-09-19 23:16 陈瑞宇 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 平衡树的题,Treap破之,比较难搞的出现相同题数罚时的情况,解决方法是在每个结点用一个set,保证结点值的时候可以把题数和罚时保存到一个int里,令v = n*MaxPenaltySum-penalty。这样就可以很方便地做比较了。初始化有一定技巧。细节很多容易出错。 写静态版,如果有合并操作要内... 阅读全文
posted @ 2015-09-19 10:51 陈瑞宇 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 显然f(x)是个凹函数,三分即可,计算方案的时候dp一下。eps取大了会挂精度,指定循环次数才是正解。#includeusing namespace std;const double eps = 1e-11;const int maxn = 2e5+5;double a[maxn];double d... 阅读全文
posted @ 2015-09-17 09:53 陈瑞宇 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 首先应该保证二进制最高位尽量高,而位数最高的数乘x以后位数任然是最高的,所以一定一个数是连续k次乘x。当出现多个最高位的相同的数就枚举一下,先预处理一下前缀后缀即可。#includeusing namespace std;const int maxn = 2e5+5;int a[maxn];int ... 阅读全文
posted @ 2015-09-17 09:49 陈瑞宇 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 题目中给出的函数具有周期性,总可以移动到第一个周期内,当然,ausing namespace std;int main(){ int a,b; scanf("%d%d",&a,&b); if(a<b) puts("-1"); else { int t1 = a+b, ... 阅读全文
posted @ 2015-09-17 09:44 陈瑞宇 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 以前听过,不知道是什么,其实就是字符串首尾相连成一个环,n种切法求一个字典序最小的表示。朴素算法大家都懂。O(n)的算法代码非常简单,最主要的思想是失配的时候尽可能大的移动指针。另外附上一个不错的字符串算法总结:http://duanple.blog.163.com/blog/static/7097... 阅读全文
posted @ 2015-09-15 20:29 陈瑞宇 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 二分,判断的时候,一个点一个点的考虑肯定是不行啦,考虑的单位是一个区间,每次左端点尽量向左边移动,右端点尽量向右,得到下次可以达到的范围,检查一下和下一个区间有没有交集。#includeusing namespace std;const int maxn = 1e5+5, maxns = 1e6+5... 阅读全文
posted @ 2015-09-15 13:20 陈瑞宇 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 很容易想到二分,问题在与判断一个解的可行性。贪心,时间点最多两万,可以模拟每个时间点,将事件按开始时间排序,每次优先选已经开始了的且结束时间最早的任务来做,如果某个任务在deadline之前还没有结束说明当前解不可行。R的上界不太好估计,(远远达不到总和,但是比maxw大,因为任务在时间上有重叠),... 阅读全文
posted @ 2015-09-15 13:14 陈瑞宇 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 贪心,假如任意给出一个序列,如果两两交换了以后会变大,那么就交换,直到不能交换为止。#includeusing namespace std;const int maxn = 51;string s[maxn];int rk[maxn];bool cmp(int x,int y){ int i ... 阅读全文
posted @ 2015-09-15 13:01 陈瑞宇 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 问题可以转化为草坪的边界被完全覆盖。这样一个圆形就换成一条线段。贪心,从中选尽量少的线段把区间覆盖,按照把线段按左端点排序,记录一个当前已经覆盖区间的位置cur,从左端点小于等于cur选一个右端点最大的作为这次选的区间,如果没有符合条件的,说明不可能完全覆盖。r*r会爆int...#includeu... 阅读全文
posted @ 2015-09-15 12:54 陈瑞宇 阅读(226) 评论(0) 推荐(0) 编辑
摘要: UVA 11636 Hello World二的幂答案就是二进制长度减1,不是二的幂答案就是是二进制长度。#includeint main(){ int n,kas = 0; while(scanf("%d",&n),n>0){ int r = 0; for(n... 阅读全文
posted @ 2015-09-15 08:01 陈瑞宇 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 把一个人看出一个二维的点,优势的点就是就原点为左下角,这个点为右上角的矩形,包含除了右上角以外边界,其他任意地方不存在点。那么所有有优势的点将会形成一条下凹的曲线。因为可能有重点,用multiset,按照x优先,相同时再比较y的顺序排序,动态维护满足条件的总人数。当新加的P点的y坐标大于左边的点的时... 阅读全文
posted @ 2015-09-13 18:12 陈瑞宇 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 删除边的操作不容易实现,那么就先离线然后逆序来做。逆序就变成了合并,用并存集判断连通,用Treap树来维护一个连通分量里的名次。Treap = Tree + Heap。用一个随机的优先级来平衡搜索树。名次查询需要维护树的结点数量,假设当前在u点,u的左子树有n个结点,那么u的就是以u为根的树上第n+... 阅读全文
posted @ 2015-09-13 18:12 陈瑞宇 阅读(167) 评论(2) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 26 下一页