自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 poj Musical Theme 后缀数组

二分长度 然后判断它是否存在且设两个指针存储它可能出现最大位置和最小位置 第一发后缀数组#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>#define maxn 1000005#define LL long long#define mod 1000000007ll

2016-07-31 23:12:14 328

原创 hdu 5780 gcd 欧拉函数加分块

先线筛求出1-1000000的欧拉值也就是小于它与它互质的数的个数 然后bc本场题解给出解法也很好想 重点是分块 因为当n/d相同时n可能取多个值所以可以分块 当扫到i的时候 i 到 n/(n/i)(这个式子求得是n/i结果相同的最大满足值)这段区间可以等比数列求值而不用一个个扫 分块思想很好用。。。#include<cstdio>#include<cstring>#include<

2016-07-31 23:03:56 359

原创 树状数组总结

单点更新区间查询 HDU 1166#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define LL long long#define maxn 60000using namespace std;int n;LL va,sum[maxn];char s[15];LL getSum(int

2016-07-26 21:35:24 297

原创 poj 2912 Rochambeau

第一次想到的是枚举每个人是裁判然后判断谁是裁判的话剩下几个人的关系不矛盾, 然后满足情况的裁判个数是0矛盾,大于一多组解这点想的是对的 然后打算再跑一遍并查集然后求第二个矛盾且包含唯一裁判的条件即为答案一直wa。。。。 因为带权并查集是维护一些有特定关系的点,然而裁判和别人的关系是不固定的所以不能一起加入并查集 然后贪心 让你判断能找出裁判的最少条件 = 判断出别人不是裁判的最少条件 那就

2016-07-25 22:27:53 357

原创 poj 1984 带权并查集

根据带权并查集常用的和向量计算差不多的套路进行路径压缩和区间合并#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define maxn 50000using namespace std;int XX[maxn],fa[maxn],YY[maxn];struct

2016-07-25 22:14:29 748

原创 poj 1456 Supermarket 贪心 并查集优化

按价值排序后由大到小加进结果,贪心的放在最后的时间里如果某个时间已经占满往前放这时要用并查集维护这天前面没有占满的最后一天#include<cstdio>#include<algorithm>#include<cstring>#include<cstdlib>#include<queue>#define maxn 10015using namespace std;int n;stru

2016-07-25 22:12:07 296

原创 Codeforces Round #364 (Div. 1) B. Connecting Universities

一棵树n个节点2*k个节点两两相连求最大权值之和 权值最大那每条边就尽量覆盖多次 每条边相当于把把树分成两个点集,假设第一个点集要连的点的数量为a1,第二个点集要连的点的数量数量为2*k-a1,那这条边最多被覆盖min(a1,2*k-a1)次#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#inc

2016-07-24 22:37:53 294

原创 Codeforces Round #364 (Div. 1) A - As Fast As Possible

结论为最后几个学生同时到达就是最短时间 贪心证明 当最后一批学生到达之前有学生到达那之前的学生肯定被公交车载的更远那公交车走的距离就更长用的时间就更长那最后一批学生到达的时间也会晚 当最后一批学生比之前的学生提前到达那前一批学生走的时间会比所有学生同时到达的时间更长那也不是最优解 然后二分距离求同时到达的距离和时间#include<cstdio>#include<cstring>#incl

2016-07-24 22:23:58 295

原创 hdu 5749 Colmerauer

dp46道有类似题 上下左右分别dp一次然后求出以每个点为鞍点的最大上下左右左边界的矩形,然后求里面所有包含这个鞍点的所有子矩形的面积和 求子矩形的面积和公式比较难吧数学太菜#include<cstdio>#include<algorithm>#include<iostream>#define LL long long#define mod (1ll<<32)LL mp[1005][1

2016-07-24 22:11:01 333

原创 bzoj 2243 [SDOI2011]染色 树链剖分区间更新

树链剖分加线段树区间更新 线段树处理是模板形,重点是树链的合并 记录路径所经过的每条链的起始点和终点和他们此时的颜色 然后将记录的点扫一遍如果它与父亲在这条路径上且不在同一条链且颜色相同结果减一#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#include<stack>#define lso

2016-07-24 16:46:21 308

原创 hdu 5726 GCD rmq 二分

rmq 预处理很裸 然后当l-r区间的最大公约数必然是第一个数a[l]的几个质因子相乘的形式,而它最多有log(1000000000)个质因子,所以枚举每个左端点二分次数时不会超过log(1000000000)次,但实际上脑补一下远没有这么多次不会超时,然后枚举每个左端点进行log(1000000000)次二分把结果存入map中#include<cstdio>#include<cstring>

2016-07-23 00:02:08 385

原创 poj 3237 tree 树链剖分模板

