自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CHN_JZ的博客

while(!die) is_a_oier();

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

原创 [树状数组]51 Nod 1463——找朋友

题目描述给定:两个长度为n的数列A 、B一个有m个元素的集合K询问Q次每次询问[l,r],输出区间内满足|Bi-Bj|∈K 的最大Ai+Aj解题思路注意这题M的范围是10离线一下,对于每个新加的元素用树状数组暴力维护就可以了。#include<cstdio>#include<algorithm>using namespace std;const int maxn=100005;struct

2017-10-29 18:42:57 637

原创 [单调队列]51 Nod 1952——栈

[单调队列]51 Nod 1952——栈题目梗概要维护一个栈。能够从栈顶和栈底加数,并能从栈顶取数。询问每次操作后栈里的最大元素。解题思路维护一个单调递减的单调队列就可以了。但是要注意统计每个元素前面有几个未删的比当前元素小的元素个数。#include<cstdio>using namespace std;const int maxn=10000005,MOD=1e9+7;int n,A,B,

2017-10-29 18:38:46 641

原创 [容斥原理+组合数学]51 Nod 1829——函数

题目描述想知道f:A->B这个函数(其中|A|=n, |B|=m)的所有映射关系要使B的每个元素都要被A的一个元素覆盖到。数字可能很大你只要输出方案数模1,000,000,007即可。解题思路一看就是要用到容斥原理。有ii个B元素没被覆盖的方案数为Cim∗(m−i)NC^{i}_{m}*{(m-i)}^{N}容斥一下答案就出来了。#include<cstdio>#define LL long lo

2017-10-29 18:31:28 1221

原创 [边双]hihocoder 1184——边的双连通分量

题目梗概裸的边双。解题思路没有桥的极大图就是边双。考虑怎么求桥。Tanjan的时候回不去的就是桥,即low[son[j]]>dfn[x]low[son[j]]>dfn[x]#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=20005,maxm=200005;int t

2017-10-29 07:53:16 565

原创 [堆]51 Nod 1461——稳定桌

题目描述有一张桌子,有n个腿。第i根腿的长度是li。现在要拿掉一些腿,使得桌子稳定,拿掉第i根腿需要di的能量。稳定的条件是,假如拿掉若干条腿之后,桌子还有k个腿,那么长度最长的腿的数目要超过一半。比如桌子有5根腿,那么至少要有三根腿是最长的。另外,只有一根腿的桌子是稳定的,两个腿的桌子想要稳定,必需长度是一样的。你的任务是拿掉若干腿,使得桌子稳定,并且所消耗的能量要最少。解题思路考虑枚举长度,每个

2017-10-25 18:02:59 736

原创 [树状数组]51 Nod 1711——平均数

题目描述LYK有一个长度为n的序列a。你只要告诉他所有区间(n*(n+1)/2个区间)中第k大的平均数就行了。解题思路显然要二分,考虑如何验证。sum[R]−sum[L−1]>=x∗(R−L+1)——>sum[R]−x∗R>=sum[L−1]−x∗(L−1)sum[R]-sum[L-1]>=x*(R-L+1)——>sum[R]-x*R>=sum[L-1]-x*(L-1)那么就是求sum[i]−x∗i

2017-10-25 17:48:02 477

原创 [树状数组]BZOJ 2028——[SHOI2009]会场预约

题目梗概有两种操作:一种是插入一段区间,并删除与这段区间相交的区间,返回删除区间的个数。另一种是返回目前的区间数。解题思路有一个非常重要的特性是在任何时候区间的末端随区间的始端递增而递增。于是考虑树状数组维护始端个数的前缀和,维护这个就可以二分查找小于等于某个点最近的始端。知道始端的位置后,我们可以得到相应的末端,如果形成相交就删去这个区间(其实就是删去始端)。因为始末端的单调性,当查找出的区间不形

2017-10-25 17:01:59 573

原创 [DP]51 Nod——[1048 整数分解为2的幂 V2]

