自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ark

长夜伴浪破晓梦 梦晓破浪伴夜长

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

原创 CSP模拟赛 Lost My Music(二分,可回退化栈)

题面题解发现是斜率的形式,答案的相反数可以看做一条直线的斜率。那么我们要答案最小,斜率最大。维护下凸壳就行了。考试时写了直接dfsdfsdfs+暴力弹栈拿了808080分(还以为自己是O(n)正解美滋滋)就是直接存下根到当前点的路径上的凸包,然后回退的时候撤销操作。但这样一个点可能在子树下面被弹出多次。所以最坏情况是O(n2)O(n^2)O(n2)的(链+菊花)。考虑怎么实现可回退化栈...

2019-10-31 16:16:01 283 1

原创 NOIP2018 保卫王国(动态DP)

题意求最小权值点覆盖。mmm次询问,每次给出两个点,分别要求每个点必须选或必须不选,输出每次的最小权值覆盖或者无解输出−1-1−1题解强制选或者不选可以看做修改权值为±∞\pm\infin±∞。那么就是这道板题了。CODE#include <bits/stdc++.h>using namespace std;typedef long long LL;template...

2019-10-30 18:58:47 416

原创 [ZJOI2009] 硬币游戏(找规律)

题目洛谷传送门题解把1/21/21/2转化成0/10/10/1,所以直接可以异或。对于长度为nnn的0/10/10/1数列,发现每变换2k(k>1)2^k(k>1)2k(k>1)时,且每个数的值就是往左和往右各走2^(k-1)步的值异或起来。那么把mmm二进制分解一下,最后如果是基数就多做一次。CODE#include <bits/stdc++.h>u...

2019-10-30 17:09:44 423

原创 BZOJ4706 B君的多边形 (超级卡特兰数/施罗德数)

题目权限题QAQ题解超级卡特兰数/施罗德数CODE#include <bits/stdc++.h>using namespace std;const int MAXN = 1000005;const int mod = 1e9 + 7;int inv[MAXN], f[MAXN], n;int main () { scanf("%d", &n); ...

2019-10-30 15:34:51 292

原创 Luogu P2148 [SDOI2009]E&D (sg函数 博弈)

题目洛谷传送门题解打表找sgsgsg规律。严谨证明见:纳尔的博客CODE#include <bits/stdc++.h>using namespace std;int sg(int a, int b) { if(a&1 && b&1) return 0; return sg(a+1>>1, b+1>&gt...

2019-10-30 13:45:37 196

原创 20191029 牛客CSP-S提高组赛前集训营1

前一个小时看这三道题感觉要爆零A. 仓鼠的石子游戏分析一下发现a[i]>1a[i]>1a[i]>1时后先手必输,a[i]=1a[i]=1a[i]=1时先手必赢然后直接看1的个数奇偶性就行了CODE#include <bits/stdc++.h>using namespace std;int main () { int T, n, a; scan...

2019-10-30 13:32:01 229

原创 Codeforces 380E Sereja and Dividing

题面洛谷传送门题解博客CODE#include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN = 300005;struct node { int v, id; inline bool operator <(const node &o)const { ...

2019-10-29 14:01:25 207

原创 Luogu 4751 动态DP 模板

题面动态求最大独立集题解树剖后用矩阵转移。具体见Tweetuzki的洛谷博客CODE#include <bits/stdc++.h>using namespace std;typedef long long LL;char cb[1<<15],*cs=cb,*ct=cb;#define getc() (cs==ct&&(ct=(cs=cb...

2019-10-28 17:26:50 224

原创 CSP模拟赛 Repulsed(树形DP)

题面⼩ w ⼼⾥的⽕焰就要被熄灭了。 简便起⻅,假设⼩ w 的内⼼是⼀棵 n − 1 条边,n 个节点的树。 现在你要在每个节点⾥放⼀些个灭⽕器,每个节点可以放任意多个。 接下来每个节点都要被分配给⼀个⾄多 k 条边远的灭⽕器,每个灭⽕器最多能分配给 s 个节 点。 ⾄少要多少个灭⽕器才能让⼩ w 彻底死⼼呢?题解树形DP,由于k≤20k\le 20k≤20,用f[i][j]f[i][j]f...

