![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
codeforces & bestcoder
alpc_wt
a star in the making
展开
-
hdu5179 beautiful number
hdu5179 beautiful number原创 2015-03-03 15:43:09 · 1203 阅读 · 0 评论 -
51NOD算法马拉松 最大值问题 离线预处理+set lower_bound
题目:http://www.51nod.com/contest/problem.html#!problemId=1349 题意:100000个数的序列,有100000次询问,每次问区间最大值大于等于k的区间有多少? 思路:一开始没看到“大于等于”,想了很久也不会,原来看错题了。看错题害死人。 一般询问的问题,如果不能用线段树log(n)求出,那么就离线做。 首先将询问按从大到小排序原创 2015-07-05 11:08:08 · 1477 阅读 · 0 评论 -
cf451E Devu and Flowers 卢卡斯定理+容斥定理
题目:http://codeforces.com/problemset/problem/451/E 题意:有n个盒子(n 组合数学问题,求C(n,m).但n,m过大时,可用卢卡斯定理. 卢卡斯定理:C(n,m) %p = C(n/p,m/p) * C(n%p,m%p) 从n个盒子中取出s个球的方案数,相当于插板,即 C(s+n-1,n-1).注意这是没有限制条件的情况。原创 2015-07-03 16:08:39 · 1725 阅读 · 0 评论 -
hdu5274 Dylans loves tree LCA+线段树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5274 在树上的询问和操作,每次修改单点值,询问两点之间出现次数为奇数的点权是什么,若没有输出-1.询问保证两点间至多只有一个数出现奇数次。 有一种经典的将树上的点转化成序列的方法,我们用dfs遍历这棵树,那么对于一个节点,他一点比他的子树即子节点先访问到,且当他的最后一个子节点的所有子树也都原创 2015-07-02 23:39:44 · 696 阅读 · 0 评论 -
Codeforces Round #309 (Div. 1)D. Nudist Beach 二分+bfs
题目:http://codeforces.com/contest/553/problem/D 在一个无向图中,有若干坏点,选择一个不包含坏点的集合,使得集合中p值最小的点的p值最大。一个点的p值=集合中与该点相连的点的个数 / 与改点相连的总点数.原创 2015-06-28 19:39:16 · 906 阅读 · 0 评论 -
Looksery Cup 2015 H. Degenerate Matrix
又学会了二分的新用法, 其实二分可以设置固定的二分次数作为跳出条件,当次数达到一定时,一定可以的到解,可以解决因精度而T的情况。 向群神致敬。 题目:http://codeforces.com/contest/549/problem/H 代码: #include #include #include #include #include #include #include #include原创 2015-06-21 10:19:07 · 1071 阅读 · 0 评论 -
Codeforces Round #305 (Div. 2) E. Mike and Foam 容斥原理
在一个集合中,找和x互素的数有多少? 用容斥定理,先把每个数质因数分解(每个数至多有6个质因子),奇减偶加,就统计到和x互素的数了。 代码: #include #include #include #include #include using namespace std; const int N = 5*100000+10; const int maxn = 5*100000; int c原创 2015-05-28 23:41:50 · 1106 阅读 · 1 评论 -
Sabotage 二分
题目链接:http://www.usaco.org/index.php?page=viewproblem2&cpid=419 题意:有1,000,000个整数,要求从第2个到n-1个之间,删去一段连续的数,使得剩余数的平均数最小。( 1 题解:二分法,二分一个平均密度p,使原序列均减去p,求得2~n-1的最大连续和,可得到剩余数的和的正负值。若为正,则p小于mid;否则,p大于mid。 代码原创 2015-05-20 20:11:08 · 536 阅读 · 0 评论 -
hdu5212 Code 莫队算法
这道题需要一些莫队算法的知识 定义记号f(A,B)表示询问区间A,B时的答案 用记号+表示集合的并 利用莫队算法我们可以计算出任意f(A,A)的值 不妨假设A=[l1,r1],B=[l2,r2],C=[r1+1,l2−1] 容易知道f(A,B)=f(A+B+C,A+B+C)+f(C,C)−f(A+C,A+C)−f(C+B,C+B) 因此一个询问被拆成四个可以用莫队算法做的询问 总的时间复杂度为O(原创 2015-05-01 12:48:36 · 820 阅读 · 0 评论 -
hdu5195 DZY Loves Topological Sorting 线段树+拓扑排序
要求在一个DAG中删去不多于k条边,使得拓扑序的字典序最大。 贪心策略:每次删去入度小于res的,序号尽量大的点的入边。 需要用线段树维护区间最小值。 代码: #include #include #include #include #include #include #include using namespace std; const int N = 400000 +10; const原创 2015-04-02 19:54:13 · 556 阅读 · 0 评论 -
hdu5191Building Blocks 模拟
题意: 看完电影后,乐乐回家玩起了积木。 他已经搭好了n堆积木,他想通过调整积木,使得其中有连续W堆积木具有相同的高度,同时他希望高度恰好为H。 乐乐的积木都这了,也就是说不能添加新的积木,只能移动现有的积木。 他可以把一个积木从一堆移动到另一堆或者新的一堆,但是不能移动到两堆之间。比如,一次移动之后,"3 2 3" 可以变成 "2 2 4" 或者 "3 2 2 1",但是不能变成"3 1 1原创 2015-03-22 14:11:59 · 598 阅读 · 0 评论 -
hdu5188 zhx and contest (DP+map)
有限制的 0/1背包 #include #include #include #include #include using namespace std; const int N = 30+5; typedef long long ll; map dp[3]; map::iterator it; struct node { int l,t,v; }p[N]; int cmp(node a,原创 2015-03-20 09:35:45 · 377 阅读 · 0 评论 -
Codeforces Round #260 (Div. 1) B. A Lot of Games Trie + 博弈
题意:两个人在Trie树上博弈k局,当前局输的人在下一局中执先手。在一局博弈中,当一个人不能走时,判定另一个人赢。最后一局的结果作为整个游戏的结果。 分析:先手赢的情况为:(1)先手可必胜,也 可败。那么前k-1局败,最后一局胜利即可。 (2)先手只能必胜。 当k为奇数时获胜。 后手赢的情况为:(1)先手必败。 (2)先手只能必胜。 k为偶数。 (本题的状态为取完当前节点的原创 2015-09-22 18:21:03 · 644 阅读 · 1 评论