自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

neither_nor

alone_wolf

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

原创 BZOJ2951 [Poi2001]Goldmine

把所有点按x坐标排序,然后双指针扫一下,一个指针扫右边界,另一个扫当前右边界的时候的最靠左的左边界,线段树维护每个下边界的答案#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing nam

2016-09-29 13:35:37 585

原创 BZOJ3613 [Heoi2014]南园满地堆轻絮

发现答案是最大的(a[i]-a[j]+1)/2满足i想想的话好像还挺显然的#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define MAXN

2016-09-28 17:19:12 525

原创 BZOJ3510 首都

到所有点距离和最小的点就是重心因为只有link操作,我们可以考虑启发式合并,这样最多会有n log n次“插入一个叶子节点”操作一棵树插入一个叶子节点之后,重心要么不变,要么向叶子的方向移动一条边,移动的条件是叶子所在的子树大小*2大于这棵树的大小(或者相等取编号小的)用LCT维护子树大小即可#include#include#include#include#include

2016-09-28 10:41:17 1128

原创 BZOJ1483 [HNOI2009]梦幻布丁

因为是把所有颜色x都变成颜色y,所以把颜色y变成颜色x也是可以的那么每次呢,就是要把两种颜色合并记录一下每个颜色当前存在哪个链表里,启发式合并链表就好了#include#include#include#include#include#include#include#include#include#include#include#include#include#

2016-09-28 08:29:39 792

原创 BZOJ4245 [ONTAK2015]OR-XOR

额,想了半天上网看了题解,然后发现看错题了对数组做前缀和,然后按位贪心,如果有至少m个可行的位置当前为为0并且n的当前位为0,则当前为就为0,否则为1如果当前位为0的话,把所有当前位为1的设为不可行#include#include#include#include#include#include#include#include#include#include#incl

2016-09-27 18:28:04 583

原创 BZOJ3521 [Poi2014]Salad Bar

把p看作1,j看作-1,作前缀和数组s,那么一个区间[l,r]合法的条件就是对于任意的l=s[l-1],s[i-1]那么对于每个点单调栈求出前边第一个比他大的在哪low,后边第一个比他小的在哪far,然后枚举i作为右端点,然后线段树查从low到i中far比i大的最靠前的那个即可#include#include#include#include#include#include#in

2016-09-27 13:20:04 572

原创 BZOJ3351 [ioi2009]Regions

首先是关于这道题的扯淡:早上闲来无事开始orz 2015年的集训队论文,然后发现里面有讲这题……然后就照着邹逍遥神犇讲的分块方法写写写,结果写完交上去发现MLE了,尼玛128MB n根号n内存根本过不了啊,到UOJ群里问了一发被claris等人告知要离线把空间降下来……,这论文题目不是叫《浅谈分块在一类在线问题中的应用》么,怎么还离线了……真是2333然后是题解:首先我们按论文里的方法把整

2016-09-26 18:53:47 1189

原创 BZOJ3426 Poi2013 Tower Defense Game

每次任选一个没被覆盖的点就行……具体证明看commonc的博客把……懒得写了……#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define MAX

2016-09-26 09:36:47 499

原创 BZOJ1135 [POI2009]Lyz

这个,二分图完备匹配模型然后呢,上hall定理发现肯定是选择脚号为一个区间的人的话最可能不满足hall定理设a[x]为x号脚的人的数量那么假设选择区间[l,r],我们要满足sigma i=l to r a[x]即sigma i=l to r (a[x]-k)那么线段树维护最大连续和即可#include#include#include#include#includ

2016-09-24 10:39:05 985

原创 BZOJ1119 [POI2009]SLO

一看题就一副置换群的样子……找到循环节,然后假设循环节长度为l,那么如果只在循环节内交换的话,一定每个数至少被计入代价一次,且一共要有2*(l-1)个数被计入答案,显然除了每个数至少一次外剩下的那l-2次都让最小的被计入答案最优但是这样对于这个循环节有可能不是最优,我们可以强行把一个不在循环节里的数拉进来,那么我们肯定要让所有数里最小的和循环节里最小的交换,把所有数里最小的拉进来,然后让所有数

2016-09-24 09:26:25 775

原创 BZOJ3416 Poi2013 Take-out

我们把c看成-k,b看成1,那么我们搞一个栈,从前往后扫,每次如果当前往前长度k+1和为0就说明可以消掉,然后倒序输出#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespa

2016-09-24 09:19:21 549

原创 BZOJ3427 Poi2013 Bytecomputer