代码能力不行玩这个有点坑啊。。。 区间更新 最大值最小值反转就行了//树链剖分#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define LL long long#define maxn 100005#define lson i<<1#define rson (i<<1)+1using

2016-07-22 23:51:35 301

原创 poj 1417 True Liars 带权并查集+母函数dp

并查集求出每个集合的与祖宗是同一类人的数量和不是同一类人的数量然后只能选其中之一或不选,然后背包并求具体选择方案 按网上题解写的….#include<cstdio>#include<vector>#include<utility>#include<cstring>#define maxn 605using namespace std;int dp[maxn][maxn],fa[maxn

2016-07-20 23:04:59 465

原创 hdu 5407 CRB and Candies

lcm(1,2,…,n+1)=(n+1)lcm(C(n,0), C(n,1), …, C(n, n)) 求1到n的lcm 从1扫到n 当i能拆成a^b,a为质数时lcm[i] = lcm[i-1]*a否则lcm[i] = lcm[i-1];#include<cstdio>#include<algorithm>#include<iostream>#define LL long long#de

2016-07-20 22:50:17 318

原创 Codeforces Round #363 (Div. 2) D. Fix a Tree

1.去环, 2.合并成一棵树。 第二步简单,第一步本题如果有环必然经过根,因此把根指向总树的跟#include<cstdio>#include<algorithm>#include<iostream>#include<cmath>#include<cstdlib>#include<cstring>#include<string>#include<vector>#include<s

2016-07-20 22:33:11 274

原创 2016 多校 hdu 5723

首先最小生成树,然后dfs统计每条边经过了几棵子树 每条边经过的子树个数等于这条边连接的子树节点数*(n-子树节点数)因为这是一棵树每条边都能把树分成两个集合,假设第一个集合的元素数目为n1,第二个集合的元素数目为n2,那么从两个集合分别选出一点就有n1*n2种方案#include<vector>#include<algorithm>#include<iostream>#include<cst

2016-07-20 22:18:43 453

原创 hdu 1255 扫描线模板

求覆盖大于一次的总面积#include<cstdio>#include<cstring>#include<algorithm>#include<map>#define lson i<<1#define rson (i<<1)+1using namespace std;double a[5000];int va[50000],n,pre;double ha[50000],len[50

2016-07-18 23:22:22 445

原创 codeforces PLEASE 逆元快速幂

a[i] = (1-a[i-1])/2递推式推出正式公式 然后快速幂加逆元求出公式结果就行了#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define mod 1000000007ll#define LL long longusing namespace std;LL n;LL fast

2016-07-18 23:20:22 363

原创 BestCoder 2nd Anniversary Jewelry 离散化加扫描线

问题在于怎么抽象出矩形面积。。。 求某个数数量恰好是time的子区间个数 当两个点c和d都是a1且两点之间的a1数量等于time时那左端点可以是c之前的且不是a1的那个点的任意一点,右端点可以是d之后的且不是a1的任何一点,那左端点可以移动的左右范围当做矩形长的左右端点的x值,右端点可以移动的左右范围当做矩形长的上下端点的y值这就是个矩形了。。。然后求总面积#include<cstdio>#i

2016-07-18 23:15:28 237

原创 hdoj 1007 临近点对算法模板

思想 分治 所有点按x坐标排序 每次把整体分成两边求出两边所有点中的最短距离然后求出中间一下片点的最短距离最后合并得总体最短距离#include<cstdio>#include<vector>#include<algorithm>#include<iostream>#include<cmath>#define LL long long#define pi acos(-1.0)#d

2016-07-18 23:04:57 570

原创 BestCoder 2nd Anniversary Palace

n个点每次减去一个点,求n种状态的最近距离的和 跑一遍临近点对求出总体最近距离同时记录最近距离确定的两个点的编号 最近距离确定的两个点以外消去的话对最近距离并不影响,那结果加(n-2)个最近距离就行了 然后删掉最近距离确定的两个点的其中之一再跑两遍临近点对求出两个最近距离加到结果上几近模板题。。。#include<cstdio>#include<vector>#include<algori

2016-07-18 22:59:45 208

原创 BestCoder 2nd Anniversary Wool 区间合并模板

抽象出各个区间然后区间合并 区间合并算法 按左端点从小到大进行排序,并设立一个变量记录此时的最右端,从1->n扫一遍 每次分情况讨论且刷新最右端值这个比较好想#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<utility>#include<vector>#define LL

2016-07-18 22:52:26 254

原创 BestCoder 2nd Anniversary Arrange

利用第一个单减函数和第二个单增函数的性质 从头到尾扫一遍设立一个维护此时最大最小值之间可以用的变量一次次累乘就行了#include<cstdio>#include<set>#define LL long long#define mod 998244353using namespace std;int a[100005],b[100005],n;int main(){ int t

