BZOJ
青禾script
这个人太弱,所以也不知道能写什么23333
展开
-
[BZOJ 1050] HAOI 2006 旅行comf · Kruskal
网上有非常吊炸天的LCT做法并不会23333用Kruskal来做的思路比较神奇但是很简单首先把所有的边按照权值排序顺次枚举每一条边,从这条边开始做Kruskal,直到S和T联通,这就是一个可行解,然后判断出分数最小的一个解 复杂度O(M^2)与普通的kruskal代码略有不同,条件稍加修改#include #include #include #include usi原创 2017-07-25 16:20:46 · 303 阅读 · 0 评论 -
[BZOJ 1010] HNOI 2008 玩具装箱toy · 斜率优化DP
第三次做这题终于A掉了,了结了一个心病。首先还是列出裸的DP方程:表示当前这个容器的末尾是第i个,上一个的末尾是第j个,si是对玩具长度做的前缀和。那么用斜率优化的话,我们还是设x>y且x优于y,可以得到这个式子:然后为了方便化简,我们设Ti=i+Si,P=L+1,就可以得到这个式子:这样就可以直接斜率优化搞了,如果斜率优化有不理解的可以看我的BZOJ 3156的题解,还是原创 2015-09-11 12:45:15 · 463 阅读 · 0 评论 -
[BZOJ 3156] 防御准备 · 斜率优化DP
跟佣神(orz)请教了一番大概会了基础的斜率优化:基础的斜率优化一般就是两种情况:(斜率式子)i 且i单调减。对于第一种情况,也就是斜率单调增的,维护队头很好理解,维护队尾的时候,因为我们要保证斜率递增,所以如果(q[r],q[r-1])的斜率大于(i,q[r]),那么我们就把r给踢掉。第二种情况就直接反过来想就可以了。对于这题:f[i]表示在第i个点上放守卫塔,裸的方程为原创 2015-09-10 22:15:45 · 399 阅读 · 0 评论 -
[BZOJ 2190] SDOI 2008 仪仗队 · 欧拉函数
首先要知道的是,对于两个点(x1,y1) (x2,y2),如果他们的连线上不存在别的整点,也就是能直接互相看见,那么应该满足gcd(x1-x2,y1-y2)=1。对于这道题目,也就是求对于左下的那个点有多少个点死能直接看见的。为了方便,我们把左下的点设为(0,0),对于第0行和第0列,只有(0,1)和(1,0)是能直接看见的;对于剩下的1~n-1行和1~n-1列,原创 2015-09-09 14:45:39 · 533 阅读 · 0 评论 -
[BZOJ 1899] ZJOI 2004 Lunch 午餐 · 动态规划
按吃饭时间降序排序,然后动归,状态想到了就很简单了。#include #include #include #include using namespace std;const int N=205;struct arr { int x,y;}a[N];int n,f[N][N*N],s[N];bool cmp(const arr A,const arr B){ retu原创 2015-08-12 08:10:04 · 1188 阅读 · 0 评论 -
[BZOJ 1013] JSOI 2008 球形空间产生器sphere · 高斯消元
预处理以后就是高斯消元模板了,而且还只有唯一解。。。n=2时,设球心是(x,y),则对于任意两个球面上的点(a,b) (c,d),有,化简以后把每两个相邻的点做成一条方程,n+1个点就构成了n个方程。然后就高斯消元搞起。然后就没了。#include #include #include #include #include using namespace std;#defi原创 2015-07-06 19:32:06 · 735 阅读 · 0 评论 -
[BZOJ 2083] Poi 2010 Intelligence test · 二分
一开始以为是个神题后来发现是个大水题。。。next[i][j]表示数字i在原序列中出现第j次的位置,now用来记录对于当前的b[i],最小的合法位置是多少。每次二分更新now,如果now>n说明在原序列中没有合法的b[i]存在,直接退出。二分必须要手写,因为vector里用lower_bound返回的并不是下标值而是迭代器(具体是什么我也不清楚)。PS:机房小伙伴用倍增的方法写但是超时原创 2015-06-12 22:00:15 · 776 阅读 · 0 评论 -
[BZOJ 2738] 矩阵乘法 · 分块
标算整体二分,然而窝太弱了并不会做。分块大法好:狠狠点我我们把n*n个数排序,然后从小到大插入矩阵,每次插n个,用前缀和维护每个子矩阵当前已经填了多少个数。查找的时候 对于每个询问,如果子矩阵里的数已经超过了k个,说明答案在当前插入的这n个数里,倒着查找即可。用链表维护询问,已经出解的直接跳过。因为每个询问最多会查n次,所以复杂度O(nq),然而如果用树状数组代替前缀和维护的话原创 2015-06-14 13:59:42 · 518 阅读 · 0 评论 -
[BZOJ 2438] 中山市选2011 杀人游戏 · Tarjan
一开始想到用并查集直接求联通,但是这样貌似并不可行。。。每调查一个人,都会增加1/n的被杀概率,所以要尽量少调查人。如果我们调查了一个人,那么和他认识的人我们全都能知道,以此类推,向下的人都可以知道,所以我们只要求入度为0的点的个数,这些人我们只能通过直接询问他才能知道是不是杀手,另外的人都可以通过这些人知道。对于一个环里的人,我们只要知道一个点就能摸清所有点,所以先Tarjan缩环。原创 2015-06-19 15:22:31 · 574 阅读 · 0 评论 -
[BZOJ 1461] 字符串的匹配 · KMP & 树状数组
大意是给你两个序列A和B,要求出A中有多少段和B长度相等的连续序列G满足,G和B中位置一一对应的每个数分别在G和B中的排名都相同。原创 2015-07-02 23:07:21 · 1173 阅读 · 0 评论 -
[BZOJ 2654] tree · 二分答案
根据MST算法的性质,每次选权值最小的边,所以我们可以给白边加上或减去一个权值k,令白边被少选或者多选,二分k即可。PS:机房里大神突然讨论起一个好像很有道理但实际上并没用什么卵用的问题:如果当某一个权值有很多条白边和黑边,如果加上一个k的时候只选到了need-1条边,而加上k+1的时候会选到need+1条边,怎么办? 一开始好像觉得这个问题很神,但是突然发现很扯有没有啊!这个时候白边和黑原创 2015-06-11 21:12:57 · 822 阅读 · 0 评论 -
[BZOJ 3040] 最短路(road) · 堆优化dijkstra
堆优化dijkstra写法很多,我用的是系统堆priority_queue,见上一篇blog这题空间卡的太紧了#include #include #include #include using namespace std;#define ll long long const int M=10000005;const int N=1000005;int node[M],nx原创 2015-09-15 12:17:09 · 868 阅读 · 0 评论 -
[BZOJ 2079] Poi 2010 Guilds · 思路题
大意就是给你一个无向图,把图上的点染成红黑色,要求红色点要至少和一个黑色点相连,黑色点同理。那么如果我们有一个联通块,可以把它先做成一棵生成树,那么奇数层的染红色,偶数层的染黑色,就可以满足题意。那么不满足情况的条件就是某个联通块只有1个点。原本可以用并查集处理出每个联通块有多少个点然后判断,但实际上就是杀鸡用牛刀了。。。(好吧其实只是我爆了系统栈)我们只需要知道是否存在大小为1的原创 2015-11-05 17:11:15 · 689 阅读 · 0 评论 -
[BZOJ 1597] Usaco2008 Mar 土地购买 · 斜率优化DP
拿到手的时候根本想不到是斜率优化。。。然而思路太神了。对于两块地x1*y1 x2*y2,如果x1这样我们可以得出平方级别的DP方程:现在开始斜率优化:假设j>k且j优于k,那么满足化简得到然后就随便写写呗~虽然各种奇葩错误WA了无数次#include #include #include #include using namespace std;#defin原创 2015-09-18 20:46:07 · 1359 阅读 · 0 评论 -
[BZOJ 1029] JSOI 2007 建筑抢修 · 贪心+堆
这题很类似线段覆盖和工作安排,因此考虑用贪心,但是贪心肯定是会被卡的,所以考虑优化。假设已经花费了now个单位时间,那么对于当前t号建筑,有两种情况:1.now+t.cost2.找到之前已经修过的建筑中,花费时间最多的p号建筑,如果p.cost>t.cost,那么再判断一下用t来替换p是否可行,即now+t.cost-p.cost这个的意义就相当于线段覆盖中,把t和p分别看成两条线原创 2017-07-23 16:17:30 · 342 阅读 · 0 评论 -
[BZOJ 1025] SCOI 2009 游戏 · DP
emmmmm....想到要求最小公倍数的种数但是不会做啊qaq看了题解才明白....我好菜啊....orz:题解#include #include #include #include using namespace std;#define f(i,x,y) for (int i=x;i<=y;i++)const int N = 1005;long long p[N]原创 2017-07-22 11:52:53 · 218 阅读 · 0 评论 -
[BZOJ 1084] SCOI 2005 最大子矩阵 · 简单DP
比较魔性的题目 m具体转移方程可直接看代码#include #include #include #include using namespace std;#define f(i,x,y) for (int i=x;i<=y;i++)const int N=105;int n,m,k;int s[N][3],ans;int work1(){ int f[N][N]; m原创 2017-07-22 09:41:43 · 339 阅读 · 0 评论 -
[BZOJ 4300] 绝世好题 · 乱搞
想到了就是绝世傻题,想不到就是绝世神题。我属于后者orz:http://www.cnblogs.com/albert7xie/p/4963400.html#include using namespace std;const int N=1e5+10;int n,f[35],ans,x;int main(){ scanf("%d",&n); for (int i=1;i<原创 2016-04-23 19:09:43 · 501 阅读 · 0 评论 -
[BZOJ 1036] ZJOI 2008 树的统计Count · 树链剖分
拖了超级久的树链剖分终于真正写了一次。个人感觉就是,代码长只是因为函数有点多,总体思想和代码都很水,除了两边dfs外基本就是裸的线段树了。这不是一篇比较好的树剖的讲解代码真的很水啊。。。。#include using namespace std;#define f(i, x, y) for (int i = x; i <= y; ++ i)#define ff(i, x,原创 2016-04-06 17:12:27 · 435 阅读 · 0 评论 -
FFT
感觉也不是很会FFT,先把板子敲会再说吧= =两条模板题_(:зゝ∠)_UOJ #34#include #include #include #include using namespace std;#define f(i,n) for (int i=0;i<n;i++)const int N=4*1e5+5;const double pi=acos(-1);int原创 2016-02-04 23:39:44 · 482 阅读 · 0 评论 -
[BZOJ 1101] POI 2007 Zap · 莫比乌斯 & 分块 超详细题解
初学莫比乌斯反演,翻了大量的题解才搞懂这题,所以决定自己写一个最详细的题解,虽然有些繁琐,但是每一步推导都十分详细。神犇就不要嘲讽我了2333首先,我们定义题目即要求由于d是给定的,所以另可以转化为,到这个地方的话题中所给的d就已经再没有用处了,不要和下文中的d混淆。由莫比乌斯函数的性质即将原本的和式转化为 ①,注意这里的d和题目中给定的d不是指的同一个东原创 2016-02-05 11:12:28 · 2472 阅读 · 1 评论 -
[BZOJ 2301] HAOI 2011 Problem b · 莫比乌斯
这题和Bzoj1101有区别吗。。。囧。。。题解:狂戳这里#include #include #include using namespace std;const int N=1e5+5;int p[N],tot,check[N+10];int moblus[N],sum[N];int a,b,c,d,k,T,ans;void init(){ memset(check原创 2016-02-05 11:31:21 · 490 阅读 · 0 评论 -
[BZOJ 2194] 快速傅立叶之二 · FFT
求这个式子不好搞啊,然后我们就把B翻一下好了!变成然后我们发现,i+(n-1-i+k)=n-1+k,只与k有关了!然后我们另,这个就很显然一个裸的卷积了,FFT模板直接上所以最后对应的是C(0~n-1)对应D(n-1,n+n-2)。#include #include #include #include #include using namespace std;#原创 2016-02-04 23:56:52 · 778 阅读 · 1 评论 -
[BZOJ 2875 & Vijos 1725] NOI 2012 随机数生成器 · 矩阵乘法+快速乘法
矩阵乘法+快速乘法话说这种NOIP的题能出现在NOI里吓谁呢。。。x0=xx1=a*x0+c=a*x+cx2=a*x1+c=a^2*x+a*c+cx3=a*x2+c=a^3*x+a^2*c+a*c+c依次类推可以得到:xn=a^n*x+a^(n-1)*c+a^(n-2)*c+.....+a*c+c一开始笔者自己写了个矩阵结果挂掉了。。。然后看了一下CCF的题解觉得这个矩原创 2015-03-27 13:08:09 · 992 阅读 · 0 评论 -
填(wa)坑计划
好吧这些都是唔蒟蒻暂时没写出来又找不到错的错题。。。以后有心情再来填坑吧。。。BZOJ 3916#include #include #include #include #define N 2001000using namespace std;bool a,b,c;char s[N];int n,m;int main(){ int i; scanf原创 2015-06-13 12:25:15 · 610 阅读 · 0 评论 -
[BZOJ 3289] Mato的文件管理 · 莫队算法 & 树状数组
求不带修改的区间逆序对。莫队直接搞,每次转移是,所以总复杂度为.原创 2015-06-25 11:56:58 · 488 阅读 · 0 评论 -
[BZOJ 1875] SDOI 2009 HH去散步 · 矩阵乘法
矩阵乘法。这题等于是VJ1603的略强化版,就是多了个不允许走回头路,我们把一条双向边建成两条方向相反的单向边,和网络流的建边一个方法,然后直接二维扫一遍建矩阵,a[i][j]=1表示从i号边下一步可以走到j号边,然后就做矩乘啦~然后再二维扫一遍出答案啦~然后笔者就妥妥的TLE啦~当时看到TLE也是吓的不轻,实在是想不懂这种复杂度怎么会超时……然后就加了个读入优化顺便删掉iostream库原创 2015-04-01 23:00:49 · 559 阅读 · 0 评论 -
[BZOJ 1009] HNOI 2008 GT考试 · 动态规划+矩阵乘法+KMP
KMP预处理,矩阵乘法加速DP。刷了这么多矩阵乘法怎么感觉还是没什么进步。。。这题就算是一条比较好的用矩阵加速DP的题目了,感觉还是有点难度的可是为什么AC率那么高。。。难道是我太弱了么。。。还是就不要班门弄斧了,两个神犇的友链,写的很好:http://blog.csdn.net/popoqqq/article/details/40188173 http://blog.csdn原创 2015-04-04 11:37:20 · 856 阅读 · 3 评论 -
[BZOJ 1260] CQOI 2007 涂色paint · 动态规划
f[i][j]表示i到j的最少染色次数,然后就是细节处理。#include #include #include #include using namespace std;char st[55];int n,f[55][55];int main(){ cin>>st+1;n=strlen(st+1); memset(f,10,sizeof f); for (int i=1原创 2015-05-03 23:05:45 · 625 阅读 · 0 评论 -
[BZOJ 3111] ZJOI 2013 蚂蚁寻路 · 动态规划
BZOJ上没有题目,也是有点小坑……那么自己在草稿纸上画画写写就很容易发现,这题其实是要你在一个n*m大小的矩形中框出一个长城形状的子图,使得子图包含的权值和最大。框出图形的底和左右两边都是直的,上端是一高一低间隔排布,总共有2*k+1个(间隔k次)(如下图)那么从图中我们可以看出,其实是要求2*k+1个同底的子矩形相连组合起来取得的最大和。这种题目做的时候很容易往高纬度想啊,f[原创 2015-02-28 14:47:23 · 2356 阅读 · 0 评论 -
[BZOJ 1026] SCOI 2009 windy数 · 动态规划
参考了众神犇的题解后,AC了人生第一道数位DP。友链:http://hzwer.com/3503.html首先很容易可以想到,设calc(X)表示1..X闭区间内的windy数,那么答案肯定是calc(B)-calc(A-1)那么剩下就是如何计算calc(X)的问题了。预处理DP很水:f[i][j]表示i位的数,最高位数值为j的情况下有多少个windy数,那么递推式:f[i][j]原创 2015-02-26 21:05:57 · 614 阅读 · 0 评论 -
[BZOJ 2038] 2009国家集训队 小Z的袜子 · 莫队算法
今天看wzy大神的blog看见了莫队算法小结,心血来潮学了一下莫队算法的基础,没时间了啊还是打条模板题算了。 。。以前没学过莫队的时候听机房里的小伙伴说什么有个算法复杂度是,特别不理解,原来还真有这种算法。。。跪莫涛大神跪hzwer:我觉得这篇已经写得很好了 分块部分的思维值得研究#include #include #include #include #include u原创 2015-06-22 22:06:13 · 586 阅读 · 0 评论 -
[BZOJ 3791] 作业 · 动态规划
题面挺浅显的就不扯淡了...首先要知道这样一个性质:在一段区间内染色k次,每次是一段连续的,那么这个区间最多被分为2*k-1段(自己用草稿纸画画就出来了)在网上看到一些题解都写的不是很具体.....那么接下来就很好做了啊,f[i][j][k]表示 当前为第i本作业,1-i这段区间被染成了j段(注意不是染了j次),第i本作业染色后的状态为k(0或1)第i本作业由两种状态转移过来:原创 2015-02-05 12:30:04 · 480 阅读 · 0 评论 -
[BZOJ 3295] CQOI 2011 动态逆序对 · 分块 & 逆序对
最优算法CDQ分治或树套树,并不会做。分块大法好!要求每次删除前的逆序对数,可以转化成求每次删除一个数后的逆序对数。删除之前的对数,减去与当前要删除的数相关的逆序对数,就是每次的答案。我们可以把原序列a[]分成个块,每个块有个数。然后维护一个b[],b[]中的每一个块都是一个单调递增的序列。当前要删除的数为x,所在的块是k,那我们分两种情况做:1.对于k号块,直接在原创 2015-06-21 22:01:48 · 902 阅读 · 0 评论 -
[BZOJ 4096] Usaco2013 dec Milk Scheduling · 贪心
因为总共有n头牛,n个时间,所以我们从后往前枚举时间i,然后枚举所有的牛j,在所有可以选的牛中选一个价值最大的。#include #include #include using namespace std;const int N=100005;int n,t[N],v[N],ans,ad;bool f[N];int main(){ scanf("%d",&n); for原创 2015-06-20 23:05:51 · 882 阅读 · 0 评论 -
[BZOJ 1303] CQOI 2009 中位数图 · 数学
一个大于b的数和一个小于b的数可以互相抵消,所以我们用1和-1表示。从b向两边扩展,left[i]表示b左边抵消后有i个数比b小的可能数,right[i]表示b右边抵消后有i个数比b大的可能数。乘法原理得ans=sigma(left[i]*right[i]).#include #include #include #include using namespace std;cons原创 2015-06-19 10:18:30 · 1090 阅读 · 0 评论 -
树状数组初探
这两天笔者学习了一下树状数组,感觉真的是非常神奇的数据结构。(ORZ发明者)如果我们要求带修改的序列区间和,可以直接用数组或者用前缀和做,但是数组求和是O(N),前缀和修改是O(N),两者的劣势也非常明显了,这时——树状数组出现了,这可以形象地比喻为连接数组和前缀和的桥梁:树状数组修改和求和操作都是O(logN)级别的。原创 2015-03-18 15:25:55 · 435 阅读 · 0 评论 -
[BZOJ 1854] SCOI 2010 游戏 · 二分图匹配
二分图匹配。 左边的点表示属性,右边的点表示武器编号,每次读入将武器和对应属性之间连边,然后从1-10000枚举属性值,如果某个属性值没有匹配到武器那么就退出循环,输出上一个属性值。为了防止第10000属性也可以满足,要枚举到10001。另外笔者蒟蒻……第一遍交跑出个TLE,然后重新看了一下匈牙利发现,对于每个点记录一下上一次访问的位置(把vis数组从bool类型改成了int类型),这原创 2015-03-10 21:26:46 · 450 阅读 · 0 评论 -
[BZOJ 1072] SCOI 2007 排列perm · 动态规划
状压DP读入一个大数再取模和一位一位读取模效果是一样的,今年NOIP Day2T3就用到这个,当时笔者太蒟蒻了还不知道有这么神奇的东西……例如读入125再对7模,和(((1%7)*10+2)%7*10+5)%7得到的值是一样的。知道这个以后这题就很水啦~一开始读入的数字串为n,i对应的二进制数表示n里面我们取了哪几位,j表示这些位组合的值mod D以后的余数,f[i][j]就表示在这种状态原创 2015-03-07 19:14:51 · 456 阅读 · 0 评论 -
[BZOJ 2818] gcd · 欧拉函数
欧拉函数。随意感受一下,大概就是要你求这个东西:但是N 其中K是从[1,N]的素数。再稍微观察一下就又发现,其实这个公式后面半部分就是phi(i),那么公式就进一步简化为:求phi(i)可以用筛法O(N)预处理,后面枚举部分是O(K*(N/K))即O(N),所以总复杂度就是O(N),对于题中N#include #include #include #incl原创 2015-03-11 23:14:43 · 721 阅读 · 0 评论