发现答案肯定是前边一段-1,中间一段0,后边一段1的形式(可能有的段长度为0),可以证明出现2或者-2或者绝对值更大的数一定不是最优解做一个f[i]和g[i],f[i]表示把i到n都变成1的代价,g[i]表示把1到i都变成-1的代价那么如果第一个数就是1,那么肯定要把所有数都变成1,如果第一个数是0,那么我们找到第一个不是0的数,如果这个数是1,那么答案就是前边都是原来的0,把后边的数都变

2016-09-22 16:15:46 578

原创 BZOJ3417 Poi2013 Tales of seafaring

我们可以在两个点之间来回反复,所以问题就变成了判断两点之间道路条数为奇数或偶数的最短路是否小于等于d分成图,边都跨层连,即可算出奇数最短路和偶数最短路注意特判孤立点询问自己的情况#include#include#include#include#include#include#include#include#include#include#include#inclu

2016-09-22 14:19:47 737

原创 BZOJ2087 [Poi2010]Sheep

预处理出哪两个点之间是可以划的,枚举一个端点,把所有点按时针排序然后区间dp即可,f[i][j]=sigma f[i][k]*f[k][j](ik和kj都可以划)#include#include#include#include#include#include#include#include#include#include#include#include#includ

2016-09-21 16:22:17 471

原创 BZOJ4619 [Wf2016]Swap Space

把所有硬盘按照格完了之后是容量变大还是变小分成两类,先做变大的,后做变小的,变大的按原容量升序排序,变小的按新容量降序排序证明感性理解一下就好……#include#include#include#include#include#include#include#include#include#include#include#include#include#inclu

2016-09-21 13:03:36 880

原创 BZOJ3917 [Baltic2014]sequence

这题好神-_-我们考虑对序列里的每一个数a[i],求一个集合s[i],代表a[i]中必须出现的数字集合初始的时候每个s[i]里都只有输入的那个数我们另x[i]=a[i]/10(整除)y[i]=a[i]%10(即a[i]的个位)然后我们枚举第一个数的个位,即y[1],y[1]确定后所有的y就都确定了,然后如果s[i]中包含了y[i],那么就可以从s[i]中删掉y[i]我们知道数列

2016-09-21 10:08:47 821

原创 BZOJ3622 已经没有什么好害怕的了