2016-07-18 22:45:59 238

原创 BestCoder 2nd Anniversary Oracle

计数排序 +高精度加法不太擅长这种题做个标记#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<vector>#include<string>#include<map>#include<set>#include<queue>#include<stack>#include<cs

2016-07-18 22:43:39 264

原创 Codeforces Round #359 (Div. 2) D. Kay and Snowflake

重心的定义是:以这个点为根,那么所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。1.树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。2.把两个树通过一条边相连得到一个新的树,那么新的树的重心在连接原来两个树的重心的路径上。3.把一个树添加或删除一个叶子,那么它的重心最多只移动一条边的距离。一棵树的重心是它的子树的重心和这棵树的祖宗节点连的几条线

2016-07-16 22:49:10 369

原创 codeforces 361 div2 E. Mike and Geometry Problem

假如每个点被n1条线段覆盖求k个线段覆盖它的方案数 显然C(n1,k) 点太多那就离散化以线段的形式来求最多20万条线段求覆盖线段数更合理#include<cstdio>#include<iostream>#include<algorithm>#include<vector>#define mod 1000000007ll#define LL long long#define maxn

2016-07-16 22:34:49 318

原创 codeforces 362 div2D Puzzles

求i点的遍历位置的概率公式 因为 从祖先到i点的一条线上的所有点都要遍历,其余途中经过的各个点的分枝(除了这条直线)都有两种选择可选可不选 所以概率公式为 deepi+sum[i]/2.0(这个点以上的除了祖先到这个点的线分支上点的数量)#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#incl

2016-07-16 22:29:51 333

原创 hdu 3038 带权并查集

每次给你 从下标a到下标b和为多少,如果与前面给的合法情况不冲突,即为合法情况否则不考虑为错误情况,统计错误情况个数 Sum[]数组代表它到父亲节点前的和,然后整体算法进行向量合成运算#include<cstdio>#include<algorithm>#include<iostream>using namespace std;int fa[200010],Sum[200010];int

2016-07-14 00:13:37 291

原创 poj 1182 带权并查集模板

刚听带权并查集还以为是prim之类的。。。。结果好抽象(人太傻), 这篇博客http://blog.csdn.net/c0de4fun/article/details/7318642/ 把这题讲的很详细但没解释带权并查集到底怎嘛回事。 普通并查集每个集合的元素就是平等的他们之间没有任何关系除了在一个集合里 带权并查集 一个集合里的元素他们会存在某种约束某种联系也就是权重 这道题的集合里的关

2016-07-14 00:08:50 461

原创 hdu 4763 Theme Section 扩展kmp

扩展kmp,next表求前缀和后缀的公共部分同时记录这个前缀是否在这个总串去除它长度的前缀和后缀后依然存在,最后拿出符合结果的最大前缀#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace std;char a[1000010];int nexta[1000010],la;

2016-07-12 22:08:25 233

原创 HDU 4513 单增回文 manacher

跑manacher的同时判断有序就行了 回文串题目不是很多敲的很少所以敲的时候要仔细别出Bug#include<cstring>#include<cstdio>#include<map>#include<string>#include<algorithm>#include<iostream>using namespace std;int a[100010],s1[201111],p[

2016-07-12 20:49:07 259

原创 poj 3376 扩展kmp求回文加字典树

回文串的性质 : 它的每个前缀都是它的后缀, 正序串和反序串kmp得后缀回文串的各个长度 反序串和正序串kmp得前缀回文串的各个长度 kmp求出所有串的前缀回文串和后缀回文串然后把正序串依次存入字典树,然后枚举反序串进行查询与字典树上的串进行匹配得出结果。 坑了两个晚上#include<cstdio>#include<cstring>#include<vector>#define LL

2016-07-11 23:21:12 888

原创 hdu 3613 扩展kmp求回文串

新建一个串为给定串的反转, 原串跟新串匹配求得是前缀回文, 新串跟原串匹配求得是后缀回文。#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<iostream>#include<vector>using namespace std;int va[30],pre[510000],la

2016-07-10 19:24:58 651

原创 hdu 3374 next表,最大最小表示法模板

设两个指针i=0,j=1,一个长度变量k=0 a[i+k]==a[j+k] k++; a[i+k]>a[j+k] i = i+k+1; a[i+k]#include<cstdio>#include<algorithm>#include<iostream>#include<string.h>using namespace std;char a[1000005];int nexta[

2016-07-10 15:29:47 379

原创 codeforces 361D rmq st算法模板

类似区间DP#include<algorithm>#include<iostream>#include<vector>#include<map>#include<string>#include<cstdio>#include<stack>#include<cmath>#include<cstring>#define LL long long#include<string>#in

2016-07-08 10:48:45 359

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除