自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一切都结束了。OI退役感言。

一切都结束了。1.故事从小五开始。我玩游戏;然而太伤肝,于是开始使用按键精灵写脚本。我的父母开始看到我学习编程,于是利用关系送我去初中学校的培训班。培训班里都是小学成绩非常好的人;我之前没有被选上。教练看不起我,多次跟家长谈让我退出。但我没有。2.初一,一个转折。我遇上了一个人,我的人生中对我影响最大的人之一…或许没有之一。影响也不知道是好还是坏。我的教练SCY。他甚至告诉我说...

2019-11-18 14:05:54 1065

原创 算法复习目录

可能很多不同的名字表达的是一样的意思…我做完以后会修改。数据结构 链表(完成)单调队列堆并查集带权并查集哈希表树状数组线段树可持久化线段树权值线段树主席树随机平衡二叉树伸展树可持久化平衡树替罪羊树分块可并堆左偏树配对堆KD-tree四分树Qtree字符串 KMPAC自动机后缀数组后缀树后缀自动机字典树Manacher...

2018-04-18 11:46:10 144

原创 【DP+单调队列】瑰丽华尔兹

【题意】 给定一个n行m列的矩阵,矩阵的某些方格上有障碍物。一个人从给定起点开始滑行,每次滑行都有一个滑行方向,你可以在0-ci之中选择这次滑行长度。滑行过程中不能碰到障碍物。求最长的滑行距离。 n,m,滑行次数k<=200。ci之和<=40000。 【思路】 参考这篇文章 然而不会实现…膜hzwer的代码。 【代码】#include<cstdio>#...

2018-05-02 08:41:27 256

原创 GDOI2018呵呵记

Day0 比较颓废,写了一些java..还刷了几道概率和期望的题。这大概就是本校的好处之一。Day1 分数:100+10+0+0=110 开场15分钟读题。T4一看要逆元,不会做,弃。认为T3可以拿到60分。做T1,认为暴力过不了,想了一个小时,想出一个优化算法。 打完了优化算法然后发现和暴力一样的复杂度。 然后认为暴力是可以过80分的,然后就交了暴力。 然后发现100分了…太...

2018-05-01 08:43:54 432

原创 【概率DP】小象涂色

【题意】 n个箱子编号为1至n,m种颜色编号为0至m-1,涂色k次,每个箱子初始颜色为1。 每次涂色给出一个区间(l,r),其中每个箱子都有50%几率被涂上随机一种颜色。涂色后箱子颜色变为(原颜色*新颜色%c)。 求箱子颜色和期望。 多组数据。 T<=10,n/k<=50,m<=100。 【思路】 鲁莽的看见期望就认为是期望,然后想着怎么倒着推,然后就没有然后了。 ...

2018-04-27 11:29:36 349

原创 【期望DP】找BUG

【题意】 n个系统,m个Bug,每天某个系统会出现某个Bug。 求每个系统都出现了Bug,且每个Bug都出现过的期望天数。 【思路】 “概率顺着推,期望逆着推”。 f[i][j]表示已经有i个系统出现了Bug,有j种Bug出现了的状态到达目标状态的期望天数。 很明显f[n][m]=0。 然后给出一个定律:设E(x)为状态x的期望,那么E(x)=转移到状态i的概率*状态i的期望+转移到...

2018-04-26 15:37:10 156

原创 【DP】硬币购物

