bzoj
EMber _
人但有追求,世界亦会让路。
展开
-
CQOI2012局部极小值 BZOJ2669 状压DP+容斥
题意:给定一个n∗m的矩阵,标记出其中的局部极小值,要求填入1…n∗m,求方案数 这题我刚看还以为是搜索之类的。。后来看见数据范围才发现是DP。。没想到要用容斥。 切了一下午,题解都没听。。上去讲了一下自己的想法就没听了。。当时感觉快改出来了。。结果吗。。赫赫,因为没有清零而导致tle我是绝对不会告诉你们滴~~ 推荐一下PO姐的解法,讲的很明了,,这里也会有部分借鉴== http://blo原创 2016-08-15 20:10:34 · 535 阅读 · 0 评论 -
bzoj2144 跳跳棋 二分+lca
这道题刚开始看以为是DP,,,我真是智障了。该DP的看成搜索,该二分的看成DP。。这状态有点危险。。 题意:现在有三个人a,b,c,每一个人可以跳过他左/右边的人,比如说一个人在x,一个在y,那么x可以跳到y+(y-x)(y>x),左边同理。。但是两个人之间不能有另一个人。 现在有三个目标位置和起始位置,让你计算最少的步数让三个人到达目标位置,并不要求人的顺序(即无论哪一个人都可以去任意的终点)原创 2016-08-15 21:17:02 · 736 阅读 · 1 评论 -
bzoj1562 NOI2009变换序列 二分图匹配(匈牙利)
我看见很多人因为题意很繁杂所以直接贴题面,这样是不对滴~~,其实题意没你们想的那么复杂。 题意:给你一个数N,设序列A=0,1,,,,N-1.现在让你求一个T序列。每一个a[i]都可以变为T[i],但是我们定义两个数之间的距离为min(abs(x-y),n-abs(x-y)),现在给出你所有的距离D[I]让你求出T序列。 刚开始我以为直接满足就可以,所以认为直接O(N)扫一遍判断距离的四种情况就原创 2016-08-16 20:56:00 · 411 阅读 · 0 评论 -
BZOJ4653 NOI2016DAY2T1区间 线段树
题目:Description在数轴上有 n个闭区间 [l1,r1],[l2,r2],…,[ln,rn]。现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置。换句话说,就是使得存在一个 x,使得对于每一个被选中的区间 [li,ri],都有 li≤x≤ri。 对于一个合法的选取方案,它的花费为被选中的最长区间长度减去被选中的最短区间长度。区间 [li,ri] 的长度定义为 ri−li,即原创 2016-08-18 20:16:28 · 383 阅读 · 0 评论 -
莫队算法学习小记 bzoj3781
所谓莫队,就是。。。好吧我说不出来具体释义。。 这个算法常用于序列的处理中,对于序列处理有很大的作用。 能够使用莫队算法的题目都具有一个特点: 对于每一个询问的区间【l,r】都能O(1)推导到l-1,r.l,r+1.l+1,r.l,r-1. 使用莫队时要先对所有的询问分块,每一个块的长度为sqrt(n),然后按块的顺序排序,询问的r作为第二关键字(具体看题目,一般来说是以r为第二关键字)。原创 2016-09-12 21:16:26 · 296 阅读 · 0 评论 -
bzoj4318 OSU! 概率DP
题意:给你一串长度为n的01串。每一个位置上出现1的概率为a[i],让你求每一段连续的1的长度的立方和的期望值。 解法: 从第一位开始推,假设这一位是1,累加就可以了(0没有贡献),然后怎么知道前面是不是有1呢?我们可以推一个式子:(x+1)^3-x^3=3x^2+3x+1 x为加入当前位之前最长的全部是1的后缀的长度。然后维护x^2和x的期望就可以了,其实这都不能算是DP,应该是递推。原创 2016-09-25 08:15:59 · 247 阅读 · 0 评论 -
bzoj1857 三分套三分
题目连接:http://www.lydsy.com/JudgeOnline/problem.php?id=1857 这算是bzoj为数不多的水题之一了吧,打这题目是为了练一练三分。。 就是三分套三分的模板题,三分在AB和CD上的坐标。。 代码:const lim=1e-12;type dot=record x,y:extended; end;var原创 2016-11-10 15:57:49 · 731 阅读 · 0 评论 -
bzoj1042 dp+容斥
Description 硬币购物一共有4种硬币。面值分别为c1,c2,c3,c4。某人去商店买东西,去了tot次。每次带di枚ci硬币,买s i的价值的东西。请问每次有多少种付款方法。Input 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s,其中di,s<=100000,tot<=1000Output 每次的方法数Sample Input1 2 5 10原创 2017-02-16 16:00:48 · 217 阅读 · 0 评论 -
bzoj2396 Cirno的完美算数教室 容斥
Description~Cirno发现了一种baka数,这种数呢~只含有2和⑨两种数字~~ 现在Cirno想知道~一个区间中~~有多少个数能被baka数整除~ 但是Cirno这么天才的妖精才不屑去数啦 只能依靠聪明的你咯。 Input一行正整数L R ( 1 < L < R < 10^10) Output一个正整数,代表所求的答案 Sample Input1 100 Sample O原创 2017-02-17 20:04:54 · 340 阅读 · 0 评论 -
bzoj1006 弦图转完美消除序列,最小染色
Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA 相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系等等的存在.所谓N边关系,是指N个人 A1A2 …An之间仅存在N对认识关系:(A1A2)(A2A3)…(AnA1),而没有其它认识关系.比如四边关系指ABCD四个人 AB,BC,C D,DA原创 2017-02-27 20:31:16 · 440 阅读 · 0 评论 -
bzoj1974&jzoj1523 [Sdoi2010]auction 代码拍卖会
题意:当一个数的每一位都比前一位大时,我们把这种数叫做上升数。现在给你n和k,让你求n以内有多少个上升数能整除,n<=10^18,k<=500。分析:大概能想到背包,但是细节很复杂所以就炸了。。。不得已膜了一波题解。。每一个上升数都可以分解为1,11,111,1111之类的数。那么我们可以找出所有的这种树,把他们分成k组,做分组背包。 令f[i][j][k]表示前i组里选j个数的和在模K意义下是k原创 2017-02-18 14:05:42 · 290 阅读 · 0 评论 -
bzoj4475【JSOI2015】子集选取
题意比较复杂就不说了。看到这题是因为很多学弟都切了,瞬间感觉自己很虚,怎么JSOI2015这么简单了,难道是我弱了?于是来切切。。 发现这题目直接想的话组合数什么的都比较复杂,然后手推推出来是2^(nk)。。比较水。 问题是tmdcmath这个头文件有毒啊!!!我日就一个快速幂啊,怎么加上就错不加就对了?????????#include<cstdio>#include<algorithm>#原创 2017-02-18 15:03:00 · 423 阅读 · 0 评论 -
BZOJ1026 SCOI2009WINDY数
Description windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。 windy想知道, 在A和B之间,包括A和B,总共有多少个windy数?Input 包含两个整数,A B。Output 一个整数Sample Input【输入样例一】1 10【输入样例二】25 50 Sample Output【输出样例一】9【输出样例二】20 HI原创 2017-02-19 08:37:34 · 359 阅读 · 0 评论 -
bzoj1055 [HAOI2008]玩具取名[区间DP]
Description 某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很长。 现在,他想请你猜猜某一个很长的名字,最初可能是由哪几个字母变形过来的。 Input 第一行四个整数W、I、N、G。表示每一个字母能由几种两个字母所替代。原创 2017-02-18 20:33:52 · 1032 阅读 · 0 评论 -
bzoj1002[FJOI2007]轮状病毒 递推+高精度
题意比较简单就不说了。 一开始我用组合数做,发现WA了。。并不知道为什么错,感觉应该是会算重。主要是用基尔霍夫矩阵推出一个结论,但是我发现n=1,n=2的时候怎么大家的答案都不太一样。结论就是f[i]=(f[i-1]*3-f[i-2]+2),注意要用高精度不然会爆。。#include <cstdio>#include <cstdlib>#include <cstring>#include原创 2017-02-17 22:11:23 · 427 阅读 · 0 评论 -
bzoj1008 容斥
题意就不说了。水的一匹的容斥,直接做。m^n-m*(m-1)^(n-1),正难则反。。结果输出lld前面手抖少打了个%。。#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a原创 2017-02-14 21:29:41 · 242 阅读 · 0 评论 -
bzoj 1030 AC自动机+DP
Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版。该软件可以随机生成一些文章―――总是生成一篇长度固定且完全随机的文 章—— 也就是说,生成的文章中每个字节都是完全随机的。如果一篇文章中至少包含使用者们了解的一个单词, 那么我们说这篇文章是可读的(我们称文章a包含单词b,当原创 2017-02-09 21:43:25 · 311 阅读 · 0 评论 -
bzoj1212 L语言 trie
这题本来是想用AC自动机做的,结果发现好水啊,直接上那个trie都能过,,就是每一个单词去匹配那个文章。。。跑的还更快。。#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define f原创 2017-02-15 20:55:30 · 333 阅读 · 0 评论 -
bzoj2754&JZOJ2834【SCOI2012】喵星球上的点名 AC自动机+STL
题意比较复杂,就不说了。感觉这题目拿来恶心人的。。连输入都要花费好大功夫。表示这种题目经典套路啊,一般来说直接上AC自动机,暴力把大串往小串上贴,然后直接计算答案就行了,但是这数据大小简直了。。算了算发现离散也没用,表示不会用STL,于是去网上膜了一波做法,一脸懵逼,勉强看懂,如果考试肯定切不了这题。听说正解是SA+主席树。code(超丑。。):#include<iostream>#include原创 2017-02-17 20:51:38 · 524 阅读 · 0 评论 -
bzoj 1875 矩阵乘法dp
DescriptionHH有个一成不变的习惯,喜欢饭后百步走。所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离。 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回。 又因为HH是个喜欢变化的人,所以他每天走过的路径都不完全一样,他想知道他究竟有多 少种散步的方法。 现在给你学校的地图(假设每条路的长度都是一样的都是1),问长度为t,从给定地 点A走到给定地点B共有多少条符原创 2017-02-19 15:17:16 · 419 阅读 · 0 评论 -
bzoj1007 [HNOI2008]水平可见直线
Description 在xoy直角坐标平面上有n条直线L1,L2,…Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为 可见的,否则Li为被覆盖的. 例如,对于直线: L1:y=x; L2:y=-x; L3:y=0 则L1和L2是可见的,L3是被覆盖的. 给出n条直线,表示成y=Ax+B的形式(|A|,|B|<=500000),且n条直线两两不重合.求出所有可见的直线原创 2017-02-28 15:44:53 · 181 阅读 · 0 评论 -
bzoj 3944 sum 杜教筛
题意,求1-n的欧拉函数和莫比乌斯函数之和。 裸的杜教筛,比较简单,直接做就好。但是存储的时候用了两个模拟链表,虽然空间没炸,但是很明显空间较大的时候会很大程度上影响时间,所以我理所当然的T了。 不得已用了一发Po姐的方法,用map,就会好一点,但是时间玄学,交了5遍过了3遍。。 真是玄学。。#include<cstdio>#include<cstdlib>#include<algorit原创 2017-02-19 21:38:17 · 356 阅读 · 0 评论 -
bzoj 1149 [CTSC2007]风玲Mobiles dfs
题意:给定一棵完全二叉树,可以交换某个节点的左右儿子,求最少交换多少次可以使所有的叶节点深度相差不超过1,且深度较大的叶节点都在深度较小的叶节点左侧(来自po姐)。题解:其实这题你看懂题目你就赢了。。。直接做。。这应该是CTSC中最水的一道了巴。dfs两遍,随便跑。然而并没有1A,因为空间开小了。。。#include<cstdio>#include<algorithm>#include<cstr原创 2017-02-19 22:23:27 · 284 阅读 · 0 评论 -
bzoj2176 Strange string 最小表示法
题意:给出一个字符串s(n<=10000000),求他的最小表示法 一开始发现SA或者SAM可以做好像,然而n<=1000w,word哥还是搞最小表示法把。。 最小表示法其实就是一个字符串的最小字典序循环同构的串。 可能你还是很懵比,好举个例子。 设S=bcda,那么S的循环同构串就是cdab,dabc,abdc,他的最小表示法就是abdc. 其实就是要找的一个i的位置,从这个i开始把S断原创 2017-02-11 08:43:37 · 349 阅读 · 0 评论 -
bzoj1087[SCOI2005]互不侵犯King
题意:给定n,k,在n*n个棋盘里放k个棋子,让他们不能互相攻击,有多少种方案,一个棋子可以攻击他的八个方向。题解:很久没打状压DP了,一脸懵逼,本来状压就不是很好,现在弱的一匹。。表示这题一脸不可做,不得已去膜了一波题解。 有一个很好的题解http://blog.csdn.net/qpswwww/article/details/34516641 这题主要是如果直接dp状态数会很大,那么我们就可原创 2017-02-20 21:00:41 · 328 阅读 · 0 评论 -
bzoj 2500 幸福的道路 动态规划+单调栈
题意:给出一棵树,每条边都有一个长度。我们规定每个点的权值为从该点开始走过的一条最长的路径的长度。 求一个最长的区间[l,r],使得[l,r]里面点权的最大值和最小值只差不超过m。 n<=1000000一开始看错题目了,结果卡了半天。。最后发现是一道大水题。 先求点权,直接DP求,经典模型啊。。随便写。 后面求出点权之后,单调队列就更简单了,随便搞。 然后等我切了以后看别人的题解才发现原创 2017-02-12 11:51:50 · 282 阅读 · 0 评论 -
bzoj 2286 SDOI2011 消耗战 虚树dp
题意就不说了。分析: 这题其实就是让你切代价最小的边使得k个点与根不联通,可以设一个和暴力的DP。设val[i]表示要让i和根断开的代价。很显然有f[i]=min(Σf[son],val[i])val[i]=max(len[i到fa[i]],val[fa[i]]);时间复杂度是O(N),加上询问以后就是O(NM),妥妥的超时。。一开始我还想着是不是要加上数据结构什么的,结果发现好像没有数据原创 2017-02-12 18:28:42 · 287 阅读 · 0 评论 -
bzoj 3611 [Heoi2014]大工程 虚树DP
题意就不说了,比较复杂,自己看吧。分析: 我还是naive了,居然想着直接做。。以后看见这种询问个数之和<=n的直接无脑上虚树。 至于虚树跟之前的那个消耗战差不多。但是dp就很复杂了,不好做,要把每个点单独 拿出来做。具体转移看标程吧。#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>原创 2017-02-12 22:18:55 · 248 阅读 · 0 评论 -
bzoj2734[HNOI2012]集合选数 状压DP
Description《集合论与图论》这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集中,则 2x 和 3x 不能在该子集中。同学们不喜欢这种具有枚举性 质的题目,于是把它变成了以下问题:对于任意一个正整数 n≤100000,如何求出{1, 2,…, n} 的满足上述约束条件的子集的个数(只需输出对 1,000,000,001 取模的结果原创 2017-02-21 12:21:46 · 231 阅读 · 0 评论 -
bzoj2006NOI2010超级钢琴 主席树+优先队列
题意就不说了。 我一开始想的是把每一位看做最后的节点,然后二分这个点做为右端点的序列长度,用主席树随便维护一下。然而这个序列不是有序的,不满足二分性。。 我们用优先队列处理一下,同样是把每个端点看作右端点,然后在i-r-1到i-l这段区间里找K小,用优先队列记录一下,找到k个就结束了,时间复杂度klogn。code(万年RE):#include<bits/stdc++.h>#define fo原创 2017-03-01 22:09:50 · 330 阅读 · 0 评论 -
bzoj1011 [HNOI2008]遥远的行星
Description 直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j= Mi*Mj/(j-i) 其中A为很小的常量,故直观上说每颗行星都只受到距离遥远的行星的作用。请计算每颗行星的受力 ,只要结果的相对误差不超过5%即可.Input 第一行两个整数N和A. 1<=N<=10^5.0.01< a < =0.35,接下来N行原创 2017-03-02 16:21:21 · 265 阅读 · 0 评论 -
bzoj1806[ioi2007]Miners 矿工配餐
Description现有两个煤矿,每个煤矿都雇用一组矿工。采煤工作很辛苦,所以矿工们需要良好饮食。每当一辆食品车到达煤矿时,矿工们便会产出一定数量的煤。有三种类型的食品车:肉车,鱼车和面包车。 矿工们喜欢变化的食谱。如果提供的食品能够不断变化,他们的产煤量将会增加。每当一个新的食品车到达煤矿时,矿工们就会比较这种新的食品和前两次(或者少于两次,如果前面运送食品的次数不足两次)的食品,并且: • 如原创 2017-02-22 20:35:14 · 342 阅读 · 0 评论 -
bzoj4300 绝世好题
真·绝世好题。。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int n,a[100];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { int tmp原创 2017-02-22 22:20:25 · 198 阅读 · 0 评论 -
bzoj3670 NOI2014 动物园 kmp
Description近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。某天,园长给动物们讲解 KMP 算法。园长:“对于一个字符串 S,它的长度为 L。我们可以在 O(L)的时间内,求出一个名为 next 的数组。有谁预习了 next 数组的含义吗?”熊猫:“对于字符原创 2017-03-02 17:27:50 · 263 阅读 · 0 评论 -
bzoj1601[Usaco2008 Oct]灌水
DescriptionFarmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记。把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库。 建造一个水库需要花费wi(1<=wi<=100000),连接两块土地需要花费Pij(1<=pij<=100000,pij=pji,pii=0). 计算Farmer John所需的最少代价。Input*第一行:一个数原创 2017-03-02 21:54:47 · 279 阅读 · 0 评论 -
bzoj1602 [Usaco2008 Oct]牧场行走
没什么好说的,裸树上点对距离,用lca,nlogn求解,结果因为主席树打多了。。统计答案的时候写成f[x]+f[y]-f[lca]-f[fa[lca]],这里存储信息方式不同,一个是点,一个是边,所以不能减去fa,而是2*f[lca]。#include<cstdio>#include<algorithm>#include<cstring>#define fo(i,a,b) for(int i=原创 2017-03-02 22:30:07 · 194 阅读 · 0 评论 -
bzoj2223 [Coci 2009]PATULJCI
题意就不说了。。直接上主席树。。无脑。。#include<cstdio>#include<algorithm>#include<cstring>#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--)using namespace std;int n,原创 2017-02-23 17:22:26 · 337 阅读 · 0 评论 -
bzoj3585 mex
题意就是题目。分析:直接上主席树,存储每个数出现的最右位置。。随便做。#include<cstdio>#include<algorithm>#include<cstring>#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--)using namesp原创 2017-02-23 22:00:12 · 262 阅读 · 0 评论 -
bzoj1001 spfa
const maxn=2000009; var s,t,n,m,e:longint; last,d,state:array[0..maxn] of longint; side:array[1..maxn*3] of record x,y,z,next:longint; end; v:array[0..maxn] of boolean;原创 2017-02-23 22:35:03 · 245 阅读 · 0 评论 -
bzoj1599【Usaco2008 Oct]笨重的石子
什么鬼?直接暴力啊,dp个毛线啊!!#include<cstdio>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;typedef long long ll;int n,m,k;ll a[1000000];int main(){ scanf("%d%d%d",&n,&m,&原创 2017-03-03 12:43:17 · 246 阅读 · 0 评论