自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ws_yzy的博客

一路艰辛,一路风景。

  • 博客(62)
  • 收藏
  • 关注

原创 3831: [Poi2014]Little Bird|DP|单调队列

做单调队列的题还是好虚.. 维护f[i]f[i]的单调递增序列 如果i>j,i>j,状态ii比状态jj更优的条件是跳到ii点的步数比jj少或者步数相等但是ii较高#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<vector>#include<

2016-02-29 18:41:36 511

原创 POJ3017Cut the Sequence|DP|单调队列|set

题目大意:给定一个有n个非负整数的数列a,要求将其划分为若干个部分,使得每部分的和不超过给定的常数m,并且所有部分的最大值的和最小。 维护一个a数组的单调下降序列,求答案的时候可以暴力,set会快一点#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include

2016-02-29 15:41:56 491

原创 3156: 防御准备|DP|斜率优化

显然看完题目就知道是DP了 F[i]F[i]表示从ii个检查点到最后全都合法的最小花费 G[i]G[i]表示在第ii个检查点放置守卫塔的情况下从ii个检查点到最后全都合法的最小花费 G[i]=a[i]+F[i+1]G[i]=a[i]+F[i+1] F[i]=min((j−i)∗(1+j−i)2+G[j]),j≥iF[i]=min\big(\frac{(j-i)*(1+j-i)}{2}+G[j

2016-02-29 10:32:01 400

原创 BZOJ 2729: [HNOI2012]排队|排列组合

这显然是一道排列组合的纯数学题(偏题) 考虑将男生和老师先排出来,然后再插入女生 因为两个老师不能靠在一起,可以先计算排完男生和老师后两个老师在一起的方案数为,把两个老师绑在一起看成一个男生A(n+1,n+1)∗A(2,2)A(n+1,n+1)*A(2,2) 这样两个老师之间必须插入一个女生,然后剩下的m−1m-1个女生就任意插入男生之间,这样总的方案数为m∗A(n+1,n+1)∗A(2,2)

2016-02-29 08:20:06 692

原创 3696: 化合物|树形DP

用a[x][i]a[x][i]表示以节点xx为根深度为i的结点数 然后暴力转移…… 有人说这是母函数QAQ..smg#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<set>#include<map>#include<vector>#include<queue>#include<io

2016-02-28 16:49:09 813 2

原创 HDU 1028 Ignatius and the Princess III|母函数

母函数裸题..套模板就OK#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<set>#include<map>#include<vector>#include<queue>#include<iostream>#include<algorithm>using namespace std

2016-02-28 15:34:00 406

原创 BZOJ 2111: [ZJOI2010]Perm 排列计数|组合数学|Lucas定理|DP

题目也就是让求1..n1..n的小根堆的数目 F[i]F[i]表示以标号为i的点做堆顶的合法堆的数目 f[i]=C(size[i]−1,size[i<<1])∗f[i<<1]∗f[i<<1|1]f[i]=C(size[i]-1,size[i<<1])*f[i<<1]*f[i<<1|1] 组合数要用Lucas定理求!#include<bits/stdc++.h>using namespace

2016-02-28 10:18:06 565

原创 BZOJ 2467: [中山市选2010]生成树|组合数学

有一个五边形切去两条边,其中一条必须是中间n边圈上的边,其他的五边形都任意切去一条边。(建议动手画一画) 答案就是 4∗n∗5n−14*n*5^{n-1}#include<bits/stdc++.h>using namespace std;const int R=2007;int T;int cal(int x){ int ans=4*x%R; for(int n=x-1

2016-02-28 08:05:07 563

原创 2802: [Poi2012]Warehouse Store|贪心

尽量满足当前顾客的要求,如果不能满足就更新当前的库存 找前面一个需求量最大的顾客给他踢掉换成当前顾客#include<bits/stdc++.h>#define pa pair<int,int>using namespace std;int sc(){ int i=0; char c=getchar(); while(c>'9'||c<'0')c=getchar();

2016-02-28 07:07:05 548

原创 4408: [Fj Winter Camp 2016]神秘数&&4299: Codechef FRBSUM|主席树

好神的一道题! 很容易发现假如已经构造出来了1,2...max1,2...max再插入一个数xx,假如x≤max+1x\leq max+1那么现在就可以构造出1,2...max,max+1...max+x1,2...max,max+1...max+x 于是我们可以这样做,先建立主席树。对于询问区间[l,r][l,r],当前的max=0max=0,然后不断查询区间[l,r][l,r]中11到max

2016-02-27 20:26:07 1313

原创 BZOJ 3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛|动态规划|排列组合

DP就是一个傻逼题..f[i]f[i]表示有ii头牛的方案数 然后这道题是我从黄学长的排列组合的分类里找的..数学太渣.. 排列组合的做法,枚举牡牛的数量假设有ii头,每两头牛之间至少有kk头另一种牛将其隔开,就提前抽出这些用来隔开的牛然后组合计数#include<bits/stdc++.h>using namespace std;const int R=5000011;int f[100

2016-02-27 18:51:53 1087 3

原创 中国剩余定理

数论太弱啦,还是来点基础的吧..终于不用担心小学奥数题不会做啦…… 中国剩余定理是解决线性模方程组的东西 x≡a1(modp1)x\equiv a_{1}(mod \;p_{1}) x≡a2(modp2)x\equiv a_{2}(mod \;p_{2}) .......... 考虑将两个方程合并 x=k1∗p1+a1x=k_{1}*p_{1}+a_{1} x=k2∗p2+a2x=k_

2016-02-27 16:58:02 526

原创 BZOJ 3505: [Cqoi2014]数三角形|组合数学

这题暴力只能呵呵呵.. 先算出所有的任取三点的方案数然后减去在同一直线的情况 枚举所用长度为ii宽度为jj的矩形,考虑用矩形的两个相对的顶点做三角形的两个顶点,然后计算出在矩形内部的的和这两个点共线的点的个数 这个个数其实就是gcd(i,j)−1gcd(i,j)-1然后如果矩形的长度和宽度都不是00的话有两对相对的顶点需要再乘以22#include<bits/stdc++.h>#define

2016-02-27 09:39:42 436

原创 BZOJ 4402: Claris的剑|组合数学

由于存在集合等价的情况,我们就只考虑字典学最小的方案 假设最大值是maxmax,那么构造出的序列有两种情况 1,2,1,2,1,2....3,2,3,2,3....max−2,max−1,max−2,max−1....max1,2,1,2,1,2....3,2,3,2,3....max-2,max-1,max-2,max-1....max 1,2,1,2,1,2....3,2,3,2,3...

2016-02-27 08:16:47 949

原创 BZOJ 3910: 火车|LCA|并查集

计算答案显然是一步一步的走然后求Lca用深度计算,关键就是怎么标记走过的路径 用并查集记录从这个点出发经过的最上端的城市,让后每次合并的时候从两个端点向lca合并,因为lca并查集记录的肯定是所有路径最上端的点#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<v

2016-02-26 18:50:30 630

原创 BZOJ 4276: [ONTAK2015]Bajtman i Okrągły Robin|贪心|匈牙利

首先这个题目名什么鬼..奇怪的语言 嘛..正解是线段树优化构图最大费用流..smg 似乎可以贪心一下,因为Hungary当前这个节点的时候不会取消以前匹配的节点,所以直接按权值排序匈牙利。 速度竟然虐了网络流n3n^3的复杂度啊.#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue

2016-02-26 16:50:43 1175

原创 BZOJ 2005: [Noi2010]能量采集|容斥原理

做这个题上来就SB.. Ans=∑i=1n∑j=1m2∗gcd(i,j)−1Ans=\sum_{i=1}^{n}\sum_{j=1}^{m}2*gcd(i,j)-1 然后我想成2∗gcd(i,j)2*gcd(i,j)的因子个数,各种推式子,各种过不了样例.. gcd(x,y)=i说明,(0,0)到(x,y)能被分成相同的i块,每一块中间都不经过任何整点 龙哥一语道破!!!求起来类似莫

2016-02-26 15:31:03 394

原创 BZOJ 2300: [HAOI2011]防线修建|set维护凸壳

因为只支持插入操作,所以需要倒过来做.. 第一次写维护凸壳的东西…不抄题解..自己YY斜率乱搞(都忘了写叉乘)代码又长常数又大 1A一刻赛艇~ 还是找一个靠谱的的模板吧...#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include<

2016-02-26 09:23:40 648

原创 BZOJ 3728: PA2014Final Zarowki|贪心

因为要求总功率最小,所以按功率从小到大枚举已有的灯泡,尽量使用先使用小的,然后贪心选取第一个小于等于这个功率的房间,让后将差值放入堆中,用来最后更新答案,如果到最后时仍然有>=k>=k的数量的灯泡没用则无解,否则就有解 都说用STL来水题..怎么感觉题并不水..#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>

2016-02-26 07:24:17 750

原创 BZOJ1170: [Balkan2007]Cipher|hash

什么傻逼题..没人做果然都是明智的选择…… 让我们来看一下po姐既视感…… 一开始写的自然溢出 结果OLE 以为是自然溢出被卡掉了于是写了双取模…… 结果还是OLE 最后发现尼玛这题读入坑爹……字符串里有空格不说,满满的不可见字符是咋回事…… 记住不要用scanf读入……可以用gets,或者fread,注意要把一开始的回车过滤掉 getchar读进来全是错的 不知道怎么回事…

2016-02-25 21:16:21 621

原创 BZOJ 1879: [Sdoi2009]Bill的挑战|状压DP

看完题解感觉思路很正常,为什么自己想不出来捏.. F[i][j]F[i][j]表示ii个字符都匹配好了时状态为jj(状压表示)的方案数#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<queue> #include<set> #include<map> #inclu

2016-02-25 19:28:54 876

原创 BZOJ 1180: [CROATIAN2009]OTOCI|动态树

做了几道LCT的题后发现终于会打裸题啦QAQ#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<queue> #include<set> #include<map> #include<vector> #include<algorithm> #include<io

2016-02-25 14:25:05 644

原创 BZOJ 1798: [Ahoi2009]Seq 维护序列seq|线段树

这道题和2631对标记的处理方法是一样的..以下直接复制 将乘法和加法合并起来算做一个标记,mulmul数组和plusplus数组两个数组算做一个标记,设权值为xx那么标记的意思就是把所有子节点的的xx都变为:mul∗x+plusmul*x+plus这样只要多维护一个sizesize数组就可以维护,下传标记也很好写 附上链接http://blog.csdn.net/ws_yzy/artic

2016-02-25 11:08:47 654

原创 BZOJ 3732: Network|动态树

看了po姐的blog..算了我也LCT水一发.. 正常的做法 lct就是维护最小生成树,然后维护链上的最大值#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<queue> #include<set> #include<map> #include<vector>

2016-02-25 09:31:10 479

原创 BZOJ 2631: tree|动态树

好虚.... 这题的做法显然是LCT,然后就是裸的操作,对于这个乘法和加法,我们怎么做标记呢? 就是将乘法和加法合并起来算做一个标记,mulmul数组和plusplus数组两个数组算做一个标记,设权值为xx那么标记的意思就是把所有子节点的的xx都变为:mul∗x+plusmul*x+plus这样只要多维护一个sizesize数组就可以维护,下传标记也很好写#include<cstdio> #

2016-02-25 08:08:57 643

原创 省选算法汇集(持续更新)最后更新2016.2.29

####**Updata2.27**数论相关知识(知道的太少了!)快速幂欧拉函数线性筛Lucas定理容斥原理莫比乌斯反演欧拉定理(费马小定理)各种奇怪的数学公式组合数学(弱到爆!)FFT ~~(有种弃疗的FEELING)~~ ~~不知道的东西太多了..~~ ......

2016-02-24 19:22:38 1623 10

原创 BZOJ 3713: [PA2014]Iloczyn|暴力

这种水题我也能交4遍 0.0 斐波那契数列是指数级的的增长,所以求不了多少就到了10910^9,暴力求出所有的小于等于10910^9数,暴力判断…… PS:PS: intint不靠谱,longlonglong long保平安#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue

2016-02-24 18:49:37 840

原创 BZOJ 3545: [ONTAK2010]Peaks|Splay启发式合并

其实启发式合并就是暴力合并,然后就是名字比较高端 暴力合并的时候把小的往大的合并,这样可以保证复杂度不会闹鬼 先说这题的做法,把边从小到大排序,把询问按对边的限制也从小到大排序,然后枚举询问,动态加满足小于等于当前限制的边,暴力合并。 做法很简单,然后就很奇怪一直TLE..非常玄学..然后通过某种奇怪的方式发现了bug:在暴力合并的时候,我们需要dfs遍历整个较小的splay树,把所有的节点都

2016-02-24 17:13:51 1092

原创 BZOJ 3000: Big Number|斯特林公式

答案显然Ans=⌊logn!logk⌋+1Ans=\lfloor\frac{logn!}{logk}\rfloor+1 斯特林公式(不是加特林n!≈2πn−−−√∗(ne)nn!\approx\sqrt{2\pi n}*(\frac{n}{e})^n 对于小范围的数暴力计算,大范围的数直接取近似就行啦 精度问题很玄学……#include<cstdio>#include<cstdlib>#i

2016-02-23 19:44:51 1397 2

原创 BZOJ 3110: [Zjoi2013]K大数查询|线段树套线段树

这个题貌似有很多姿势都可以做。 我用的是线段树套线段树。 因为存在区间插入操作,所以我们可以让外层的线段树为权值线段树,内层的线段树为这个权值区间的数在原序列中的位置数量。 这样插入操作就相当于外层的线段树单点修改,内层的区间修改。 然后由于考虑到内存的限制,如果线段树节点全开内存肯定会爆而且会TLE。 这时候我们可以考虑lazy标记,然后有些节点由于父节点有了标记可能直接没开这个节点,这

2016-02-23 18:42:21 555

原创 BZOJ 3196: Tyvj 1730 二逼平衡树|线段树套平衡树

第一次写真正的树套树:线段树套平衡树?!(平衡树套线段树?!) 线段树维护的是区间,然后对于线段树维护的区间的所有数字都维护一个平衡树,然后所有的操作都对每个平衡树单独处理。 比如说操作3,需要先二分答案,然后再询问每个区间的平衡树来judgejudge 这样的复杂度是log3nlog^3n的,感觉好暴力!!分块什么的肯定也可以搞一搞。 树状数组套主席树怎么没人写,真的会MLE吗 好久没写

2016-02-23 15:18:09 1025

原创 BZOJ 3166: [Heoi2013]Alo|可持久化Trie树

枚举次大值,可以发现他可以任意抑或的数肯定在一个区间(L,R)(L,R)中 LL为这个数左边第二个大于他的数的位置,RR也同理,然后用可持久化Trie树直接贪心查找抑或的最大值。 然后LL和RR怎么求呢???? 诶..我们发现可能数据是随机的,所以暴力就可以过掉了..想要快一点可以用set水一水#include<cstdio>#include<cstdlib>#include<cstrin

2016-02-23 10:05:15 494

原创 BZOJ 3673: 可持久化并查集 by zky&&3674: 可持久化并查集加强版|主席树

用主席树实现可持久化树组(好高端的一个名字)。。 其实就是非常简单的东西,传统的可以对每一次操作都建立一个fa数组实现可持久化,但是这样会TLE+MLE,然后我们发现每次操作只会对于上一次改变很少的一部分,大部分可以沿用上一次操作的数组,这就出现了我们的黑科技——主席树,用它来实现,用它来维护每一个点的fafa,初始时建树fa[i]=ifa[i]=i,然后不断更新就可以了。 对于3673据说不用

2016-02-23 08:56:47 592

原创 BZOJ 3994: [SDOI2015]约数个数和|莫比乌斯反演

有一个非常神的东西: d(n∗m)=∑i|n∑j|mgcd(i,j)==1d(n*m)=\sum_{i|n}\sum_{j|m}gcd(i,j)==1 然后Ans=∑i=1n∑j=1m⌊ni⌋⌊mj⌋(gcd(i,j)==1)Ans=\sum_{i=1}^n\sum_{j=1}^m\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor(gcd(i,j

2016-02-21 09:18:33 553

原创 BZOJ 2653: middle|主席树

这题思路确实比较难想!建主席树也是非常的特别! 考虑二分答案,如果当前check的答案是xx那么大于等于xx的数的贡献是1,其余的贡献是-1,然后就判断一下是否存在总贡献>=00的区间,判断的话需要对所有的数建立一个线段树,然后直接建会MLE+TLE,然后就需要我们的黑科技可持久化的数据结构主席树,先把所有的位置都设为1,然后把数排序后从小到大建树每次-1。 非常神的建树方式,从小到大插入数,插

2016-02-20 21:39:41 491

原创 BZOJ 3123: [Sdoi2013]森林|主席树|启发式合并

做法和2588一模一样,只不过多了个合并操作,所谓的启发式合并,就是永远都把小的往大的上合并,然后合并的时候暴力就行了. 因为查询的时候忘记减去左区间的数量,RE的根本停不下来….#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include

2016-02-20 14:59:39 855

原创 BZOJ 3207: 花神的嘲讽计划Ⅰ|莫队|主席树|hash

本来以为会卡主席树内存,然后写了莫队T到死,发现想多了…… 然而这题并不卡内存,直接主席树做就好了。 先给长度为K的序列hash一下然后就变成了询问一个区间内有没有某一个数,我离散化了一下,然后改成主席树发现又T到死……woc…终于发现二分查找有鬼.. 然后就发现似乎莫队和主席树的二分都是一样的都有鬼..改了一下发现都能过,而且,而且莫队比主席树要快!!!!!!!!!! 发现主席树似乎并不需

2016-02-20 09:31:04 734

原创 BZOJ 3261: 最大异或和|可持久化Tire树

设a[i]a[i]为前ii个数的异或和,Ans=x(xor)a[n](xor)a[p−1]Ans=x(xor)a[n](xor)a[p-1]使其最大化,然后可以用可持久化Tire树来维护一下. 数组开的一定要够大,1000W还是会跪!!!!#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<qu

2016-02-19 21:11:21 746

原创 BZOJ 2588: Spoj 10628. Count on a tree|主席树

用主席树维护这个点到根上的数,然后Lca上的数单独处理!!!!!!!!!#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include<set>#include<map>#include<iostream>#include<algorit

2016-02-19 18:46:59 539

原创 Codeforces8VC Venture Cup 2016 - Elimination RoundA---F

A. Robot Sequence 题意:给定一个字符串,每个字符代表向上下左右其中方向移动一个单位,找出能回到原位置的子串数目。 暴力枚举.#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include<set>#include<map

2016-02-19 16:15:49 966

空空如也

空空如也

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

TA关注的人

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