【题意】 一共有4种硬币。面值分别为c1,c2,c3,c4。某人去商店买东西,去了tot次。每次带di枚面值为ci的硬币,买si的价值的东西。请问每次有多少种付款方法。 【思路】 设f[i]为不考虑硬币限制下,买价值为i的物品的方案数。那么很容易得出f[j]=f[j-c[1]]+f[j-c[2]]…的递推式。注意要推完一种硬币再推下一种硬币。for(int i=0;i<=10000...

2018-04-26 09:19:38 288

原创 【链表】营业额统计

【题意】 给出n个数,每个数都有一个波动值,是对于前面每个数的差的绝对值的最小值。第一个数的波动值就是其本身。求n个数的最小波动值之和。 n<=32767 【思路】 将元素排序后做成链表,用to[i]表示i在排序后的位置。从最后一天开始计算,找到它在链表中的位置,其值为xVal,其链表左边的值为lVal,其链表右边的值为rVal,由于排序过所以一定满足lVal小于xVal小于rVal...

2018-04-23 19:45:28 161

原创 【链表】生日礼物

【题意】 给出一个长度为n的序列,最多选择m段,求能选的最大值。 【思路】 首先我们把同符号的一段累加成一个值。 然后我们选择所有的正数,如果选的个数比m大,就每次减少选的段数,直到数值等于m。 我们将所有的值按绝对值排序(丢进小根堆里),每次挑选出最小的一个。为什么?因为我们要使减少段数后的损失最小。 对于正数,我们将答案减去它,相当于不选这个; 对于负数,我们将答案减去它的绝对值...

2018-04-21 15:44:28 250

原创 【链表】数据备份

【题意】 一条街上有n栋楼,你需要为k对楼连上电缆(2*k<=n),每对代价为两栋楼之间的距离。 每栋楼只能被配对一次,求配对最小代价。 【思路】 十分巧妙。 很明显一开始计算出每相邻两栋楼的距离差,然后从中选k个。 首先想到的应当是贪心,从小到大选,可问题在于不能选相邻两个。 其根本在于,我们选小的x,有可能同时选左边的l与右边的r可能获得更优解,所以不能使用贪心。 那么我...

2018-04-20 16:31:26 172

原创 【链表】梦幻布丁

【题意】 N个布丁摆成一行,进行M次操作。每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色。 例如颜色分别为1,2,2,1的四个布丁一共有3段颜色.。 n,m<=1000000 【思路】 对于每次操作,我们把小的合并到大的里面。 举个例子:颜色为1,2,2时要把颜色2改为颜色1,暴力的方法就是直接将所有颜色2改为1,但是将1改为2耗时更短。因此我们以f[i...

2018-04-19 19:44:49 155

原创 【链表】办公楼biu

【题意】 GD开办了一家电话公司。他雇用了N个职员,给了每个职员一部手机。每个职员的手机里都存储有一些同事的电话号码。由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决定将公司迁至一些新的办公楼。 FGD希望职员被安置在尽量多的办公楼当中,这样对于每个职员来说都会有一个相对更好的工作环境。但是,为了联系方便起见,如果两个职员被安置在两个不同的办公楼之内,他们必须拥有彼此的电话号...

2018-04-19 15:27:29 131

原创 【链表】Pieczęć

【题意】 一张n*m的方格纸,有些格子需要印成黑色,剩下的格子需要保留白色。 你有一个a*b的印章,有些格子是凸起(会沾上墨水)的。你需要判断能否用这个印章印出纸上的图案。印的过程中需要满足以下要求: (1)印章不可以旋转。 (2)不能把墨水印到纸外面。 (3)纸上的同一个格子不可以印多次。 0<=n,m,a,b<=1000。 【思路】 先将纸与印章的黑色点做成链表,然...

2018-04-18 17:13:26 180

原创 LCA算法

问题:给出一棵树,求两个节点的最近公共祖先。算法1每次让两个点中深度大的点向上跳,直到两个点相交。很明显,当数据是一条链时,每次询问的时间复杂度可达到O(n)。算法2我当时做这个问题时不知道正解,于是自己想了一个算法,性能还可以。我们将有不止一个子节点的节点定义为“关键节点”,lb[x]表示从x向上找找到的第一个关键节点,lt[x]表示从x向上找,直到找到一个节点,该节点的父亲是关键节...

2018-04-18 10:26:53 820

原创 [codevs4927] 线段树练习5

题意(原题):数列,五种操作,元素与操作个数都是10w。操作为区间加法,区间设为一个值,求区间和,区间最大值区间最小值。思路:维护两个lazy,一个add一个set,两个lazy不能共存。代码:#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#i...

2018-04-04 15:56:05 147

原创 [codevs4919] 线段树练习4

为什么要写这个看上去很水的题的题解呢..因为它坑点太多了,我足足调了1个上午+1个晚上+一整天。还是分块大法吼啊,分块大法保平安。题意(原题):数列区间加法,区间求%7=0的元素个数。思路:这题特别坑…主要的坑点在于它不像普通区间加法区间求和一样,区间加法只需要给自己加上特征值然后改一下lazy,它的更新是需要用到他的子节点的信息的,所以treeAdd的时候也要分发lazy,还有一大堆...

2018-04-02 09:12:16 149

原创 树状数组刷题记录

其实树状数组一定要手动用补码模拟lowBit,多模拟几组就能有较好的理解,理解它为什么是这样。Pro1单点修改,区间求和,n,m<=500000a[i]表示i所管辖范围内数的和。#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#inclu...

2018-03-27 19:18:43 157

原创 [bzoj2453] 维护队列

题意(原题):给出一组数列,有两种操作:单点改值;询问区间内有多少不同的值。n,m<=10000。修改少于1000次。对了这题和2120一模一样。思路:a[i]为i的值,b[i]为在i前面且最靠近i的且值等于a[i]的元素,,c[i]为b[i]在每个区块内排序后的值。每次修改:更新i后面的第一个值等于a[i]的元素的b[j],b[j]=b[i](这时a[i]还是原来的值)。更...

2018-03-26 11:08:27 240

原创 [bzoj3343] 教主的魔法

题意(原题):给个序列,支持两种操作:区间加法,区间询问大于某个数的元素有多少个。n<=1000000,q<=3000。思路:Pro2代码:#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<algorithm...

2018-03-24 16:34:28 176

原创 [bzoj2002] D飞绵羊

题意(原题):一只绵羊,在i会被D飞到i+a[i]。操作有询问从i出发被D多少次以后出了数列,或者改a[i]。n<=200000,m<=100000。思路:分块,每个块大小sqrt(n)+1。jump[i]表示从i开始跳,直到跳出i所在的块后的位置。jumpNum[i]表示跳出i所在的块要跳多少次。对于询问就每次加上jumpNum[i]然后跳到jump[i],直到跳出去;对于修...

2018-03-22 09:18:30 104

原创 算法 - 分块

分块的基本思想是,将处理的一组数分成一些块,对于每个l-r的操作,l和r两端所在的不完整的块单独处理,其余每个完整块只需统计这个块的信息而不必遍历这个块内所有的元素,从而节约时间。分块大小通常可以使用根号n,但对于不同题目可以使用均值不等式找到更好的分块大小。hzwer的分块教程题目列表简易题解notice:我的代码元素个数都是0~n-1,块的编号也是。这样可以使用i/size找到i在...

2018-03-20 21:29:44 304

原创 [bzoj1007] 水平可见直线

题意(原题):给出n条形如y=kx+b的直线,求你从所有直线的上面往下看,能看到哪些直线(只能看到一个点的不算)。n<=50000思路:将直线按k从小到大排序;k相等时按b从大到小排。将前两条直线丢入栈里面,然后逐个往栈里面加直线。设栈顶为sta[top],那么如果sta[top]与sta[top-1]的交点在当前要加入的直线下面,则持续踢出栈顶直到满足条件。因为这说明sta[t...

2018-03-09 16:02:45 151

原创 [bzoj1191] 超级英雄

题意(原题):n个问题,m种锦囊,每个问题有两种对应锦囊,使用一种对应锦囊可通过问题。必须按次序通过问题。求最多通过多少问题。n,m<=1000。思路:裸匈牙利,按次序就是一旦有一个匹配不了就break。代码:#include<cstdio>#include<cstdlib>#include<cstring>#include&lt...

2018-03-08 14:26:16 170

原创 [bzoj1011] 遥远的星球

题意(原题):长度为n的数轴,每个点上都有一个行星,i处有行星i。A为给定常量。Mi表示行星i的质量。当j<=A*j时j受到i的作用力,大小为Mi*Mj/(j-i) 。求每个行星的受力大小,误差不超过5%即可。n<=100000,A<=0.35。思路:无法解释的玄学思路。看别人的吧。代码:#include<cstdio>#include<cst...

2018-03-06 14:31:13 173

原创 [bzoj1015] 星球大战

题意(原题):给出n个点m条边,每次摧毁一个点,求一开始联通块个数及每次摧毁后的联通块个数。n<=400000,m<=200000思路:这题其实我初一第一次接触,然而那个时候弱鸡的我还不会写并查集。然后网上看到“逆序”两个字就灵光一现想到了正解——然后那个时候不会做。现在就做回来了。应该先摧毁所有点,然后计算联通块个数ans,然后每次按倒序加入被摧毁的点,看看有没有联通块被连起...

2018-03-06 13:26:27 156

转载 [bzoj1004] Cards

题意(原题):一些卡片,染成三种不同的颜色,分别sr,sb,sg张。给出m种洗牌方法,求有多少染色方案。如果一种染色方案能通过某种洗牌方法变成另一种方案,这两种方案相同。保证任意多次洗牌都可用洗牌方法中的一种代替,且对每种洗牌法,都存在一种洗牌法使得能回到原状态。思路:这儿写的非常好,我认为我没必要再写一个。其中关于逆元的可以参考我的这篇文章。代码:#include#inclu

2018-01-21 11:38:57 222 1

原创 [bzoj1003] 物流运输

题意(原题):一个图,每天都要设计一条从起点到终点的路线,当天费用就是路径长度。如果今天路径和昨天不一样,就要花费额外费用。某些点在某些天不可用。思路:最短路+简单的dp。代码:#include#include#include#define LL long longusing namespace std;struct node{ int next,y,c;}

2018-01-21 11:30:11 181

原创 逆元

我在做bzoj1004时看了别人的题解,需要用到一个叫逆元的玩意儿,查看了许多资料,决定写一个易懂的解析。假设我们要求(a*b/d)%p的值。但是a*b会爆long long.那我们很希望把/d换成乘某个数,这样就可以边乘边模对吧。那么,在%p条件下,除d等于乘d的逆元。我们称inv(x,y)为x在%y条件下的逆元。举个例子,3为2在%5意义下的逆元,即inv(2,5)=3。那么 (

2018-01-19 16:23:47 206

原创 [bzoj1002] 轮状病毒

题意(原题):给出一个环,上有n个点,每相邻两个点都连边,每个点与环中央一个点也有连边。求此图生成树个数。思路:关于图的生成树计数问题,我们可以使用Matrix-Tree定理。阮行止的博文我的博文但是据说这么做会被卡精度?那么暴力打表找规律。1 5 16 45 121 320 841…可以看出:若n为奇数位,则f(n)=n^2若n为偶数位,则f(n)=n^2*5

2017-12-29 16:02:45 733

原创 [bzoj1001] 狼抓兔子

题意(原题):给出一个网格(有斜向边),左上角为源点,右下角为汇点,每条边有流量,请问截留所有流量的代价为多少(截留一条边的代价与该边实际使用最大流量相等(应该没理解错))。思路:最大流:每条边每单位时间允许经过一定流量,源点流量无限,则为每单位时间汇点所能接受的最大流量。最小割定理:把一个图源点汇点分开,代价等于该图最大流。因此我们使用网络流解决这一问题。我使用的是dinic模版(貌似有

2017-12-29 15:36:39 198

原创 NOIP2017 睡觉记

Day0车上肝炉石。我是多出来的那个男生,然后教练说不和我住,于是我一个人住与双人房价格一样的单人房。什么概念?两个晚上,一个晚上368,我费用只交了600。刺激。Day1开局扫一遍题,T1奇怪的数论?给出两种金币,面额互质,求最大的不能刚好买到的价格。T2给出一堆循环,让你求这程序时间复杂度。T3设一个图起点到终点最短路长度为d,求所有长度不超过d+k的路径的条数。T1看着这样子觉得和

2017-11-12 22:50:53 199

原创 特征方程及其应用

首先我们了解一些概念。递推式:代入fn−1f_{n-1}或/与fn−2f_{n-2}之类的数列前几项,可以求出fnf_n的式子。通项公式:代入nn就可以求出fnf_n的式子。下面请上我们的老朋友:fn+2=fn+1+fnf_{n+2}=f_{n+1}+f_n这个递推式是不是很眼熟?斐波那契数列。如果我们要求数列第nn项应该怎么做?弱鸡(我):暴力递推稍微有趣:矩阵乘法+快速幂(具体做法

2017-11-03 11:42:26 10592

原创 抓老鼠

题意(原题):n只白老鼠,m只黑老鼠,公主与龙轮流抓老鼠,公主先手,龙抓完老鼠以后随机跑掉另一只老鼠。抓到白老鼠赢。到抓完为止都抓不到白老鼠则龙赢。求公主赢的概率。思路:设f[i][j]为剩i只白老鼠与j只黑老鼠时赢的概率。对于任意k,1<=k<=n时,有f[k][0]=1。每次抓老鼠的时候公主进入可能赢的状态有3种方法: 1.抓到白老鼠,f[i][j]+=i/(i+j) 2.抓到黑老

2017-11-02 21:33:44 283

原创 费马小定理及其逆命题的应用

费马小定理:当 nn 为整数,pp 为质数时,满足 np−1n^{p-1} modmod p=1p=1可以化成 npn^p modmod p=np=n,只不过因为有可能 n>pn>p 而通常不使用这种形式。费马小定理的逆命题:若 npn^p modmod p=np=n , pp 为质数这个命题是错的,但是错的概率较小。所以我们可以利用这个命题来判断 pp 是否为质数。具体:随机选择

2017-11-02 17:06:33 1870

原创 归纳法浅析

引入:试证明当 nn 为正整数时 ∑ni=1i2=n(n+1)(2n+1)/6\sum_{i=1}^n i^2 = n(n+1)(2n+1)/6成立证明:当 i=1i=1 时, ∑ni=1i2=1=1(1+1)(2+1)/6\sum_{i=1}^n i^2 = 1 = 1(1+1)(2+1)/6所以当 i=1 时式子成立当 i=ki=k 时∑ki=1i2=k(k+1)(2k+1)/6\s

2017-11-02 15:15:08 165

转载 极好的博弈论文章

博弈论入门 SG函数 非常易懂的解析出了博弈原理。

2017-11-01 11:22:19 352

原创 图的生成树计数

定义:给出一个图度数矩阵D,D[x][x]为该点度数;邻接矩阵A,若i到j有边,则A[i][j]为1,否则为0;基尔霍夫矩阵C,C=D-A定理:任意去掉C的第r行与第r列(一般是去掉最后一行与最后一列以方便计算)后,其矩阵值即为此图的生成树个数。附矩阵值的计算方法:设有一个n*n的矩阵A,其行与列编号为0~n-1,其矩阵值计算方法如下:一开始ans=0对于每个(注意是每个)i(0

2017-11-01 09:52:21 385

原创 玩具谜题

题意(原题,NOIP2017提高组Day1):n个人围成一圈,逆时针给出每个人的朝向与名字。从第一个人开始,给出m个操作,表示在这个人的位置处向左/右走x个人的位置,求最终位置。n,m<=100000思路:暴力模拟,向外+向左=+x,向内+向右=+x,其余-x。每个操作((now+/-x)+n%n)即可。代码:#include<cstdio>#include<cstdlib>#in

2017-10-31 16:46:45 297

原创 选数

题意(原题):给出一个n*n的矩阵,让你选一些数,使得和最大。如果选了一个数,那么这个数周围8个格子的数都不能选。n<=15。思路: 一道好的状态压缩题目。我们可以用一个数x表示第i行的一个状态。比如现在n=3,i=1,x=3,那么将x转为二 进制就是011,(为了方便计算,我们将它反过来成为110)。110就表示第1行我们选第1、2个数,第三个不选。那么我们如何判断

2017-10-30 15:07:49 253

原创 滑块

题意(原题): 给出起始与目标两个3*3的矩阵,矩阵内数由0-8组成且互不相同。每次操作可以将0上下左右的任意数与0交换。求到达目标矩阵的最小步数。 思路(请先预习康托展开): 把每个状态进行康托展开成为一个数,随即宽搜即可。 代码:#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>using names

2017-10-29 15:36:43 206

空空如也

空空如也

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

TA关注的人

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