- 博客(181)
- 收藏
- 关注
原创 bzoj 2310: ParkII
带独立插头的插头dp,注意比环的插头dp的区别主要是在只有一个插头并且是独立插头的时候,有可能可以结束线路,剩下的就是2*2特判变成3*3特判。然后就是各种打错变量名,还有一个宝贵的经验就是手写二进制分解其实没有太麻烦。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e
2016-04-21 19:56:27 517
原创 bzoj 4538: [Hnoi2016]网络
查询的是不包含x的链的权值最大值。树链剖分后,每条链变成O(logn)个区间,那么未被这个链包含的也有logn个区间,在这logn个区间上做修改即可。因为有删除操作,每个线段树节点开一个堆维护。#include#include#include#include#include#include#define ll long long#define inf 1e9#define ep
2016-04-21 14:04:26 494
原创 bzoj 4540: [Hnoi2016]序列
题意坑爹,不需要判断两个子串是否相等。然后这道题几乎就是bzoj 4262了。除了线段树做法,还可以用莫队用单调队列预处理出L[i]表示i左边第一个小于a[i]的位置,R[i]表示i右边第一个小于a[i]的位置。fl[i]表示以i为左端点的所有区间的答案,=a[i]*(R[i]-i)+fl[R[i]],因为[i,R[i])位置的贡献都是a[i],[R[i],n]这个区间的答案与fr
2016-04-21 11:04:56 676 1
原创 bzoj 4542: [Hnoi2016]大数
在p!=2且p!=5的情况下,x*10^k%p=0,则x%p=0,所以可以维护后缀和%p的值,然后用莫队求区间内相同的数的对数。p=2 or p=5 最后一位决定%p之后的值,yy一下即可#include#include#include#include#include#include#define ll long long#define inf 1e9#define eps 1e-8#
2016-04-21 09:26:41 373
原创 bzoj 2461: [BeiJing2011]符环
f[i][s1][s2][s3]枚举到前i个字符,前半段左括号-右括号的值是i,后半段未匹配的左括号个数是s2,未匹配的右括号个数是s3.后半段去掉已匹配的括号后一定是这样:)))(((。转移时依次枚举左边添加左括号,左边添加右括号。注意在右面添加右括号时,一种情况是减少一个未匹配的左括号,一种情况是增加一个未匹配的右括号。然后记忆化搜索。#include#include#
2016-04-20 20:35:46 450
原创 bzoj 4373: 算术天才⑨与等差数列
看到这个限制条件非常强,就不难考虑到hash。存在一个性质,只要知道这个区间的最大值,最小值,希望得到的等差序列就唯一确定,需要干的工作仅仅是看原来的序列和这个序列是否相同。首先,用各种特判:k=0很好做,若k!=01.相邻两项的差的gcd是k的倍数->维护差的gcd2.没有相同的项->维护pre的最大值3.区间和等于这个等差序列的和->维护区间sum用线段树维护一下就
2016-04-20 15:52:27 611
原创 bzoj 1913: [Apio2010]signaling 信号覆盖
每个凸四边形对答案的贡献是2,每个凹四边形对答案的贡献是1.凹四边形贡献1是显然的,凸四边形贡献是2的原因是:如果一个点在一个三角形的外接圆内,那么α+β现在考虑如何求凸四边形个数和凹四边形个数,凹四边形比较好求。枚举每个点,设其为p,统计有多少个三角形覆盖了这个点,那么,以这个点为中心的凹四边形就有多少个。考虑补集转化,求有多少三角形不覆盖这个点。将所有剩余点极角
2016-04-20 15:04:40 661
原创 bzoj 4262: Sum
把询问离线下来,查询max和查询min相似,现在只考虑查询max令sum[l,r,x]表示l到r内的数为左端点,x为右端点的区间询问的答案那么询问就是sun[l1,r1,r2]-sum[l1,r1,l1-1]从1到n枚举x,维护区间线段树表示sum[l,r,x],发现从x-1转移到x的过程中,每个数加上了max(a[pos]..a[x])的答案。用单调队列维护一个单调递减的序列,由
2016-04-20 11:28:35 652
原创 bzoj 3832: [Poi2014]Rally
首先建图,S向每个点连边,每个点向T连边,那么问题就变成了求S-T最长路-2拓扑图的每条边都是从拓扑序小的点连到拓扑序大的点经过某条边的最长路是从S沿最长路走到这条边的x,再从y沿最长路走到T所以,扫描整个序列,维护所有pos[e[i].x]维护所有的边,就是在扫描到x的时候,把所有到达x的边删除,查询,把所有从x出发的边加入。我一直在想把最长链拉出来,然后用类似上面的方法维护
2016-04-20 10:13:01 588
原创 bzoj 4537: [Hnoi2016]最小公倍数
一部血泪史:开始我想到分块,但是一直在想直接按照a的权值分块,却发现无论怎么做复杂度都不对。看题解,发现直接把边分块就行。题解:考虑暴力做法,就是把所有想到这个做法,不难想到分块,把边按照a为第一关键字,b为第二关键字排序,分成若干块。每次把前i块的边和第i块的询问按照b的大小排序,按照b的权值从小到大把边加入并查集,注意如果这条边的a权值>这一块的询问的最小a权值,那么不
2016-04-20 08:57:59 1413
原创 bzoj 4446: [Scoi2015]小凸玩密室
#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 200010using namespace std;ll f[N][20],g[N][20],A[N],B[N],dis[N];int fa[N],lson[N],rson[N],dep[N]
2016-04-19 21:47:14 719
原创 bzoj 3956: Count
发现好点对互不跨立,所以只有O(n)个,用单调队列找出这O(n)个然后用主席树维护就可以了。对于a[i]相等的情况的单调队列写错了一些细节。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 300010#define TR 1
2016-04-19 19:06:59 383
原创 bzoj 2809: [Apio2012]dispatching
线段树合并or可并堆or树上主席树我写的线段树合并,注意query递归到最后要return sum/x,就是只剩一个数,但是个数太多。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 100010#define TR 3200
2016-04-19 16:19:04 359
原创 bzoj 4524: [Cqoi2016]伪光滑数
看到求第k大,k很小,首先应该想到k路归并。利用可持久化可并堆进行dpg[i][j]表示前i个素数,用了j个质因子可以表示的数的集合g[i][j]=sigma(g[i-1][j-k]*p[i]^k) sigma表示集合的并,乘法用打标记实现。然后k路归并,按照使用了的质因子个数分类。令mx[j]表示取j个质因子的情况下可以取得最大素数用堆维护g[mx[j]][j]的最大值,
2016-04-19 15:33:03 482
原创 bzoj 3073: [Pa2011]Journeys
注意是无向图。线段树优化连边跑最短路。#include#include#include#include#include#define ll long long#define inf 1e9#define eps 1e-8#define md#define N 5000010using namespace std;struct yts { int t,ne; bool l;} e[130
2016-04-18 15:52:35 606
原创 bzoj 2140: 稳定婚姻
查询二分图每一条边是否一定在二分图最大匹配上:首先任意一个最大匹配,然后把两个匹配点缩成一个点,然后用这个图跑强连通分量,如果一个点所在的强连通分量大小大于1,那么说明原图存在一条匹配边-非匹配边-匹配边-非匹配边的环,所以这些边不一定在最大匹配上。#include#include#include#include#include#define ll long long#define
2016-04-18 15:05:24 453
原创 bzoj 2162: 男生女生
二分图最大团=补图最大独立集,因为这道题是人数多为第一关键字,男生多为第二关键字,所以男生的权值设为n+2,女生设为n+1连边S->x flow=n+2x->y+n(xy之间没有边) flow=infx+n->T flow=n+1然后总人数是ans/(n+1),男生是ans%(n+1)发现任选一种,图都是一样的,A个男生向B个女生的每个都有边。容斥,另表示i个男生j个女
2016-04-18 14:54:48 610
原创 bzoj 4111: [Wf2015]Keyboarding
傻逼广搜,我却想不出来.f[i][j][k]表示位置ij,打完第k个字母的最少步骤,然后这个题卡内存,用动态内存或者压着内存开数组.以后如果再看到网格图的题,要想到与每个点连边的只有4个.#include#include#include#include#include#define ll long long#define inf 1e9#define eps 1e-8#
2016-04-18 11:08:36 1162
原创 bzoj 4499: 线性函数
0没有逆元!0没有逆元!0没有逆元!重要的事情说三遍!把query的式子展开就是0没有逆元!0没有逆元!0没有逆元!重要的事情说三遍!把query的式子展开就是首先是一个看上去很对的做法:另d[i]=PI[j=i to n] k[i]那么答案就是用线段树维护d,维护b[i-1]*d[i]的区间和就可以了。最后答案*d[r+1]^(
2016-04-15 09:45:28 709
原创 bzoj 4456: [Zjoi2016]旅行者
分治+最短路离线,分治,每次查询起点终点都在[x1,x2][y1,y2]内的答案。接下来讨论x2-x1>y2-y1的情况,反之类比即可。现在我们要计算的是路径范围在这个矩形之内,且路径经过中轴线的答案。枚举中轴线上的每个点,计算它到矩形内的点的最短路,然后用dis[a]+dis[b]更新询问的答案。之后分治查询两个点在中轴线同一边的答案。这样做为什么是对的?在分治的过程中,
2016-04-14 19:59:08 1113
原创 bzoj 4444: [Scoi2015]国旗计划
破环成链,对于每个点的策略是找最后一个能传递到的旗手,每个点都指向一个特定的点,这样形成了一棵树。如果father[x]传递到的最后一个点是y,那么x传递到的最后一个点在x到y的路径上,所以如果把一条链看成一段决策,那么决策点所在的深度是不减的。所以可以对树进行dfs,维护一个双端队列,每次暴力进出队列,然后ans=dep[y]-dep[x]+1。复杂度O(n)还有一种倍增的写法:
2016-04-14 18:28:42 796
原创 bzoj 4455: [Zjoi2016]小星星
一种暴力做法是f[x][y][S]表示以i为根的子树,x匹配的是y,使用了的集合是S的方案数,然后转移显然,然而我并没有想到。正解非常巧妙。枚举集合S,要求所有点只能和S中的点配对,可以多个点匹配一个点,f[x][y]表示x匹配的是y,以x为根的子树的方案数,转移yy一下就行。然后容斥 如果|S|&1 == n&1 那么ans+=sum 否则 ans-=sum这道题告诉我,遇到枚举
2016-04-14 14:58:36 934
原创 bzoj 4402: Claris的剑
要求本质不同,考虑字典序最小的排法序列是这样的:1(212121……)2(323232……)3(434343……)…… m或者1(212121……)2(323232……)3(434343……)…… m m-1这两种是没有交集的,因为在确定m的值之后,序列长度的奇偶性也就确定了。每个序列相当于 1 2 3…… m (m-1) 在第1到m-1个间隙插入任意个数对(i+1,i
2016-04-14 11:50:50 776
原创 bzoj 4454: C Language Practice O(n)-O(1) gcd
O(n)-O(1) gcd数n的质因数分解最多只有一个数大于sqrt(n),且那个数一定是素数一个数一定可以分解成三个数相乘,每个数于是,我们可以通过O(n)的预处理,以O(1)的效率回答两个数的Gcd计算0~sqrt(n)之间的数两两的gcd,1到n的三个数相乘的分解。然后计算两个数的gcd枚举一个数的这三个因数,设枚举到的数是x如果x否则,x是个质数,只要看另一
2016-04-14 09:35:04 1650
原创 bzoj 4421: [Cerc2015] Digit Division
显然是找前缀为0的断点个数,注意如果全局答案不是0,那么ans=0下面是简单的证明(kouhu)首先,证明只有前缀为0的位置可以成为断点。第一段显然前缀只能为0假设前k段前缀只能为0,那么第k+1段一定满足 (f[k+1]-f[i]*10^(k-i))%m=0,由于f[i]%m=0,所以f[k+1]%m=0;所以只有前缀为0的位置可以成为断点。之后证明任意两个断点之间都是合
2016-04-13 19:50:24 554
原创 bzoj 4448: [Scoi2015]情报传递
首先想到实际上是查询链上开始搜集的日子小于x的点的个数,然后yy了树上莫队做法。其实这就是树上主席树的 裸题。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define TR 4000010#define N 200010using nam
2016-04-13 19:44:46 573
原创 bzoj 4401: 块的计数 水题
水题,想麻烦了一点点我的思路:显然只有sz|n时才有可能合法,一个数的约数个数时O(logn)的,所以可以暴力dp题解:其实,当且仅当一棵子树的sz[z]是块的大小的倍数,这个子树的根可以成为一个块的根,所以枚举一下答案暴力就行。#include#include#include#include #define ll long long#define inf 1e9#defi
2016-04-13 18:51:25 469
原创 bzoj 3307: 雨天的尾巴
卡常数+卡内存,如果离散化了应该能好很多,但是我犯逗没有这么做首先如果是序列上在一段内加入一个数,那么就是在位置l +1,在位置r -1,然后用权值线段树维护最大值就行。那放在树上呢?dfs+线段树合并,这个做法好像可以解决很多在序列上按照奇奇怪怪方式扫描并维护奇奇怪怪的东西,然后搬到树上的问题。如果不是用线段树的维护,也可以启发式合并这么搞。在x,y打上+1,lca(x,y) f
2016-04-13 16:22:57 476
原创 bzoj 4522: [Cqoi2016]密钥破解
数论模板大集合#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define mdusing namespace std; ll mul(ll a,ll b,ll p){ ll ans=0; while (b) { if (b&1) ans=(ans+a)%p;
2016-04-13 11:31:59 524
原创 bzoj 4521: [Cqoi2016]手机号码
f[i][j][012][k][s][d]表示前i位,开头为j,(有k-1位相同,是否已经出现3位相同), 出现48的状态为s,压位/不压位的方案数由于11位不含前导0,不用写不足len位的dp又写成 f[.....][i==a[i]]++ 应该是 f[....][i==a[1]]++#include#include#include#include #define ll long
2016-04-13 10:44:31 505
原创 bzoj 4519: [Cqoi2016]不同的最小割
读错题了,注意最小割树是针对无向图而言的。然后就是裸题。#include#include#include#include#include#define ll long long#define inf 1e9#define eps 1e-8#define md#define N 900using namespace std;set st;struct yts { int x,t,f,ne
2016-04-13 10:06:17 590
原创 bzoj 3451: Tyvj1953 Normal
只想到了要单独考虑每个点的贡献如果x是x到y路径上第一个被删除的点,那么对答案有1的贡献所以总共的答案就是所有点对的1/dis(x,y)注意dis(x,x)只算一遍这个可以用点分治+fft解决。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define
2016-04-12 15:58:33 423
原创 bzoj 3119: Book
单独考虑每个+或-对答案的贡献,会发现第i个位置+A对和的贡献是(n-i+1)*A所以联立方程组ax-by=M-n*Xx+y=n*(n-1)/2解出x和y然后把x和y用1~n-1的数不重复的和表示出来,从n-1到1枚举,用较大的数就行。#include#include#include#include #define ll long long#define inf 1
2016-04-12 15:00:12 534
原创 bzoj 4500: 矩阵
开始以为建出图来搞高斯消元,然后把每个数线性表示写出来。看题解发现想复杂了,直接任意构造解就行了。对于限制条件a[1]+b[1]=c[1]a[2]+b[1]=c[2]a[2]+b[2]=c[3]a[1]+b[2]=c[4]这4个式子,(1)+(3)-(2)就是式子(4),所以还相当于3个式子,可以任意解#include#include#include#inc
2016-04-12 14:16:25 705
原创 bzoj 4504: K个串
求全局第k大,k比较小,不难想到要找到当前最大的数之后去拓展几个小一点的数。用主席树维护右端点是每个数时左端点的答案,发现加入一个数后更改的是[pre[i],i]连续的一段开始我自己想,把根节点加入堆中,然后每次加入它的两个儿子节点,如果l==r就是答案,但是这样很难处理答案为负数的情况实际上,堆中维护的是五元组(root,l,r,id,mx)表示现在的右端点是root,当前代表的区间
2016-04-12 11:23:59 1111
原创 bzoj 3667: Rabin-Miller算法
模板题,但是感觉mul这个函数可能有问题。要不是数据范围是10^18,写快乘就行了。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define mdusing namespace std;ll mx;ll mul(ll a,ll b,ll p){ ll
2016-04-12 09:24:57 605
原创 SDOI2016r1游记
做梦一般,SDOIR1就过去了,成绩不错,但总有一些小的细节不是太如意。Day0早上10点的火车,在车上和同学聊了一些奇奇怪怪的题,就到了济南,然后报道。感觉自己整个人都hai起来了。晚上写了一道题,背背板子,就睡觉了。Day1抽签,发现我们学校只有我,Oxer,davidxu在第二考场,但是感觉外校的神犇好多呀。进入考场,敲完头文件、对拍之后就不知道干什么了,干坐了10分钟,
2016-04-12 08:25:17 1831 2
原创 WC2016——还是认真练码力吧
从绵阳回来也好几天了,一直不忍心面对自己烂成狗的比赛成绩,但是该总结还是要总结的,顺便列一列之后的计划游记第一次去四川,走之前一个月就缠着老师说要去成都爽一发,然后就去吃了好多好吃的,也发现自认为不能吃辣的我还是蛮能吃的。老师推荐的辣牛肉,超级够味的成都火锅,尤其是白菜!!!还有很多甜品:三大炮,菠萝饭,还有很多叫不上名字的好吃的。最好玩的是那里的东西都愿意加上个姓,例如赖汤圆、钟水饺,还
2016-02-05 11:22:29 1486 1
原创 bzoj 3689 异或之
二分答案+trie判定。卡时过之后看题解:用堆维护每个数可以获得的最小答案,每次取出最小元素,查询它的比当前大的最小值,加入堆。就和dijstra求k短路差不多的思路。#include#include#include#include#include#define ll long long#define eps 1e-10#define md#define N 4000
2015-11-28 23:03:00 605
原创 bzoj 4012 [HNOI2015]开店 【树链剖分】
这道题好像各位神犇都是用动态树分治写的,我这么弱只能用树剖水一水了。dis(x,y)=dis(1,x)+dis(1,y)-dis(1,lca(x,y))前两个都是定值,求第三项就行了。每个点x维护不在重链上的子节点的个数*dis(1,x),查询显然,再yy一些别的东西就可以了。#include#include#include#include#include
2015-11-28 22:55:47 861 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人