2019-10-26 16:44:29 354

原创 Luogu P4198 楼房重建 (李超线段树)

题目传送门题解首先转化成到(0,0)(0,0)(0,0)的斜率。那么就是求多少个点是前缀最大值。做法是线段树,用gao(i,x)gao(i,x)gao(i,x)表示在iii区间内,之前最大值为xxx的答案。然后发现gao(p→r,p→l→max)gao(p\to r,p\to l\to max)gao(p→r,p→l→max)就是gao(p,0)−gao(p→l,0)gao(p,0)-...

2019-10-25 20:38:40 190

原创 CF480E Parking Lot(two-pointers + 单调队列优化)

题面动态加障碍物,同时查询最大子正方形。n,m≤2000n,m\leq2000n,m≤2000题解加障碍不好做,直接离线后反着做,每次就是清除一个障碍物。显然倒着做答案是递增的,而且答案的值域是[0,min⁡(n,m)][0,\min(n,m)][0,min(n,m)],所以我们可以存一下答案,然后每次checkcheckcheck能不能+1+1+1。考虑把一个位置的障碍物清除后如果答...

2019-10-25 18:47:26 188

原创 约瑟夫问题O(n)/O(mlogn)

题面略题解约瑟夫问题。编号000~n−1n-1n−1,每次拿第mmm个。O(n)O(n)O(n):f[n]f[n]f[n]表示幸存的人的编号,f[n]=(f[n−1]+m)%nf[n]=(f[n-1]+m)\%nf[n]=(f[n−1]+m)%nO(mlogn)O(mlogn)O(mlogn):优化:把若干连续的mmm一起计算,直到加起来的值达到第一个模数nnn,然后进行下一次。每次的时...

2019-10-24 19:01:55 684

原创 CSP模拟赛 Matrix(DP)

题面求出满足以下条件的 n*m 的 01 矩阵个数:(1)第 i 行第 1~li 列恰好有 1 个 1。(2)第 i 行第 ri~m 列恰好有 1 个 1。(3)每列至多有 1 个 1。n,m<=3000题解nbCODE#include <bits/stdc++.h>using namespace std;const int MAXN = 3005;con...

2019-10-23 22:51:08 581

原创 BZOJ2155(?) R集合 (卡特兰数)

Orz Freopen大佬CODEfac = [0]*1005def C(n, m): return fac[n] // fac[m] // fac[n-m]n = int(input())fac[0] = 1for i in range(1, n+1): fac[i] = fac[i-1] * ians = 0for i in range(2, n//2+1):...

2019-10-22 22:24:29 194

原创 CSP模拟赛 number (二分+数位DP)

题面给定整数m,km,km,k,求出最小和最大的正整数 nnn 使得 n+1,n+2,…,2nn+1,n+2,…,2nn+1,n+2,…,2n 中恰好有 mmm 个数 在二进制下恰好有 kkk 个 111。如果有无数个满足条件则输出一行一个整数−1-1−1。有TTT组数据。T≤2000T\le 2000T≤2000m≤1e18m\le 1e18m≤1e18k≤64k\le 64k≤64保...

2019-10-22 21:30:08 222

原创 BZOJ1209 最佳包裹 (三维凸包 增量法)

题意求三维凸包的表面积。N≤100N\le100N≤100题解暴力往当前的凸包里加点。O(n2)O(n^2)O(n2)。题解详见大佬博客扰动函数shakeshakeshake是为了避免四点共面。CODE实测epsepseps开到1e−101e-101e−10才过#include <bits/stdc++.h>using namespace std;#define ...

2019-10-22 19:07:45 214

原创 AtCoder Beginner Contest 143 F - Distinct Numbers