题目描述给定正整数N,求N分解成若干个2的次幂的方案数。N<=1030N<=10^30解题思路之前写过O(n)O(n),看到这个数据范围瞬间就恐惧了。将N表示成一个二进制数,对于每个ai=1ai=1,都有一段区间的和刚好等于2ai2^{ai}我们考虑如何构造区间设g[i][j]g[i][j]表示前i个位置,最大数是2j2^j的方案数很快得到递推式g[i][j]+=g[i−1][k]∗f[ai−k][

2017-10-24 20:29:51 744

原创 [Lucas 原理+逆元]BZOJ 4403——序列统计

题目描述给定三个正整数N、L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。输出答案对10^6+3取模的结果。解题思路显然L,R的大小对答案没有影响,但是相对大小有影响,设m=R−L+1m=R-L+1用隔板法可推出长度为n的方案数(n+m−1m−1)(^{n+m-1}_{m-1})于是总方案就是∑ni=1(i+m−1m−1)\sum_{i=1}^{n}(^{i+m-1}_{m

2017-10-24 20:03:23 513

原创 [组合数学]51 Nod 1486——大大走格子

题目描述第一行有三个整数h, w, n(1 ≤ h, w ≤ 10^5, 1 ≤ n ≤ 2000),表示棋盘的行和列,还有不能走的格子的数目。接下来n行描述格子,第i行有两个整数ri, ci (1 ≤ ri ≤ h, 1 ≤ ci ≤ w),表示格子所在的行和列。输入保证起点和终点不会有不能走的格子。解题思路如果不考虑障碍,那么从起点走到(x,y)的方案数为Cx−1x+y−2C^{x-1}_{

2017-10-23 18:41:56 718

原创 [二分+树状数组]51 Nod 1685——第K大区间2

[二分+树状数组]51 Nod 1685——第K大区间2题目描述定义一个长度为奇数的区间的值为其所包含的的元素的中位数。 现给出n个数,求将所有长度为奇数的区间的值排序后,第K大的值为多少。解题思路二分枚举答案x。考虑如何验证中位数>=x的区间总数是否>=K。构造s[i]s[i]表示前i个数有多少个数>=x>=x。如果一个区间的中位数>=x>=x肯定有(s[R]−s[L−1])∗2>R−L+1(s

2017-10-23 18:37:30 601

原创 [思维题]51 Nod 1671——货物运输

题目描述公元2222年,l国发生了一场战争。 小Y负责领导工人运输物资。 其中有m种物资的运输方案,每种运输方案形如li,ri。表示存在一种货物从li运到ri。 这里有n个城市,第i个城市与第i+1个城市相连(这里1号城市和n号城市并不相连),并且从i号城市走到i+1号或者从i+1号走到i号需要耗费1点时间。 由于高科技的存在,小Y想到了一种节省时间的好方案。在X号城市与Y号城市之间设立传送

2017-10-23 07:34:42 556

原创 [二分+最大流]51 Nod——1757 大灾变

题目描述死亡之翼降临了!艾泽拉斯大陆的子民们必须逃出他的魔爪! 艾泽拉斯的结构是一棵树,这棵树上的一些节点是地精建造的通往地下避难所的洞口。 除了这些洞口之外,树上的每个节点上都有一个种族,每个种族通过树上的一条边都需要一个单位时间。 因为地精比较矮小,所以洞口很窄,每个单位时间只能让一个种族通过,但是一个单位时间内的一个节点上可以存在多个种族。 地精们需要你求出最少需要多少单位时间才能让所

2017-10-22 20:38:32 749

原创 [乱搞]51 Nod 1421——最大MOD值

题目描述有一个a数组,里面有n个整数。现在要从中找到两个数字(可以是同一个) ai,aj ,使得 ai mod aj 最大并且 ai ≥ aj。解题思路对于每个数字,有n/ain/ai个区间,每个区间是[1+ai∗(k−1),ai∗k][1+ai*(k-1),ai*k]显然对于每个区间只有最接近这个区间末边界的值会更新答案。提前预处理一下就可以了。ps:我预处理有log的,其实不需要log。#inc

2017-10-21 11:25:15 709

原创 [DP] 51 Nod 1274——最长递增路径

题目描述一个无向图,可能有自环,有重边,每条边有一个边权。你可以从任何点出发,任何点结束,可以经过同一个点任意次。但是不能经过同一条边2次,并且你走过的路必须满足所有边的权值严格单调递增,求最长能经过多少条边。 以此图为例,最长的路径是: 3 -> 1 -> 2 -> 3 -> 2 或 3 -> 1 -> 2 -> 3 -> 4 长度为4。解题思路很自然想到将边排序。 然后DP。 但是

2017-10-21 11:21:08 634

原创 [分块]51 Nod——1225 余数之和

题目梗概例如F(6) = 6 % 1 + 6 % 2 + 6 % 3 + 6 % 4 + 6 % 5 + 6 % 6 = 0 + 0 + 0 + 2 + 1 + 0 = 3。给出n,计算F(n), 由于结果很大,输出Mod 1000000007的结果即可。解题思路x%y运算其实可以看成x−x/y∗yx-x/y*y,这里的除是整除。那么对于整除x等于固定值的数我们可以一起统计,这些数显然是一个区间,我

2017-10-20 20:36:35 806

原创 [贪心+单调队列+ST算法]51 nod 1288 ——汽油补给

题目梗概有(N+1)个城市,0是起点N是终点,开车从0 -> 1 - > 2…… -> N,车每走1个单位距离消耗1个单位的汽油,油箱的容量是T。给出每个城市到下一个城市的距离D,以及当地的油价P,求走完整个旅途最少的花费。如果无法从起点到达终点输出-1。解题思路ZZK大佬说这是N年前做过的一道题目,但是我并没有看出来。贪心比较明显,对于一个点,我们可以知道它最远能到哪个点,这样形成一个区间。如果存

2017-10-20 18:25:50 924

原创 [最小割]BZOJ 1497——[NOI2006]最大获利

题目梗概有m个通讯,你可以获得一定的利润。但是通讯必须开通ai,biai,bi两个中转站,开通中转站需要额外的费用。问你能获得最大的利润是多少。解题思路你要换个角度思考这个问题,把边看成一个点。如果要获得这个点的值就必须开通另外两个点。这样显然会形成一张二分图,但是我们会在这张图上进行取舍。显然每种取舍方式都对应一种最小割。以上只是简略的概述了这个思想,详见胡伯涛的《最小割模型在信息学竞赛中的应用》

2017-10-19 16:25:25 757

原创 [树形DP]51 Nod 1500——苹果曼和树

题目梗概有一个n个节点的树,每个节点都有黑色或白色。问有多少种删边方式,使得删完后的每棵树有且仅有一个黑点。解题思路没什么好suo的,直接树形DP。#include<cstdio>#define LL long longusing namespace std;char nc(){ static char buf[100000],*l=buf,*r=buf; if (l==r)

2017-10-18 21:11:43 705

原创 51 Nod 1616——最小集合

题目梗概现在有一个集合,对于任意的x,y,gcd(x,y)也在这个集合中。给出原集合中一部分的数,求原集合的最小大小。解题思路因为ai的范围感人,所以肯定能枚举原集合中元素然后判断是否存在。考虑如何判断。显然只要关于xx的倍数的gcd==xgcd==x那么xx肯定存在。所以暴力维护就可以了。#include<cstdio>#include<cmath>using namespace std;c

2017-10-18 20:06:30 602

原创 [并查集]51 Nod 1525——重组公司

题目梗概普通的并查集问题?多了一种区间合并的操作。解题思路还是很水。维护每个点前面最近的没合并的节点是谁就可以了。#include<cstdio>using namespace std;char nc(){ static char buf[100000],*l=buf,*r=buf; if (l==r) r=(l=buf)+fread(buf,1,100000,stdin);

2017-10-18 19:13:57 629

原创 [数学杂题]51 Nod 1765——谷歌的恐龙

题目梗概给出一个数n,每次随机[0,n)[0,n)之间的一个数,如果随机到给出的mm个数之一就停止。求随机出来的数字的期望。解题思路真TM智障,我想了很久……能够继续下一次操作的概率为p=(n−m)/mp=(n-m)/m显然答案就是1∗1n∗S+p∗1n∗S+p2∗1n∗S……1*\frac{1}{n}*S+p*\frac{1}{n}*S+p^2*\frac{1}{n}*S……其中SS表示所有数的和

2017-10-18 15:10:00 658

原创 51 Nod 1563——坐标轴上的最大团

题目梗概坐标轴上有n个点,每个点有一个权值。如果两个点满足|xi−xj|>=wi+wj|xi-xj|>=wi+wj ,那么就在这两个点上建边。求图中最大团的大小。解题思路转换条件,如果两个点满足xj−wj>=xi+wi||xi−wi>=xj+wjxj-wj>=xi+wi||xi-wi>=xj+wj那么就有边。因为wi>0wi>0,所以必然有xi+wi>xi−wixi+wi>xi-wi,那么条件可以看

2017-10-18 10:35:01 589

原创 [乱搞]51 Nod 1859—Clarke and number

题目梗概给定一个数,可以对这个数做一下两种操作:x=x−kx=x-kx=⌊n√⌋2x=\lfloor \sqrt n \rfloor ^2用最小的步数使n->0。解题思路对于第二种操作,就是将x变为小于等于x的最大的平方数。显然两种操作需要交替操作。方法很简单,注意特殊情况就可以了。#include<cstdio>#define LL long longusing namespace std;

2017-10-17 21:39:38 494

原创 [欧拉回路]51 Nod 1967——路径定向

题目梗概给出一张有向图,更改其中一些边的方向,最大化出度等于入度的点的个数。解题思路如果所有点出度等于入度,那么这张图构成欧拉回路。于是我们连接图中的奇点,使原图成为欧拉回路。然后遍历这个图,确定每条边的方向,奇点的边显然不对答案造成影响。Ps:这题出题人心态不对,时限卡的非常猥琐。#include<cstdio>using namespace std;const int maxn=100005

2017-10-17 21:29:42 678

原创 [最大生成树+LCA]NOIP 2013——货车运输

[最大生成树+LCA]NOIP 2013——货车运输题目梗概给出一张有权无向图。每次询问x->y的所有路径,最小值边权最大的路径。解题思路构造一棵最大生成树(可能是多棵)。每次在树上求一条路径的最小值就可以了。#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;cons

2017-10-17 13:52:21 680

原创 [2-sat]codeforces 875 C——National Property

题目梗概给出一些小写字符串,要求把一些单词改成大写,使得这些字符串的字典序与输入给出顺序相同。解题思路对于一个字符只有改和不改两种状态,所以马上想到2-sat。考虑如何建边,对于相邻的两个字符串,假设找到最近的不相同的两个字符a.b。如果a>b,那么a必须改大写,且b必须改小写。如果a#include<cstdio>#include<cstring>#include<vector>#inclu

2017-10-17 13:28:40 1063

原创 [树链剖分]bzoj 4034—— [HAOI2015]树上操作

题目描述有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。解题思路树链剖分的裸题。更改一棵子树的值,就是在DFS序上更改一段区间。询问时,每条重链其实也可以看成一段区间,构造DFS先遍历重儿子就可以

2017-10-15 20:55:36 386

原创 [树hash]BZOJ 4337——BJOI2015 树的同构

题目梗概对于两个树T1和T2,如果能够把树T1的所有点重新标号,使得树T1和树T2完全相同,那么这两个树是同构的。有M个有根树,请你把它们按同构关系分成若干个等价类。解题思路第一次写树hash。对于一棵树,先把所有子树hash一下,然后在合并成当前树的hash值。考虑如何合并。因为我们不能受遍历顺序的影响,所以应该先排序。然后对于每个子树的hash值再分别乘p,显然这个p不能相同,所以提前构造素数表

2017-10-15 20:47:36 732

原创 [凸包]BZOJ 1670——[Usaco2006 Oct]Building the Moat护城河的挖掘

题目梗概给出一堆点,求把这些点包起来的最小边长。解题思路题目描述的就是凸包所解决的问题。因为NOIP要到了,所以复习一下凸包。#include<cmath>#include<cstdio>#include<algorithm>using namespace std;const int maxn=5005;struct jz{ double x,y; jz(double x=

2017-10-12 21:32:48 406

原创 [二分+差分]BZOJ 4326——NOIP2015 运输计划

题目梗概给出一棵有边权的树,并有m个从x到y的路径。将一条边的边权改为0,使所有路径的最大值最小。解题思路因为要使最大值最小,所以我们二分答案。对于大于答案的路径,我们要修改它。那么就是把这些路径的交集中最大的边改为0。求路径交集差分一下就可以了,在差分的时候只需要LCA就可以了。#include<cmath>#include<cstdio>#include<cstring>#include<

2017-10-12 20:12:02 963

原创 [分块+并查集按秩合并]#519. 「LibreOJ β Round #2」数学上来先打表

题目梗概给你一个图,每个点有点权,最开始没有边。有一些操作:添加一条 x 与 y 之间的双向边。回到第 x 次操作后的状态。(注意这里的 x 可以是 0,即回到初始状态)查询 x 所在联通块能到的点中点权第 y 小的值,如果不存在,那么输出 −1。解题思路对于第2个操作,将询问建成树后DFS。对于第3个操作,对于每个联通块分块维护前缀和,对于当前块暴力查询一个点是否出现。在建边时,需要按秩合

2017-10-11 21:42:39 1296

原创 [启发式合并]#516. 「LibreOJ β Round #2」DP 一般看规律

[启发式合并]#516. 「LibreOJ β Round #2」DP 一般看规律题目梗概给定一个长度为 n 的序列 a,一共有 m 个操作。 每次操作的内容为:给定 x,y,序列中所有 x 会变成 y。在每次操作后,求出相同元素的最近距离是多少。解题思路把一个数字变成另一个数字的过程看成两个坐标集合合并的过程。用map离散之后,用set进行启发式合并就可以了。在合并的同时更新答案。#includ

2017-10-11 21:31:12 731

原创 [bitset]#515. 「LibreOJ β Round #2」贪心只能过样例

题目梗概一共有nn个数,第ii个数xixi可以取[ai,bi] [ai,bi]中任意值。 设S=∑xi2S=\sum xi^2,求SS 的种类数。解题思路暴力枚举每个数字的取值,用bitset维护F数组表示方案。让我算一下复杂度O(ai3∗n2/32)O(ai^3*n^2/32)O(312500000)O(312500000)1s1s时限会TLE?这题再次展现LOJ评测机的速度#include<c

2017-10-11 21:24:36 815 1

原创 [暴力]#514. 「LibreOJ β Round #2」模拟只会猜题意

题目梗概给定一个长度为 n 的序列 A 。求一个区间的长度不小于x的最大和。1≤x≤n≤104,0≤m≤105,∣Ai∣≤1041≤x≤n≤10^4 ,0≤m≤10^5, ∣Ai∣≤10^4 。解题思路相信我暴力可以过!!!因为这题仅仅只是为了展示LOJ评测机的速度#include<cstdio>#include<cstring>using namespace std;const int ma

2017-10-11 21:16:42 1004

原创 [矩阵快速幂优化DP]BZOJ 4037——Str

题目梗概你有一个长度为nn的数字串。定义f(S)f(S)为将S拆分成若干个的1~m数的和的方案数。你可以将这个数字串分割成若干个数字(允许前导0),将他们的f()f()加起来。比如g(123)=f(1+2+3)+f(1+23)+f(12+3)+f(123)g(123)=f(1+2+3)+f(1+23)+f(12+3)+f(123)。已知字符串和m后求答案对998244353998244353取模后的

2017-10-07 19:58:51 835

原创 [数位DP]Hdu 3555——Bomb

题目梗概求不超过n的含4949的数字的个数。解题思路数位DPSB题。#include<cstdio>#define LL long longusing namespace std;LL n,f[25][15],x;int a[25],len,t;LL DFS(int len,int lst,int pd){ if (len<1) return 1; if (!pd&&f[l

2017-10-06 21:28:59 700

原创 [STL乱搞]51 Nod——1573 美丽的集合

[STL乱搞]51 Nod——1573 美丽的集合题目梗概在多重集之中,同一个元素可以出现多次。我们现在有n个多重集合,第i个集合最开始都有一个元素ai(1≤i≤n)。定义多重集合的价值为子集中不同的和的个数。现在我们有两种操作:1、合并最开始时多重集合i现在所在的多重集合与多重集合j现在所在的多重集合,成为一个新的多重集合。2、询问最开始多重集合i现在所在多重集合的价值。n<=1000n<=100

2017-10-06 16:32:55 1536

原创 [DP]BZOJ 1190——[HNOI2007]梦幻岛宝珠 动态规划]

题目梗概一个背包问题,但是有一些奇怪的条件。背包大小<=2302^{30} N<=100N<=100 物品符合a∗2b(a<=10;b<=30)a*2^b(a<=10;b<=30)题目梗概把背包大小看成一个二进制数。将f[i][j]f[i][j]定义为前i位数,2i2^i这位选择了j个大小。枚举第i−1i-1位填kk,显然剩下的j−kj-k都由第ii位填满,所以可以得到转移方程f[i][j]=max

2017-10-06 16:16:20 880

原创 [二维树状数组]BZOJ 1452—— [JSOI2009]Count

题目梗概给出一个N*M的方格,每个方格有一个数字。每次更改某个格子上的数字或询问一个子矩阵的某值的个数。解题思路裸的二维树状数组,对每个值分别开数组记录就可以了。#include<cstdio>#include<cstring>using namespace std;const int maxn=25,maxm=125,tt=45989;struct jz{ int x[maxm][

2017-10-06 15:17:34 673

空空如也

空空如也

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

TA关注的人

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