
bzoj
bestFy
世界上最最最渣的oier.
展开
-
bzoj2829: 信用卡凸包(凸包)
题面在这里做法//最近怎么…..手贱连连啊..有点不妙啊;_;思路是将所有圆心求一个凸包,再加上圆的周长。记错误:1.注意精度问题。 2.注意1不要写成i。代码#include<bits/stdc++.h>#define rep(i,x,y) for (int i=(x);i<=(y);i++)#define ll long long#d...原创 2018-05-08 16:59:37 · 443 阅读 · 0 评论 -
bzoj1818: [Cqoi2010]内部白点
题面在这里吐槽:现在做题再也不能想也不想就看题解了!!!QAQ!!否则我可能就没有未来了QAQ 好了不要管上面的吐槽qaq题意:平面上有n个黑点,剩下的整点全部是白点。 一个白点如果上下左右各至少有一个黑点就称内部白点。 现在每一次操作可以将所有的内部白点变成黑点,一直操作到不能操作为止。 问最后有多少的黑点。如果无法停止操作输出-1. n<=105,坐&原创 2018-01-31 18:32:02 · 377 阅读 · 0 评论 -
bzoj1012: [JSOI2008]最大数maxnumber
题面在这里题意:给一个初始为空的序列,两种操作 1、 查询操作。语法:Q L 功能:查询当前数列中末尾L 个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。 2、 插入操作。语法:A n 功能:将n加 上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取 模,将所得答案插入到数列的末尾。做法:裸原创 2018-01-06 12:49:12 · 282 阅读 · 0 评论 -
bzoj1821: [JSOI2010]Group 部落划分 Group
题面在这里题意:平面上n个点要划分为k个部落,定义部落间的距离为部落中最近的两点距离。 现在要求部落间最近的距离最远。求这个距离。做法:显然可以二分答案。 二分这个最近的距离,于是任意两点距离比它还小的都要在一个部落里。 然后用并查集数一下连通块个数即可。 时间复杂度O(n2×log)O(n^2\times{log})代码:/**************原创 2018-01-05 16:41:20 · 271 阅读 · 0 评论 -
bzoj3038: 上帝造题的七分钟2
题面在这里题意:给一个序列,两种操作: 1. 区间开平方(下取整) 2. 区间求和做法:有一个性质就是,一个数不停开平方最多开log次就会变成1. 所以我们可以对区间保存一个tag表示这个区间有没有不是0或1的数,如果区间全是0或1就不用往下更新。 然后大概就可以log^2了吧qaqaq。易错点:注意开long long。我原来a[]没开long lon原创 2018-01-05 16:15:20 · 375 阅读 · 0 评论 -
bzoj1295: [SCOI2009]最长距离
题面在这里题意:给一个n*m地图,有的格子有障碍。只能上下左右走。假如两个格子能够互相到达,那么他们的距离为它们的欧几里得距离。 问你拿掉最多k个障碍,最大的两点间距离时多少。n,m做法:发现n和m很小。 于是我们考虑暴力枚举一个点,从这个点spfa求出到所有点的最少要拿掉的障碍数,然后暴力判断每个点是否满足要求,满足即可更新答案。代码:/***********原创 2018-01-05 15:09:36 · 273 阅读 · 0 评论 -
bzoj1108: [POI2007]天然气管道Gaz
题面在这里题意:平面上2*n的点前n个和后n个两两配对,需要的管道长度是两个点的曼哈顿距离,问最少需要的管道长度。做法:sb题啊。 发现怎么配都一样= =(自己画几个图就知道了) 于是直接算就好了。代码:/************************************************************* Problem: bzoj原创 2018-01-05 14:06:17 · 373 阅读 · 0 评论 -
bzoj1106: [POI2007]立方体大作战tet
题面在这里题意:给2*n个编号为1~n的数,编号为i的都有两个,每次可以交换相邻两个数,如果有两个相同的数相邻就消去。并且剩下的数字会合并,有可能会产生连锁反应。 问最少几次操作能把所有的都消去。做法:贪心。 一个非常直接的想法,每次遇到一个数,假如之前出现过就不断交换和之前那个抵消。 正确性证明如下: 1. 假如有这样的情况 1 2 …. 2 1,显然先消去2比先原创 2018-01-05 13:43:25 · 256 阅读 · 0 评论 -
bzoj4391: [Usaco2015 dec]High Card Low Card
题面在这里题意:有2*n张牌,编号为1~2n,两个人各拿n张。现在A知道B n轮出的牌。 规定前1~i轮编号大的人胜,后i+1~n轮编号小的人胜。 问选择恰当的i,A最多能胜几轮。做法:记f[i]表示前i轮中A最多能胜的轮数,g[i]表示后i~n轮中A最多能胜的轮数 答案就是max(f[i]+g[i+1])(0=i=n)max{(f[i]+g[i+1])}(0现在原创 2018-01-02 16:04:54 · 297 阅读 · 0 评论 -
bzoj4653: [Noi2016]区间
题面在这里题意:给出一堆区间,要你选出m个区间使得至少一个点都被覆盖,并且此时花费的代价是最长的区间长减去最短的区间长。 问最小的代价。做法:我们考虑一中区间的入场顺序,按照长度从小到大。 我们选出的区间肯定是连续的一段,于是我们用两个指针维护开头和结尾。 进来一段区间,就在线段树上把这一段加一,然后假如某一时刻,有一个点到达了m,就说明这连续一段的区间是可行的就可以原创 2018-01-05 11:11:42 · 255 阅读 · 0 评论 -
bzoj3674: 可持久化并查集加强版
题面在这里题意:3种操作 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0做法:可持久化并查集,相当于每个时间建一棵线段树维护每个数的fa[]。 这题我用了按秩合并。这么理解,把并查集看成很多棵树,先不考虑路径压缩。 如果两个节点要合并,相当于把他们所在的两棵树合并。假定两个树的根节点为fx,fy原创 2017-12-29 14:31:35 · 271 阅读 · 0 评论 -
bzoj3673: 可持久化并查集 by zky
题面在这里题意:3种操作 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0做法:可持久化并查集,相当于每个时间建一棵线段树维护每个数的fa[]。代码:/************************************************************* Problem:原创 2017-12-29 12:55:37 · 333 阅读 · 0 评论 -
poj2774 Long Long Message
题面在这里题意:求两个长串的最长公共子串。做法:将两个串拼接起来,中间用一个没有出现过的字符连接。 于是两个字符串的最长公共子串就是这个长串两个后缀的lcp,其中这两个后缀的起点分别在两个串里。 所以跑这个长串的SA就可以了。代码:/*************************************************************原创 2018-01-13 17:34:54 · 210 阅读 · 0 评论 -
bzoj2741: 【FOTILE模拟赛】L
题面在这里题意:给一个数列,然后m个询问,每次询问一个区间[l,r]内异或值最大的数对,输出它们的异或值。做法:分块+可持久化trie。我们可以在log复杂度内求出,一个区间内任意一个数和一个定值的最大异或值。 可以用可持久化trie维护。 但是现在两个数都是不定的。考虑分块,f[i][j]表示第i个块左端点到j这段区间的数对的最大异或值。 则递推式为f[i][j] = max(f[i][j-原创 2017-12-28 17:34:53 · 308 阅读 · 0 评论 -
bzoj1050: [HAOI2006]旅行comf
题面在这里题意:给一个图,每条边有边权。 给一个s和t,如果s和t之间没有路径输出IMPOSSIBLE,否则输出路径上最大边和最小边的比值的最小值。做法:你把边从小到大排序。那么对于一个最小值x,我们从x开始从小到大加边,并查集维护,直到s和t联通,那条最后一条边权比上x就是这个答案。 于是我们暴力枚举最小边是什么,每次更新答案即可。代码:/**********原创 2018-01-12 22:07:30 · 236 阅读 · 0 评论 -
bzoj4999: This Problem Is Too Simple!
题面在这里题意:给一棵树,现在支持以下两种操作: 1. C i x(0<=x<2^31) 表示将i节点的值改为x。 2. Q i j x(0<=x<2^31) 表示询问i节点到j节点的路径上有多少个值为x的节点。做法:树链剖分+动态开点线段树。 每个数值都维护一棵线段树。 不想离散可以用map偷懒。。。代码:/*****************************************原创 2018-01-03 20:58:44 · 280 阅读 · 0 评论 -
bzoj4373: 算术天才⑨与等差数列
题面在这里题意:给一个序列 每次会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列。 当然还会不断修改其中的某一项。做法:吐槽一下= =辣鸡码农。。。一个区间要满足能成公差为k的等差数列,对于k=0和l=r的特判, 其余需要满足3个条件。 1.区间max-min = (r-l)*k 2.区间任意相邻两数差的绝对值的gcd能被k整除 3.区间没有相同的数然原创 2018-01-03 20:09:20 · 409 阅读 · 0 评论 -
bzoj3123: [Sdoi2013]森林
题面在这里题意:给一个森林,森林有n个节点m条边。 现在有两种操作: 1.Q x y k 表示询问x-y这条链上点权的第k小。保证x,y在同一个连通块里。 2.L x y 表示链接x,y两点。保证x,y在不同的连通块里。 要求强制在线,last表示上一次的答案,每次x,y,k都要异或last.初始为0.做法:权值第k小想到主席树。(发现和上一题基本一样除了连接两个点原创 2018-01-08 15:06:46 · 412 阅读 · 0 评论 -
bzoj3109: [cqoi2013]新数独
题面在这里题意:给一个空的数独,告诉你每个9宫格内相邻格子数的大小关系,求这个数独。做法:搜索+剪枝。 剪枝就是最显然的剪枝,碰到不符合条件的就不搜下去。易错点:cmp函数返回的是1和-1,我原来定义了bool,然后就gg了。代码:/********************************************************原创 2018-01-17 12:23:25 · 440 阅读 · 0 评论 -
bzoj1085: [SCOI2005]骑士精神
题面在这里题意:有一个5*5的01阵,有一个位子是空用*表示。每个0或1都可以走马步到空格子。 现在给一个初始的矩阵,要变成下面这个状态。 11111 01111 00*11 00001 00000 问最少的步数。若超过15步则输出-1.做法:一开始打了一个状压bfs。然后光荣地没跑过样例= = 正解是A*。观察到有一个条件叫做超过15步就输出-1,于是我们原创 2018-01-17 13:33:18 · 280 阅读 · 0 评论 -
bzoj1112: [POI2008]砖块Klo(splay)
题面在这里做法枚举每长度为 kkk 的段寻找中位数即可。splay维护。代码=> 主要是想说这一点,由于计算的必要,相同的数不能合并到一个节点,否则之后调用 sum[ch[x][0]]/sum[ch[x][1]] 的时候会漏算和节点 xxx 相同的数。#include<bits/stdc++.h>#define rep(i,x,y) for (int...原创 2018-04-27 14:08:40 · 848 阅读 · 0 评论 -
bzoj4836 [Lydsy1704月赛]二元运算(分治FFT)
题面在这里做法分治+FFT优化。 按照值域分治即可。代码=> 提交了整整一页,一直在查TLE和测速 =.= => 先是一个奇怪卡精(?),复数类里long double改成double就能过,否则会T。不清楚为什么( => 其次发现自己的FFT实在跑得太慢了。。。好像是我写FFT的姿势不对,于是稍微改动了一下。似乎变快了1000+ms..#inc...原创 2018-04-26 21:44:11 · 265 阅读 · 0 评论 -
bzoj4388: JOI2012 invitation(线段树+堆)
题面在这里 代码题。。题意有 nnn 个男生, mmm 个女生。给出 kkk 条关系,每个关系形如 ai,bi,ci,di,tiai,bi,ci,di,tia_i,b_i,c_i,d_i,t_i ,表示 [ai,bi][ai,bi][a_i,b_i] 的男生和 [ci,di][ci,di][c_i,d_i] 的女生是好朋友,幸福指数为 titit_i。现在选择了一个男生 CCC 加入...原创 2018-03-13 15:14:52 · 343 阅读 · 0 评论 -
bzoj2815: [ZJOI2012]灾难
题面在这里题意:有一个n个点的关系图,u->v有边表示u能吃v。 去掉某个点以后会有一些点没有东西吃,每个点的灾难值定义为如果去掉这个点,会没有东西吃的点的个数。 求每个点的灾难值。 n做法:好妙啊QAQ..首先这个不是树很难受,如果是一棵树,就可以直接计算子树大小得到答案了。 我们考虑把图化成一棵树。 观察到一个奇妙的性质,一个点u,如果和很多点v1,v2…原创 2018-01-28 14:47:18 · 430 阅读 · 0 评论 -
bzoj1880: [Sdoi2009]Elaxia的路线
题面在这里题意:求一个无向图中,两个点对最短路的最长公共路径。 注意给出的x1,y1和x2,y2不一定是从x走到y,可以是y走到x。做法:首先无脑跑最短路QAQ.. 事实上,我们要把以x1,y1,x2,y2为起点的最短路都跑出来。然后对于一条边u,v,边权为w,假如dis[s-u]+dis[v-t]+w == dis[s-t],则u-v这条边是在s-t的最短路上的。原创 2018-01-28 14:27:20 · 328 阅读 · 0 评论 -
bzoj3659: Which Dreamed It
题面在这里题意:有n个房间,每个房间有若干把钥匙能够打开某个房间的门。 最初你在房间1。每当你到达一个房间,你可以选择该房间的一把钥匙,前往该钥匙对应的房间,并将该钥匙丢到垃圾桶中。你希望最终回到房间1,且垃圾桶中有所有的钥匙。 求方案数。两组方案不同,当且仅当使用钥匙的顺序不同。 每把钥匙都是不同的。 房间数小于等于100,钥匙数小于等于200000.做法:我做的原创 2018-01-28 14:15:16 · 454 阅读 · 0 评论 -
bzoj3083: 遥远的国度
题面在这里题意:给一棵树,每个点上有点权。 三种操作: 1.换根 2.链覆盖 3.以当前的根查询某子树内的最小值做法:当然不用真的去换根= = 可以直接令任意一点为根,比如1。 发现一条链是不会发生改变的,于是链覆盖操作可以直接树剖+线段树修改。 对于查询操作,我们分类讨论。 1.假如当前根和x相同,就直接取整棵树的最小值。 2.假如当前根在x的子树(以1原创 2018-01-10 14:58:39 · 351 阅读 · 0 评论 -
bzoj3033: 太鼓达人
题面在这里题意:有一条长度为m的01串(首尾相连),已知其中连续的长度为k的m个01串互不相同,求出m的最大值和字典序最小的01串。做法:将k位二进制数当做点,将k+1位二进制数当做边,发现该图为欧拉图,m=2k" role="presentation" style="position: relative;">m=2km=2km=2^k; 第二问由于是欧拉图,直接大暴力很快就原创 2018-01-26 16:51:38 · 522 阅读 · 0 评论 -
bzoj1833: [ZJOI2010]count 数字计数
题意:给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次。做法:显然是数位DP,我来写个dfs题解吧首先区间[a,b]内的数量可转化为[1,b]-[1,a-1]。考虑求一个数码出现的次数,比如1出现的次数。我们首先想爆搜怎么写,然后加一个记忆化即可。对于一个长度为len的数,从高位到低位枚举它每一位上的数字,然后计算1出现的次数。哪些东西要原创 2018-01-09 22:45:37 · 350 阅读 · 0 评论 -
bzoj4319: cerc2008 Suffix reconstruction
题面在这里题意:给出sa[]数组,求原字符串,字符都是’a’~’z’所有小写字母。做法:qaq此题乱入。。。 其实是个贪心,涉及到了一点点的后缀数组。考虑两个后缀suf(p1)" role="presentation" style="position: relative;">suf(p1)suf(p1)suf(p1)和suf(p2)" role="presentati原创 2018-01-25 18:28:17 · 293 阅读 · 0 评论 -
bzoj3172: [Tjoi2013]单词
题面在这里题意:给n个单词,问每个单词在所有单词中出现了多少次。做法:后缀数组。(ac自动机也可以qwq) 首先把所有串用不同的字符拼接起来,跑大串的sa。 然后对于每一个单词,假设它的长度为len,暴力找到h[i]>=len的最左边和最右边的位置l,r,然后这个单词出现的次数就是这一段的长度r-(l-1)+1。 (其实暴力应该是水过的?qaq,正解大概搞个二分什么的就行。。原创 2018-01-25 18:55:39 · 274 阅读 · 0 评论 -
bzoj1834: [ZJOI2010]network 网络扩容
题面在这里题意:给定一张有向图,每条边都有一个容量C和一个扩容费用W。这里扩容费用是指将容量扩大1所需的费用。求: 1. 在不扩容的情况下,1到N的最大流; 2. 将1到N的最大流增加K所需的最小扩容费用。做法:第一问是裸的最大流。 第二问考虑在第一问的残量网络上继续建图。 在原来每条边的基础上建一条容量为inf,费用为这条边的扩容费用的边。 然后再新建一个源原创 2018-01-17 23:13:44 · 334 阅读 · 0 评论 -
bzoj1066: [SCOI2007]蜥蜴
题面在这里题意:一个n*m的网格中,有一些格子有石柱,石柱的高度为1~3. 有一些石柱的顶上有蜥蜴,蜥蜴每次可以跳到距离不超过d的石柱上,或者跳到界外。 蜥蜴跳一次,它所在的石柱的高度就减一,如果某个石柱的高度为0了,石柱就消失,以后蜥蜴不能跳到这里。 现在要使得剩下无法逃脱的蜥蜴数最少。做法:总是自己想不到建图方式然后看了题解顿时恍然大悟的感觉= = 好吧这题我还是想原创 2018-01-17 18:52:04 · 262 阅读 · 0 评论 -
bzoj1934: [Shoi2007]Vote 善意的投票
题面在这里题意:有n个小朋友投票,1表示赞成0表示不赞成。有m对朋友关系。 现在给定n个小朋友的本来意愿。 定义冲突数为和自己本来意愿不同的投票数量,加上投不同票的朋友对数。 求最小的冲突数。做法:这道题一眼看就是网络流最小割。 然后想了很长时间没想出怎么建图qaq。。看来是要加强练习了呜呜对于每一个小朋友x,本来是1的连S->x,本来是0的连x->T。 每一原创 2018-01-17 15:44:15 · 264 阅读 · 0 评论 -
bzoj4012: [HNOI2015]开店
题面在这里题意:给一棵树,每个点上有点权,边上有边权。 每次询问一个u,l,r,输出点权在[l,r]范围内的点到u的距离和。 强制在线。做法:考虑一棵树上所有点到一个点的距离和怎么求。 不难发现应该等于所有点的深度和+点数×u的深度-2×所有点与u的lca的深度和。 于是问题就在于求所有点与u的lca的深度和。 对于这个问题,我们可以先把每个点到根的路径都打标记,原创 2018-01-08 19:23:24 · 320 阅读 · 0 评论 -
bzoj2321: [BeiJing2011集训]星器
题面在这里题意:有一个n*m的方格,每一格有a[i,j]个星。 现在每次可以取同一行或同一列的两颗星,让他们向中心移动一格,并且获得他们中间隔的区域数个能量。 给定最终状态,问最多可能获得的能量。做法:首先“最多”这个东西是来忽悠你的。 发现获得的能量是一定的。行列独立。 然后我们来推一波式子。 假设有一行是这样的: 1 0 0 0 0 … 0 0 1 最左边原创 2018-01-17 14:30:57 · 378 阅读 · 0 评论 -
bzoj3246: [Ioi2013]Dreaming
题面在这里题意:给一个森林,要你用边权为w的边把森林连成一棵树,问树的最小直径。做法:肯定是将每一棵树的中心(直径的中点)连起来。 然后你肯定是连成一个菊花图最优。 并且菊花图最中间那个点肯定要放直径最长的那棵树。 于是答案等于 1.每个树的直径的最大值 2.最大半径+次大半径+w 3.次大半径+第三大半径+w+w 这三种的最大值。易错点:保存前三大的时候初始值要赋为-1e18,亲测,原创 2018-01-03 12:22:40 · 313 阅读 · 0 评论 -
bzoj4010: [HNOI2015]菜肴制作
题面在这里题意:求一个n的排列,有一些限制做法:注意这个不同于求字典序最小。 一个例子是n=4,限制有<3,1>,<2,4> 答案应该是3124 如果是字典序最小是2431我们发现编号小的尽量在前,相当于将序列反过来以后,字典序要最大。 这个很好理解,因为假如你反着来字典序没有最大,肯定会有一个较小的数在后面。 而事实上是可以将它提前的。所以原问题转化成了反向建图,求字典序最大的拓扑序。用原创 2017-12-27 17:58:05 · 305 阅读 · 0 评论 -
bzoj1485: [HNOI2009]有趣的数列
题面在这里做法: 我们可以将一个奇数项的数看成入栈,偶数项的数看成出栈,则每一个合法的出栈入栈序对应一个合法解。 所以就是卡特兰数。fn=Cn2nn+1f_n=\frac{C_{2n}^n}{n+1}。 然后由于不保证模数pp是质数,所以需要暴力分解质因数。/************************************************************* Pr原创 2017-12-15 12:46:56 · 212 阅读 · 0 评论 -
bzoj1053: [HAOI2007]反素数ant
题面在这里 做法: 这题嘛看起来很恐怖啊= =n居然有20亿 然而其实我们只需枚举一下质因子的个数,而这个枚举量是很小的,因为前10个质数相乘就已经超过20亿了吧、、、 于是我取了前12个质数。 暴力dfs一下就行。/************************************************************* Problem: bzoj 1053 [H原创 2017-12-15 00:46:06 · 222 阅读 · 0 评论