题意给出一个长度为NNN的序列,求对于所有k∈[1,N]k\in[1,N]k∈[1,N],每次从序列中选出kkk个互不相同的数,最多能取多少次。N≤3e5N\le3e5N≤3e5题解我们首先把数组转化为相同的数的出现次数的序列,如序列(1,3,4,4)(1,3,4,4)(1,3,4,4)就转化为(1,1,2)(1,1,2)(1,1,2)。把这个得到的序列计作aaa。然后二分答案,假设当前...

2019-10-22 16:42:10 279

原创 BZOJ1997 HNOI2010 平面图判定 planar (并查集判二分图)

题意判断一个存在哈密顿回路的图是否是平面图。n≤200,m≤10000n\le200,m\le10000n≤200,m≤10000题解如果一定存在一个环,那么连的边要么在环里面要么在外面。那么把在同侧会矛盾的边之间连边,如果是一个二分图就是平面图。有问题的是边数是O(m2)O(m^2)O(m2)的。但是可以发现当m>n∗3−6m>n*3-6m>n∗3−6的时候一定形成不...

2019-10-21 22:05:45 251

原创 BZOJ3678 wangxz与OJ (平衡树 无旋treap)

题面维护一个序列,支持以下操作:1.在某个位置插入一段值连续的数。2.删除在当前序列位置连续的一段数。3.查询某个位置的数是多少。题解显然平衡树,一个点维护一段值连续的数,如果插入或者删除操作需要分裂这个点,就直接分裂。每次插入最多只会分裂1个点,每次删除最多分裂2个点,所以时间复杂度是O(nlogn)O(nlogn)O(nlogn)的。我写的无旋treap。CODE#inc...

2019-10-21 17:35:33 151

原创 BZOJ3331 压力 (圆方树+树上差分)

题意略题解求路径上的割点。然后就直接圆方树上差分CODE#include <bits/stdc++.h>using namespace std;inline void rd(int &x) { char ch; for(;!isdigit(ch=getchar());); for(x=ch-'0';isdigit(ch=getchar());)x...

2019-10-21 15:58:41 245

原创 BZOJ4802 欧拉函数 (Pollard-Rho Miller-Robin)

题目求大数的欧拉函数φ\varphiφ题解Pollard-Rho 板子CODE#pragma GCC optimize (3)#include <bits/stdc++.h>using namespace std;typedef long long LL; inline LL mul(LL a, LL b, LL p) { a=(a%p+p)%p, b=(b...

2019-10-19 16:53:08 160

原创 BZOJ 2277 strongbox (gcd)

题意有一个密码箱,0到n-1中的某些整数是它的密码。 且满足,如果a和b都是它的密码,那么(a+b)%n也是它的密码(a,b可以相等) 某人试了k次密码,前k-1次都失败了,最后一次成功了。 问:该密码箱最多有多少不同的密码。题解我们先把000看做nnn。显然有这样一个性质:xxx是密码,k∗gcd(x,n)(k∈N)k*gcd(x,n)(k\in \N)k∗gcd(x,n)(k∈N)一...

2019-10-18 20:24:32 221

原创 BZOJ 3601 一个人的数论 (拉格朗日插值+莫比乌斯反演)

题意略题解orz Freopen的博客CODE#pragma GCC optimize (3)#include <bits/stdc++.h>using namespace std;char cb[1<<15],*cs=cb,*ct=cb;#define getc() (cs==ct&&(ct=(cs=cb)+fread(cb,1,1&lt...

2019-10-18 15:47:03 152

原创 BZOJ 3162 / Luogu P4895: 独钓寒江雪 树hash+DP

