自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

老臣

有时,我可能脆弱得一句话就泪流满面,有时,也发现自己咬着牙走了很长的路。

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

原创 一维二维树状数组区间加与区间求和

在一般的情况下,对于区间加与区间求和,我们一般使用线段树。 树状数组在一般情况下,只能够单点查询,修改。 但是我们可以通过差分做到区间加或者区间求和(一维) 我们对于一个区间l,r,要求他们的和a[l]….a[r]。 设b[i]表示相邻两点之间的差(b[i]=a[i]-a[i-1]),那么对于sum(a[l]..a[r]) 明显有sum(a[l]..a[r])=(b[1]+b[2]+….+

2017-08-15 20:44:50 1392

原创 bzoj3224 Tyvj 1728 普通平衡树 treap

模板题啦~,复习一波。 treap比splay好写多了qwq#include<cstdio>#include<algorithm>#include<cstring>#include<cstdlib>#include<iostream>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--

2017-08-29 16:27:31 461

原创 Atcoder Grand Contest 19 题解

入坑atcoder,之前打过几场但是都是什么beginner test,,水的一匹。 tourist出的题目,害怕,向老大哥低头。A 比较简单的水题。。贪心判就好了,反正四个东西是可以互相转化的。#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#defin

2017-08-27 15:51:22 767

原创 bzoj4979凌晨三点的宿舍 分治+树状数组+扫描线

Description小Q所在的学校QNU(Quailty Niubi University)的学生公寓由n栋楼组成,这些楼从左往右连成一排,编号依次为1到n,其中第i栋楼有h_i层。现在已经凌晨三点了,但是小Q和他的队友们仍然在刻苦地刷题,从他们房间窗户透出的亮光格外醒目。这时,辛苦了一晚上的小Q饿了,正当他拆完泡面准备倒水的时候,他发现热水壶放在队友那忘记拿回来了。无奈之下,他只好走路去向

2017-08-25 23:22:39 1146

原创 bzoj4973比特战争 kruskal

Description在比特世界,A国正与B国爆发着战争!B国有n个城市,编号依次为1到n。这些城市之间通过m条双向道路连接,其 中第i条道路连接着u_i,v_i这两个城市。任意两个城市之间可能有多条道路,也有可能从1号点出发不能到达所有 城市。对于第i个城市,占领这座城市则需要在这里聚集a_i个特种兵,而在这里空降1个特种兵的代价为b_i。对于 第i条道路,占领这条道路需要在道路两端点的城市

2017-08-24 22:00:40 379

原创 bzoj1138 [POI2009]Baj 最短回文路 DP+宽搜

POI就算是很老的题目也很锻炼思维啊。。。DescriptionN个点用M条有向边连接,每条边标有一个小写字母。 对于一个长度为D的顶点序列,回答每对相邻顶点Si到Si+1的最短回文路径。 如果没有,输出-1。 如果有,输出最短长度以及这个字符串。Input第一行正整数N和M ( 2 ≤ N ≤ 400 , 1 ≤ M ≤ 60,000 ) 接下来M行描述边的起点,终点,字母。接下来D表示询问序列长

2017-08-24 19:42:09 413

原创 bzoj2783 [JLOI2012]树 STL+dfs

题意:给出一棵树。每个点有权值,问有多少条路径的权值和=S,S给定 S<=1e3,N<=1e5. 第一反应dp,设f[i][j]表示第i个点,权值和为j,dp式十分显然= =然而会T,卡了卡常卡不过去。。应该是卡掉了这种做法。。 那么我们只能nlogn,注意到答案好像不用mo,然后我觉得可能时间复杂度是O(ans)。。然后dfs一下用个set存储一下前缀和,然后每次查找一下是否有一条合法路径。

2017-08-23 22:35:37 258

原创 5332. 【NOIP2017提高A组模拟8.23】密码 AC自动机+数位DP

题意:求x-y之间有多少个数字包含至少k个密钥,密钥给出,x-y的数位比500小。 老年选手,这种题都不会做了,我退群吧。 就是随便AC自动机dp啊。。。我太废了。 设f[i][j][k][0/1]表示匹配到串的第i个节点,AC自动机上跑到了j,已经匹配了k个密钥, 0/1表示我之前匹配的哪些数位是否完全匹配某些密钥。 所以1可以转化为1或0,0只能转化0,然后xjbDP就好。。#incl

2017-08-23 20:35:24 277

原创 5331. 【NOIP2017提高A组模拟8.23】壕游戏 费用流 动态连边

题意:n个点m条边,每条边有一个经过次数限制ci,假设经过了x次,第x次费用为ai*x+bi,有s个终点,要跑k次,问最小总费用多少。 巨鬼畜,连边只按照第一次的连,然后费用流的时候每流一条边然后再连下一条边。。 我好菜啊,ymw随手AK。#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define

2017-08-23 14:51:30 289

原创 5333. 【NOIP2017提高A组模拟8.23】大新闻 主席树/树套树

数据结构学傻选手。。。 题意:给出一个序列,每次可以在开头添加或删除,以及查询区间k大。一看添加无脑树套树,成功fst,事实上只要一个主席树就可以了,倒过来每次覆盖掉。。#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int n,m,tot,top,sz;const int N=5e5+5;

2017-08-23 14:44:32 278

原创 bzoj4082 [Wf2014]Surveillance 倍增

Description给你一个长度为len的环,以及n个区间,要你选择尽量少的区间,使得它们完全覆盖整个环。问最少要多少个区间。Input输入数据的第一行是两个整数len和n,代表环的长度以及区间个数。之后n行描述的是n个区间,每个区间分别用一对数字(a,b)表示,若a≤b则表示这个区间覆盖的是[a,b]部分,否则表示这个区间覆盖的是除掉[a+1,b-1]以外的其他部分。Output输出只有一行,一

2017-08-22 21:46:22 474

原创 bzoj4971记忆中的背包 构造+DP

题意:给你一个01背包方案的问题,给出背包上限w,模数p,最终方案k,构造出一种合法的物品序列,保证n<=40。构造大法好,第一次构造。。。 比较简单也比较好处理的一种方法是一堆1和几个大物品。。 于是先预处理出f[x][j]表示现在有x个1,能到达j方案数用的最少物品个数。 那么我们枚举x,假设当前用了i个1,即大物品的和距离w还差i,那么增加的方案数就是CixC_{x}^{i},然后用个g

2017-08-22 19:52:34 739

原创 5328. 【NOIP2017提高A组模拟8.22】世界线 bitset+拓补序合并

题意:给你一个DAG,算每个点能到达的点数-已经连边的边数。 n<=6e4,m<=1e5n<=6e4,m<=1e5 这数据范围很鬼畜啊。直接暴力拓补序合并GG,加个bitset也有点危险,然后我就学习了一种新姿势。。 每次只存500个点,类似于循环展开,那么时间复杂度就是O(nm/64)O(nm/64)变为O(nm/500/64)O(nm/500/64)(还有这种操作。。) bitset中能

2017-08-22 16:19:37 308

原创 5329. 【NOIP2017提高A组模拟8.22】时间机器 map

md。。这种纯考STL的题目真的好吗,还一天出两题。。 题意:给出两大类物品,每类物品有任意种,属性l,r,数量s。 对于类A,类B要找一个l,r能包含他的来和他配对,问最终能否把A全部配对完。。 明显的最大匹配,最大流xjb跑跑,,问题是n<=5e4,怎么办? 贪心很明显了,左端点排个序,右端点在包含的情况下尽量靠近,二分或者map都可以吧。#include<cstdio>#includ

2017-08-22 15:59:56 268

原创 bzoj4976宝石镶嵌 DP

Description魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,…,w_n。他想把这些宝石镶嵌到自己的法杖上,来提升 法杖的威力。不幸的是,小Q的法杖上宝石镶嵌栏太少了,他必须扔掉k个宝石才能将剩下的宝石镶嵌上去。法杖的 威力等于镶嵌在上面的所有宝石的魔力按位做或(OR)运算的结果,请写一个程序帮助小Q做出最佳的选择,使得法 杖的威力最大。 Input第一行包含两个正整数n

2017-08-21 16:52:40 354

原创 5322. 【GDOI2017模拟8.21】小朋友 状压dp

n<=1000,3<=k<=10,ai<=100000n<=1000,3<=k<=10,ai<=100000 状压dp的题目,据出题人说是裸题,奈何我状压一直是最弱的= =,问了ymwdalao才知道怎么打。。讲道理基本上超过2000多B的状压我都不大会。。 设f[i][j][l]表示当前选到第i个,j是状态,表示i-k到i的状态,l表示有多少个三人桌。 那么明显,三人桌只能有3个,4个的话就

2017-08-21 16:09:23 269

原创 bzoj1510[POI2006]Kra-The Disks 二分

二分一下就好了。#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;const int N=3e5+5;

2017-08-20 17:00:17 329

原创 5296. 【清华集训2017模拟】Sequence 树套树

题意:给你一些二元组如(ai,bi)(ai,bi),每次询问l,r,x,y,k. 先把元素按照第一关键字排序,取出其中排名为x,y的,按照第二关键字排序后取出排名为k的元素。树套树很明显了其实。。 对于第一个操作,我们对于a维护一颗主席树,取出第x,y的端点,然后在外层主席树中把第x到y中的节点信息取出来然后做个线段树区间k大就好了。。#include<cstdio>#include<algo

2017-08-20 16:01:46 157

原创 codeforces 802I 后缀自动机

题意:给你一个字符串,统计他的所有不同子串的出现次数的平方和,n<=100000n<=100000 其实相当于一个SAM的模板题吧。 首先你要理解SAM的存储方式以后就可以轻松切这题。。 SAM建立了一个parent树还有一个DAG,这里显然和DAG没什么关系。 对于parent树上的每个节点,他有一个right集,存储这一些子串的右端点下标,同时还有一个对应区间min(len),max(

2017-08-20 15:36:22 445

原创 2017百度之星 复赛

作为一只菜鸡,这可能是我OI生涯中最后一次打百度之星了,希望明年这个时候能不退役(虽然不大可能)开始贴题解吧。会持续更新。1001 Arithmetic of Bomb 煞笔模拟题,1A#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i

2017-08-18 21:36:12 1176

原创 bzoj2815 [ZJOI2012]灾难 支配树

没事学习一下新算法= =,反正也不是很难,WC讲过的拖到现在真是不好意思啊。 个人感觉基本上恨少考这个东西= = 题意:给你一个DAG,对于每一个点去掉以后有多少个点不能从入度为0的点到达。 那么这明显就是支配树,只要我删的这个点是必经点,那么我在支配树上的所有儿子都不能到达,那么每个点的答案就是他在支配树的上的size-1。 建支配树用lca,注意只有dag才能用这个方法。#include

2017-08-18 19:43:49 267

原创 bzoj 1513 [POI2006]Tet-Tetris 3D二维线段树

一句话题意:给你一个矩形,给出两种操作,一种询问区间最大值,一种区间加。 由于刚学习二维树状数组,所以想试试,但是想了想发现没法维护最大值,或者说强行维护的话好像会到达log^4。。。因为一维树状数组维护最大值是log^2的,这就得不偿失了。 所以还是二维线段树,一开始打错了,删掉3000多b重打,一阵酸爽。 其实就是树套树辣,对于行维护一个线段树,每一行维护一个线段树,然后发现矩阵的信息没法

2017-08-16 22:01:58 283

原创 51nod 排列与交换 序列dp

算是比较简单的七级题了吧,也是经典的序列交换类型的dp。 明显有f[i][j]表示前i个交换j次的方案数。 对于第一问,每次转移的时候直接把之前的方案继承过来。 最后统计答案的时候,只要交换次数与k的奇偶性相同,就可累加到答案内,因为剩余的步数我可以两点之间xjb交换。。 但是会算重,因为我这样的计算是尽量把每个数往前面交换,那这样最后他从i到1又转回i,方案就会算重,所以我们把这种情况减去

2017-08-15 21:57:24 231

原创 bzoj3132上帝造题的七分钟 二维树状数组

具体的话,这是一个实用的技巧,通过差分来做到区间加和区间查询的作用,好像二维线段树或者树套树会挂。 http://blog.csdn.net/qq_35866453/article/details/77199794#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++

2017-08-15 20:46:45 285

原创 JZOJ5281. 【NOIP提高组模拟A组8.15】钦点 十字链表

经典的十字链表,暴力搞搞就可以了。#include<iostream> #include<deque> #include<cstring>#include<cstdio>#include<algorithm> #define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using nam

2017-08-15 16:28:21 304

原创 JZOJ5272. 神奇的重复序列 结论

不知道这题该归类到什么东西里面。。。可以发现,假设最终通过改变而相同的子串,假设他们一个结尾在i,一个结尾在j,设k=j-i,他们中的子串中任意两个下标%k相同的位置,他们的字符肯定也相同(结论。)那么知道这一点后我们就可以开始乱搞了(迷) 我们先枚举周期k,然后扫一遍串。 每一次维护一个右指针r,表示最多能延伸到哪里,然后设一个need表示当前用了多少次机会,那么每次我们可以更新答案ans=m

2017-08-14 22:55:24 240

原创 bzoj4596&&JZOJ5271&&5043保持平衡 贪心+堆(经典思想)

博爱路上种起了一棵棵的大树,但是有一些地方的树超过了负荷,有一些地方的树的数量又不够。我们不妨把博爱路看做一条数轴,数轴有n个点,从1到n编号,第i个位置原来现在有ai棵树,这个位置的需求是bi棵树。ai,bi都是0到10的整数。由于你需要是这个位置的树的数量保持平衡,所以你需要移除或者搬一些树过来。我们怎么使树的数量平衡呢?首先,你可以从某个位置i移动一棵树到位置j,这时,你需要的运费是|i

2017-08-14 16:59:49 402

原创 bzoj4710 [Jsoi2011]分特产 容斥原理

首先知道隔板法可以算出有空的方案。 那么就可以把题目转化为总方案书-不合法的方案数,容斥以后即: 至少0个人为空-至少一个人为空+至少。。。。。 那么强制不选i个盒子,算出方案数以后就是只有n-i个人有的方案。 但是并不能确定是哪i个人没被分配,所以最后乘上一个C(n,i)#include<cstdio>#include<algorithm>#include<cstring>#defi

2017-08-13 23:56:04 297

原创 codeforces round428 div 2

像我这种垃圾选手只能跑来搞div 2.。。 rating增加的好慢啊,不知道何年何月能上紫。。。A:暴力傻逼题,开场3分钟切。#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(i

2017-08-13 10:34:46 392

原创 bzoj2187 fraction 类欧几里得算法

Description分数 给你4个正整数a,b,c,d,求一个最简分数 p / q满足 a / b < p / q < c / d,若有多组解,输出q最小的一组,若仍有多组解,输出p最小的一组。 Input本题有多组数据,有若干行,每行4个数a,b,c,d。以文件的末尾作为结束。 Output对于输入的每组数据输出一个最简分数p/q。 Sample Input1 3 1 22 1 3 12

2017-08-09 21:55:44 463

原创 bzoj2987 Earthquake 类欧几里德算法

题目要求的其实是合法解数量 ax+by<=c (c-ax)/b=y; 那么这是经典的类欧模型,直接做就好了。 有人会问有负数怎么办? 。。 (c-ax)=(c%a+ax),因为在模A意义下同余。 然后就可以直接做辣。#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define fo(i,a,

2017-08-09 14:31:29 433

原创 jzoj4726. 【NOIP2016提高A组模拟8.22】种花 贪心+堆

这题思路很巧妙,要借鉴。 题意:给你一个环,选出M个点,任意两个互不相邻,要求总和最大。 一开始想的dp,设f[i][0/1]表示i选不选的最大总和,然后发现i的取值基本上能和他前面所有的值都有关联,由于是个环,所以dp你连预处理都会炸。。如果是个序列就可以这么做,不过在后面复制一遍然后用单调队列优化好像也可以,但那就太不优美了其实是我懒得打 那么我们可以贪心,把所有的数加入大根堆,每次取出最

2017-08-09 10:51:33 493

原创 jzoj5246. 【NOIP2017模拟8.8A组】Trip(trip) 笛卡尔数/二维偏序

Description 多年之后,worldwideD厌倦竞争,隐居山林。 他的家乡开始发展起了旅游业,在一条很长的主干道上,有N个旅游景点,按顺序编号为1到N。根据游客们网上的评分,第i个景点有一个评估值a[i],为了区分开不同的景点,评估值是两两不同的。 今天有M组游客前来旅游,第i组游客选择遍历景点Li到景点Ri这一段路。他们搜到Li到Ri的所有评估值,

2017-08-09 09:30:38 382

原创 jzoj5241【GDOI2018模拟8.8】苹果和雪梨 贪心

Description作为新开的水果连锁店店员,你需要把总部发给你的苹果和雪梨分组出售,从而获得最 大利润。 总部发给你的水果包括: n 个苹果,质量分别为a1,a2…an n 个雪梨,质量分别为b1,b2…bn。 你卖的是盒装水果,一盒水果包括一个苹果和一个雪梨,苹果的质量乘上雪梨的质量就 是这盒水果的价钱。把苹果雪梨配对分成总共n 盒水果后,你要把价格最高的一盒返还给 水果店总部,

2017-08-09 09:15:23 464

原创 JZOJ5242【GDOI2018模拟8.8】矩阵

Description给出一个n*m 的01 矩阵,求其中有多少个连续子矩阵,使得其面积大于等于k,且其中不包含1。Input第一行为用空格隔开的三个整数n, m, k。分别表示矩阵的行数,列数和子矩阵的最小面积。 接下来的n 行每行为用空格隔开的m 个整数,为题目中给出的矩阵。Output输出一行一个整数,为满足条件的子矩阵个数。Sample Input2 4 3 1 0 0 0 1 1 0

2017-08-09 08:22:44 785

原创 JZOJ5243【GDOI2018模拟8.8】超级绵羊异或 类欧几里得算法

好像没什么人去改这题啊。。。 题意:求a xor(a+b)xor(a+b*2)…..xor (a+b*(n-1))考虑计算答案的第x位是否为1 那么对于a+bi,判断(a+bi)/(1<#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(

2017-08-08 17:12:53 522

原创 bzoj3105[cqoi2013]新Nim游戏 线性基

Description传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同)。两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴。可以只拿一根,也可以拿走整堆火柴,但不能同时从超过一堆火柴中拿。拿走最后一根火柴的游戏者胜利。 本题的游戏稍微有些不同:在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴。可以一堆都不拿,但不可以全部拿走。第二回合也一样,第二个

2017-08-08 08:12:22 318 1

原创 【GDOI2018模拟8.7】图的异或 线性基

题意:有一个无向图,给出起点和终点,在从s到t的路径中,你要选择一条路径,使得这条路径上的权值xor和最大,输出这个xor和。一个点或者边可以被重复走。从s开始dfs一遍以后,算出w[i],表示从s到i(树上,即必经之路上的点)的xor和,注意s,i这个环(如果有的话)。 然后把w的值全部加进线性基里面,选出最大的就好了。 假如线性基的第i位有值,那么由于我要留下一个位置来保证最终答案的第i位有

2017-08-07 22:25:38 355

原创 bzoj2789 letters 树状数组

Description给出两个长度相同且由大写英文字母组成的字符串A、B,保证A和B中每种字母出现的次数相同。现在每次可以交换A中相邻两个字符,求最少需要交换多少次可以使得A变成B。Input第一行一个正整数n (2<=n<=1,000,000),表示字符串的长度。第二行和第三行各一个长度为n的字符串,并且只包含大写英文字母。Output一个非负整数,表示最少的交换次数。 Sample Input

2017-08-06 21:46:01 318

原创 JZOJ5233 【GDOI模拟8.5】概率博弈 树形dp

妈耶,改这题各种失误,清空都能清错,本来清x然后清空了儿子,服了。 区间题做多了下意识leaf[1]-i+1 服气。 Description小A和小B在玩游戏。这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值。假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列。 一开始在1号点有一颗棋子。两人轮流将这颗棋子移向其当前位置的一个儿子。假如棋子到达叶子,游戏结束,

2017-08-05 21:54:54 396

空空如也

空空如也

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

TA关注的人

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