KuribohG神犇说过,看到计数想容斥先把两个数组排序,然后f[i][j]表示从a数组中的前i个里选j个,b数组里任选j个,满足选出来的数两两配对a里的都比b里的大的方案数,因为a数组有序了,所以转移也很简单,然后求出了f[n][i]之后容斥,设g[i]为恰好有i对a里的比b里的大的方案数,则g[i]=f[n][i]*(n-i)! -sigma j=i+1 to n (C(j,i)*g[j]

2016-09-20 19:43:24 810

原创 BZOJ3191 [JLOI2013]卡牌游戏

考虑一下DP,我们发现在一轮游戏中,在卡牌确定的情况下,一个人胜出的概率只与当前游戏人数和这个人所处的位置有关所以我们另f[i][j]表示有i个人,第一个人坐庄,第j个人最后获胜的概率枚举i和j,然后枚举卡牌,算出死的人和新的庄,算出j在下一轮游戏里是第几个人,转移即可#include#include#include#include#include#include#incl

2016-09-19 22:03:50 664

原创 BZOJ3192 [JLOI2013]删除物品

这个,把两个栈拼一起,然后拿个指针维护分界点,拿树状数组维护要弹多少个元素即可#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define MAXN

2016-09-19 18:32:47 545

原创 BZOJ4706 B君的多边形

拿暴力打个表,然后到oeis上找规律……然后就A了……证明就算了……#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define MAXN

2016-09-19 17:39:13 1344

原创 BZOJ3230 相似子串 后缀自动机做法

……作为一名坚定的后缀自动机党,我当然要用后缀自动机做这题-_-这个……我发现我写题解的时候非常语无伦次,主要原因是后缀自动机那些术语除了一个max我都忘了,所以为了方便说话我们定义一些东西我们知道每个节点上(你理解为边上当然也可以的)有一个字符串,那么我们把这个字符串叫做a[x],这个字符串的长度叫做max[x],然后从根到一个点的路径能代表max[x]个字符串,我们把这些字符串叫做b[

2016-09-19 16:01:25 569

原创 BZOJ2088 [Poi2010]Teleportation

我们可以把所有点按距离源点的距离分层,每个层的点就可以和他上一层,同层和下一层的所有点连边那么最后一定是1单独作为第一层,2单独作为第6层,中间有四层为什么没有点与2同层呢,因为让一个点待在第五层一定比第六层优,待在第五层他可以和四五六层的连边,而在第六层只能和五六层的连边那么,与1有边相连的一定是第二层,与2有边相连的一定是第五层,与第二层的有边相连有不是第一、二层的一定是第三层,与

2016-09-19 10:25:19 461

原创 BZOJ2085 [Poi2010]Hamsters

因为字符串互不包含,所以求出从每一个字符串跑到另一个字符串最少要多少个字符,然后倍增floyd即可求从一个字符串到另一个字符串要多少字符就是第一个字符串最长多少的后缀与第二个字符串的前缀相等,暴力即可,易知当长度都相等的时候复杂度最高,为n*sigma len#include#include#include#include#include#include#include#in

2016-09-18 09:15:08 724

原创 BZOJ2081 [Poi2010]Beads

对于每个长度把所有的串拿出来哈希判即可,哈希一个log,由调和级数复杂度是n log^2的但是这题鬼畜的地方在于哈希……双模双base都被卡了……但是设模98754321,base=2333就能过……另外有个优化,如果当前长度乘当前最多个数大于n了,那么大于等于当前长度的长度就不可能更新答案了,可以直接break掉#include#include#include#include

2016-09-17 10:22:57 868

原创 BZOJ2090/2089 [Poi2010]Monotonicity 2/Monotonicity

考虑dp,f[i]表示使得i在选出来的子序列里尽可能靠后的话,那么i最靠后可以作为第f[i]项显然如果能求出每个i的f值,取max就是答案然后我们要证明,每个f[i]只可能是由j也就是我们要说明,当j出现在答案中而j的位置不是f[j]时,f[i]不可能更大那么我们假设i是第一个i,有j首先a[j]与a[i]一定不满足位置x的大小关系,且能满足位置y的大小关系,由此可以推出位置x

2016-09-16 21:04:26 1535 4

原创 BZOJ4698 Sdoi2008 Sandy的卡片

容易发现对原序列差分并把第一个数刨除,那么所有序列的最长公共子串长度+1就是答案后缀自动机上就可以了(后缀自动机做08年的题真的靠谱么少年!),依旧是那个不懂复杂度的算法,建出来广义后缀自动机之后每个串暴力跳fail直到到根或者这个字符串已经跳到过这个点#include#include#include#include#include#include#include#inclu

2016-09-14 22:35:18 1059

原创 BZOJ4704 旅行

不知为何每次一看到树链第k个相关的问题就一副这道题我之前做过的感觉,然后又找不到这题-_-这题的话,对于第i年的询问,相当于有效的修改操作是到第i年为止的所有修改操作减去到第l年为止的所有修改操作,链剖加主席树维护一下修改操作然后用链剖在树上爬就行了……比较麻烦,代码写的很丑-_-#include#include#include#include#include#include#

2016-09-14 16:06:18 831

原创 BZOJ2093 [Poi2010]Frog

我们发现到了一个点之后会跳到哪个点是固定的,于是整个图形成了环套树森林,得到了这棵环套树我们就能得出答案,那么我们考虑如何算距离每个点第k近的点发现距离一个点i第0~k近的点(第0近的点就是i自己)组成了一个包含第i个点的长度为k+1的区间,且第k近的点是区间的一个端点,那么我们维护这个区间i得1时区间一定是[1,k+1],那么我们考虑i++之后会对区间有什么影响,设区间左端点为q,右端点

2016-09-14 09:00:35 810

原创 BZOJ2086 [Poi2010]Blocks

容易发现,一段区间满足题目要求的充要条件是区间和>=区间长度*k做前缀和数组s,这样就得到了以每个点为右端点,1为左端点的区间的和,然后另s[i]等于s[i]-i*k,这样得到差数组d,如果d[i]>=0,那么说明当前以i为右端点是满足题目要求的每次把左端点右移一位相当于删掉d数组最左边的元素,并且把每个数加上k-a[i]这样我们只要得出d数组每个位置第一次变得大于等于0是什么,就可以

2016-09-13 21:04:05 888

原创 BZOJ3440 传球游戏

我们可以考虑拆点,把每个点拆成从左边过来和从右边过来两个,这样2n个点形成了一个环套树森林,一个人满足无论如何只能经过一次当且仅当他拆出来的两个点x和y满足x不是y的祖先,y不是x的祖先且x,y都不在环上dfs一下即可#include#include#include#include#include#include#include#include#include#inclu

2016-09-13 17:01:05 613

原创 BZOJ2064 分裂

只 都是这句话什么玩意……可 我们发现我们可以把分裂过程分成几组,每一组都是初始那一堆合成一堆再分裂成结果那一堆意 这样的话每一组只要满足初始的和与结束的和相等即可会 所以答案就是n1+n2-2*最多组数不 f[i]表示集合为i,最多组数是多少可 然后转移转移……,,言 如果这个整个集合都是和为0那么一定存在一个在一个和为0的组里传 如果整个集合不为0那么一定存在一个不

2016-09-12 19:24:06 688 2

原创 BZOJ2400 Spoj 839 Optimal Marks

mlgb的我调了一下午,结果是网络流bfs的时候忘初始化队列了首先一看位运算,每一位是独立的,然后每一位的问题就是把每个点划分为黑集或白集,两个点之间若有边且所属集合不一样就会产生一个较高一级别的代价,若一个点被划分为黑集则会产生较低一级别的代价,建图跑最小割就行了要开long long #include#include#include#include#include#inc

2016-09-12 16:49:32 466

原创 BZOJ3629 [JLOI2014]聪明的燕姿

首先我们要知道怎么求一个数的约数和……假设我们要求n的所有约数和,那么因为很好证所以证明略过然后呢……我们就记录当前的还需要的约数和和当前的数,爆搜每个质数的指数……然后因为大于根号的质因数只能有一个,所以我们每次判一下当前还需要的约数和-1是否是质数就可以了……#include#include#include#include#include#include#inclu

2016-09-12 09:48:20 925

原创 BZOJ4610 [Wf2016]Ceiling Functi

模拟一下,一棵树可以由括号序列唯一标示,因为左右儿子有区别,所以区分一下走左儿子的括号和右儿子的括号即可#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

2016-09-12 07:31:48 890

原创 BZOJ3956 Count

orz ljss……我们发现,以i为两个端点中较小的那个的好的点对最多有两个(以i为左端点一个,右端点一个)单调栈预处理所有好的点对然后二维数点即可#include#include#include#include#include#include#include#include#include#include#include#include#include#in

2016-09-09 09:54:07 718

原创 BZOJ4104 [Thu Summer Camp 2015]解密运算

首先题里告诉我们最后一个字符是.,且..小于任意字符,所以在比较字典序时比较到.就一定能比较出大小,所以对字符串s的所有循环同构的串排序就相当于对s的所有后缀排序,也就是说一行对应了一个后缀,而给出第i行的最后一个字符就相当于给出s[sa[i]-1]我们知道sa[1]一定得n,所以我们就得到了s[n-1],而后我们只要知道rank[n-1],我们就能知道sa几得n-1,也就能得出s[n-2],

2016-09-09 08:02:22 434

原创 BZOJ2140 稳定婚姻

暴力点的我们可以每次拆一对然后跑匈牙利看看能不能跑出来,可以过……然后我们发现匈牙利能跑出来的条件是有一个环,所以tarjan就可以了#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusi

2016-09-08 14:39:11 867

原创 BZOJ4373 算术天才⑨与等差数列

考虑一段区间排序后是等差为k的数列的条件首先特判k=0,如果区间最大值与最小值相等则合法否则首先区间不能有重复,记录每个点的上一个与他权值相等的点的位置fro,区间取fro最大值之后判断是否在区间左边然后设区间长度为len,则区间最大值必须等于区间最小值+(len-1)*k满足上边两个条件之后,只要满足区间内每个点的权值模k都相等即可考虑求关于x的同余方程a同余b模x的解,则

2016-09-07 18:10:12 973

原创 BZOJ3203 [Sdoi2013]保护出题人

对于每一次进攻,我们只要保证对于每一个僵尸,攻击力大于等于其生命值除以他开始受到攻击时与房子的距离即可,对这个式子进行化简,发现等价于攻击力大于等于他和排在他前边僵尸的生命值之和除以他开始时距房子的距离把每个僵尸看作一个点,横坐标为初始距房子的距离,纵坐标为他和他前边僵尸的生命值之和,而他要求的攻击力就是这个点与原点连成直线的斜率找到所有点中斜率最大值即可,可以维护一个上凸壳然后三分注

2016-09-07 13:00:17 453

原创 BZOJ3142 [Hnoi2013]数列

因为我太弱了不会推式子所以只能打表找规律加矩乘……在m固定的情况下,以n为行以k为列打个表,发现在第i列,第一项在第(i-1)*m+1行,除了第一项以外每一项是他前一项+m^(i-1)而第一项等于1~i-1列每一列的前m项的和只要求出了第k列的第一项就能轻松求出第n行的值我们设f[i]表示第i列的第一项,则f[1]=1,f[i]=m*f[i-1]+(m-1)*(m^(i-1))/2

2016-09-07 09:16:12 501

空空如也

空空如也

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

TA关注的人

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