题意给出一棵无根树,求本质不同的独立集数模100000000710000000071000000007的值。n≤500000n\le 500000n≤500000题解如果是有根树就好做多了。然而无根树可以找重心作为根,转化为有根树。那么考虑有根树的本质不同的独立集数怎么求。直接dpdpdp就行了。用f[i][0]f[i][0]f[i][0]表示iii不选的独立集数,f[i][1]f[i...

2019-10-17 18:53:24 141

原创 [NOI2008]假面舞会 (搜索+gcd)

题意LuoguP1477题解对于每一条边(u,v)(u,v)(u,v),建两条边(u→v,1),(v→u,−1)(u\to v,1),(v\to u,-1)(u→v,1),(v→u,−1)。跑bfsbfsbfs,如果这个点已经来过,就把到当前的距离与已经得到的disdisdis值的差存起来,所有的值取一个gcdgcdgcd就是最大的答案,最小的答案枚举一下≥3\geq3≥3的因数就行了。如果...

2019-10-17 16:16:38 134

原创 [NOI2013]快餐店 / CF835F Roads in the Kingdom (基环树)

题意一颗基环树,选一对点使得这两个点的最短距离最大。题解相当于找基环树的直径,但是这个直径不是最长链,是基环树上的最短距离。然后不会做。然后看了ljh_2000的博客。然后会了。这道题最难的就是为什么枚举断边(i→i+1)(i\to i+1)(i→i+1)后,求出最长链是取min⁡\minmin。实际上是因为这个最长链是求的经过了环的最长链,但是经过了环的最长链不一定是题目中要求的最...

2019-10-17 15:06:38 171

原创 BZOJ 1495 [NOI2006]网络收费(暴力DP)

题意给定一棵满二叉树,每个叶节点有一个状态0/10/10/1,对于每两个叶节点i,ji,ji,j,如果这两个叶节点状态相同但他们的LCALCALCA所管辖的子树中的与他们状态相同的叶节点个数较少(少于1/21/21/2),则会产生2fij2f_{ij}2fij​的代价,如果状态不同,则产生fijf_{ij}fij​的代价,如果状态相同且LCALCALCA管辖子树中与他们状态相同叶节点个数较多,则...

2019-10-16 13:30:19 184

原创 BZOJ2616 SPOJ PERIODNI(笛卡尔树 + DP)

题意N,K≤500,h[i]≤106N,K\le 500,h[i]\le10^6N,K≤500,h[i]≤106题解建立出小根堆性质的笛卡尔树,于是每个节点可以代表一个矩形,其宽度为子树大小,高度为该节点记录的那一列高度-父节点那一列高度。然后就可以随便DP了。如果不会笛卡尔树,看看这张图,再看看代码就懂了(简单的笛卡尔树)。代码#include <bits/stdc++....

2019-10-13 20:06:21 219

原创 BZOJ 1181: [CROATIAN2009] IZBROI选举(二分+dp)

题面在一个地区的选举中,共有V个人参加了投票,每一票只可能投给N个政党中的一个。当地的议会共有M个席位。不妨将N个政党编号为1到N,并且设编号为i的政党最终的得票为Vi,则议会中的席位按如下规则分配: 1、将得票数小于总选票的5%的政党剔除。 2、初始时议会为空,每个政党都只有0个席位。 3、对于每个政党P,计算一个参数Qp = Vp / (Sp + 1),Vp为政党P的最终得票,Sp为政党P当...

2019-10-11 19:38:45 205

原创 BZOJ4543 Hotel加强版(长链剖分)

题意求一棵树上,两两距离相等的三个点的三元组(无序)的个数。题解转自 CaptainHarryChen 的博客CODE代码中的f,gf,gf,g对应题解中的num,waynum,waynum,way#include <bits/stdc++.h>using namespace std;typedef long long LL;inline void rd(int &...

2019-10-11 13:36:58 197 2

原创 BZOJ 2699: 更新 (DP)

题目对于一个数列A[1…N],一种寻找最大值的方法是:依次枚举A[2]到A[N],如果A[i]比当前的A[1]值要大,那么就令A[1]=A[i],最后A[1]为所求最大值。假设所有数都在范围[1, K]内,按上面的步骤执行,有多少个长度N的数列满足A[1]被更新的次数恰好为P呢?N,P<=150,K<=300题解感觉数据组数有点多,其实可以直接预处理出所有答案。定义f[i][...

2019-10-06 22:39:17 660

原创 BZOJ 3749: [POI2015]Łasuchy(贪心)

Orz大佬博客CODE#include <bits/stdc++.h>using namespace std;typedef long long LL;char cb[1<<18],*cs,*ct;#define getc() (cs==ct&&(ct=(cs=cb)+fread(cb,1,1<<18,stdin),cs==ct)?0...

2019-10-06 21:47:24 150

原创 BZOJ 3636 教义问答手册 (分治)

先存一波代码,待更。CODE#include <bits/stdc++.h>using namespace std;char cb[1<<18],*cs,*ct;#define getc() (cs==ct&&(ct=(cs=cb)+fread(cb,1,1<<18,stdin),cs==ct)?0:*cs++)inline void...

2019-10-05 14:49:10 225

原创 BZOJ 3237 连通图(随机化+线性基)/ (分治+并查集)

题目题目链接记得数据范围在HINT处题解有分治的做法但是很慢这里给出随机化+线性基的做法。先找一棵生成树,然后边被分为了树边和非树边。首先给每条非树边一个随机的权值。然后如果整棵树在EEE处断开,一定是链接左右两个连通块的非树边和EEE均被删除。那么我们定义树边的权值为链接左右两个连通块的非树边的权值异或和,如果能预处理出这个值,就可以通过看是否有边集的子集异或和为0来判断是否被...

2019-10-05 09:55:55 225

原创 BZOJ 1190: [HNOI2007]梦幻岛宝珠 背包DP

题意大背包问题物品重量可写成a*2^b的形式(1<=a<=10,0<=b<=30)题解1直接背包肯定TLE+MLE考虑到每个weight都能写成a*2^b的形式,显然我们要按照b分层来进行背包令f[i][j]表示有j*2^i+(w&(1<<i)-1)的空间时的最大价值首先每层内部先做一个01背包,因为a<=10,n<=100,所...

2019-10-04 17:20:56 182

原创 BZOJ 4033: [HAOI2015]树上染色 (树形DP)

题意n个点的树,选k个黑点,求黑点之间两两距离之和加上白点之间两两距离之和的最大值。题解感觉两两距离之和没法统计。但是我们可以对每条边统计左边和右边各自每种颜色的点数,乘起来就是这条边要被统计到的次数。那么就直接树形DP,统计子树内选了几个黑点。然后向上传的时候加上父亲边的贡献。一个技巧就是如果dp的二维状态的第二维是子树节点个数,那么合并两棵子树的时候直接暴力枚举转移就行了。每两个点只会...

2019-10-04 16:03:24 247

原创 BZOJ 1820: [JSOI2010]Express Service 快递服务 DP

题意略题解这里用nnn表示地点数,mmm表示要送的快递数。很容易想出O(n3m)O(n^3m)O(n3m)的算法,就是把333个点状态存下来。可是过不了。但是可以省略一维,因为一定有一个车在上一个地点。所以就简单了。CODE不一定要保证状态f(i,j)f(i,j)f(i,j)中i<ji<ji<j#pragma GCC optimize (2)#include...

2019-10-04 15:15:03 180

原创 BZOJ 4664: Count 插块DP

题解链接CODE#pragma GCC optimize (2)#include <bits/stdc++.h>using namespace std;const int MAXN = 105;const int MAXL = 1005;const int mod = 1e9 + 7;int dp[2][MAXN][3][MAXL];int n, L, h[MAXN]...

2019-10-04 13:32:45 228

原创 BZOJ 1899: [Zjoi2004]Lunch 午餐 DP

题意n个人,每个人有打饭时间和吃饭时间,有两个打饭队列,求最后一个人吃完饭的时间最小值。n,吃饭时间,打饭时间 <= 200题解发现数据范围小,可以想到n^3算法。首先对于一个队列,内部顺序一定是吃饭吃的慢的放在前面。所以先按b从大到小排序。设f[i][j]表示前i个人,1号队列总打饭时间为j时的 最慢的人吃完的时间。答案就是f[n][j]的最小值。设a为打饭时间,b为吃饭时间...

2019-10-04 11:57:19 222

空空如也

空空如也

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

TA关注的人

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