杂
Hanks_o
一名。
展开
-
bzoj1002: [FJOI2007]轮状病毒
题目传送门 神题。 听说要用基尔霍夫矩阵了。 然而我并不知道那是什么东西。 看了看。膜了一发神牛。 真的强 然后上高精度。。代码实现:#include<cstdio>#include<cstring>#include<iostream>#include<cstdlib>#include<algorithm>using namespace std;struct node {原创 2017-09-24 16:19:37 · 343 阅读 · 0 评论 -
bzoj1086: [SCOI2005]王室联邦(贪心)
题目传送门 。解法: 子树大于等于B就直接那啥嘛。 其实不用管3B的因为你遇到B就分了。 然后剩下的也肯定不大于B,那么加起来也肯定不超过3B。 用一个栈记录下访问过的点就好了。 一开始写错了还挂了一次。 因为栈里有可能有别的省的点啊。代码实现:#include<cstdio>#include<cstring>#include<cst...原创 2018-03-03 10:10:34 · 270 阅读 · 0 评论 -
bzoj2697: 特技飞行(贪心)
题目传送门 。解法: 其实一个装备的贡献值其实就是第一次和最后一次的时间差乘贡献而已。那么贪心。先排序一遍。 贡献值最大的我们让他第一次和最后一次隔得最远。 依此类推贪心就好。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream&g...原创 2018-03-20 07:44:55 · 267 阅读 · 0 评论 -
bzoj1345: [Baltic2007]序列问题Sequence(单调栈)
题目传送门 。解法: 只有我写的是单调栈吗? 维护一个单调递减的栈。 那么每次进来一个元素x 如果大于栈顶的话。说明栈顶要被消除了。栈顶与栈顶下一个可以认为是挨在一起的。 x与栈顶可以认为是挨在一起的。 所以比较x与栈顶下一个的大小加到答案里即可。跑完一遍之后可能栈还有元素没消除完。 从栈顶往下慢慢消就行。代码实现:#include<cstdio>...原创 2018-04-07 17:01:35 · 253 阅读 · 0 评论 -
bzoj1121: [POI2008]激光发射器SZK
题目传送门 搞笑?解法: 物理题。 光路可逆。 点对一一对应。 直接n/2。原创 2018-04-07 17:02:58 · 167 阅读 · 0 评论 -
bzoj3709: [PA2014]Bohater(贪心)
题目传送门 。解法: 怪物有加血有扣血的。 分情况讨论: 首先先将加血的先打完。 那么加血的按照怪物消耗的血量从小到大排序。 反正都是加血。肯定先打消耗血量小的啊。打完之后打扣血的怪物。 要知道最后一个怪物打完其实不需要吃它的草药了。 也就是说最后一个怪物的草药应该希望尽量小。 样例就是一个很好的说明。 所以扣血的怪物按照草药补的多少从大到小排序。中间判断一下即可。...原创 2018-04-07 17:21:47 · 195 阅读 · 0 评论 -
bzoj2326: [HNOI2011]数学作业(矩阵乘法)
题目传送门 。解法: 矩阵乘法啊。 设当前数为x。要加上的为i。 若i为1为数。 那么x应该变为x*10+i。i应该变成i+1 这个过程很明显是矩阵乘法嘛。初始矩阵,因为有个+1,所以多一个元素表示1 X i 1 转移矩阵 10 0 0 1 1 0 0 1 1 这样就变成了 X*10+i i+1 1 然后10...原创 2018-04-07 17:27:11 · 179 阅读 · 0 评论 -
bzoj2151: 种树(贪心+堆)
题目传送门 。解法: 今天才学这种经典做法。。 如果选最大的然后删除两边很显然这种策略是错误的。 因为有可能两边加起来更优。那么上面的做法是无法反悔的。。 给他一个反悔的机会。 那么就是: 假设选了i,那么删除i前后的两个点。 然后把i这个点的权值变为a[前]+a[后]-a[i]。 这样再选i的话就表示反悔了选了前后两个。 维护一下这个位置是否删除。这个位置的前一个未被...原创 2018-03-25 11:39:02 · 717 阅读 · 0 评论 -
bzoj1150: [CTSC2007]数据备份Backup(堆+贪心)
题目传送门 。解法: 跟上一题差不多一个思想。 bzoj2151 只不过这题多了一个比较恶心的边界而已。那么相对于边界值。就拿他前面没有点来举例。 假设现在前面没有点了。那么肯定选他之后不用反悔啊。 因为你后面那个肯定比你小啊要不然干嘛选你呢。 所以说选完之后把自己和后面的点删除就行了。 维护一下即可。 跟2151唯一的不同也就这个点了。 如果后面没有点也是一样的道理。...原创 2018-03-25 12:03:18 · 358 阅读 · 0 评论 -
bzoj4029: [HEOI2015]定价(贪心)
题目传送门 。解法: 贪心咯。 如果两个数位数不一样。 如果两个位数只差1的话那么要讨论一下。 如果相差不止1的话肯定能组成5000000啥的。 如果两个位数一样的话: 那么从最高位开始往下枚举。遇到一个不同的位就进去因为那一定是最优的 代码里面都有体现。。代码实现:#include<cstdio>#include<cstring>#in...原创 2018-03-21 11:35:34 · 279 阅读 · 0 评论 -
bzoj2729: [HNOI2012]排队(高精度+组合数学)
题目传送门 。解法: 本来我想的是这样的。。。 n个男生插老师。 然后插女生。 然后怎么算都出不来12。。。 %题解。。 原来还有一种叫做女生把老师隔开的东西。分情况讨论: 老师之间有男生。 那么就是n个男生有n+1个间隔来插老师。 然后一共有n+2个人了。那么又有n+3个间隔来插女生。 排列组合即可。老师之间绑一个女生。 那么这个小团体可以看作一个男生因为他两...原创 2018-03-26 19:51:03 · 369 阅读 · 0 评论 -
bzoj4419: [Shoi2013]发微博
题目传送门 。解法: %Rose_max用边目录a了完全想不到% 不太容易想。 亮老师跟我说用set来做。。 可是我不会set啊【小声逼逼 那我只好想别的方法了。。那么题目说删除好友一定保证他们原来是好友。 所以你需要求的其实是每次加和删除之间能看到多少次。 那么作差就行了呀。 从后往前。统计一个人发了多少条微博。 如果遇到删除好友证明后面的都看不到了。所以互相减去对方...原创 2018-03-27 09:52:20 · 241 阅读 · 0 评论 -
bzoj2079: [Poi2010]Guilds(并查集)
题目传送门 。解法: 找孤立点就行。 并查集乱搞??代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>#include<qu...原创 2018-03-27 11:11:53 · 300 阅读 · 0 评论 -
bzoj3613: [Heoi2014]南园满地堆轻絮(二分+贪心)
题目传送门 。解法: 二分答案。 因为后面的元素要大于等于前面的元素。 那么我们使得前面的元素在满足答案的情况下尽量的小就行。 这样后面的元素选择的余地就更大。贪心一下咯。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>...原创 2018-04-12 11:44:17 · 201 阅读 · 0 评论 -
bzoj4247: 挂饰(Dp)
题目传送门 。解法: 先挂钩子多的。 因为假设你最后选出来五个挂饰。 那么肯定是找钩子多的先挂。 那么按照钩子数排个序。 然后Dp一下就行 f[i][j]表示前i个挂完(不一定每个都要选)之后还剩j个钩子。 f[i][j]=max(f[i-1][j],f[i-1][j-a[i].a+1]+a[i].b)代码实现:#include<cstdio>#inc...原创 2018-04-12 15:20:16 · 203 阅读 · 0 评论 -
bzoj4444: [Scoi2015]国旗计划
题目传送门 好题解法: 因为区间互不包含。 那么左端点在区间内最右边的的区间一定是当前区间能扩展到最远的区间。 这句话有点绕。举个例子。假设当前区间为1~5。 那么我们往右扩展。 找到左端点最右且小于等于5的区间。 这个区间一定是最优解。 因为区间互不包含啊。如果这个区间不是最优解的话那么就被别的包含了。。因为题目是环。需要转化成链。 所以把环复制一份放在后面就变成了...原创 2018-04-22 16:45:23 · 307 阅读 · 0 评论 -
bzoj2426: [HAOI2010]工厂选址(贪心)
题目传送门 。解法: 贪心呗。 枚举每个选址。 因为老发电厂b吨是固定的。 那么我们先搞完他的然后剩下的全部分给新的发电厂。 那么我们用每个矿的新电厂-老电厂花费。 这样结果越大的用在老电厂越优。 按照这个排一下贪心搞下即可。代码实现:#include<cstdio>#include<cstring>#include<cstdlib...原创 2018-03-08 21:06:10 · 375 阅读 · 0 评论 -
bzoj5204: [CodePlus 2018 3 月赛]投票统计
题目传送门 。解法: 刷经验代码实现:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,a[110000],b[110000],s[110000],sum[110000];int main() { int T;scan...原创 2018-03-08 21:02:28 · 255 阅读 · 0 评论 -
bzoj1089: [SCOI2003]严格n元树(高精度)
题目传送门 。解法: 好神啊。 f[i]表示深度小于等于i的严格n元树。 那么f[i]怎么用f[i-1]表示呢。 对于任意一个深度为i的严格n元树。 那么它的根一定有n个儿子。 这样我们就可以把它拆成一个根和n棵深度小于等于i-1的n元树了。 那么深度小于等于i-1的n元树方案已经求出来了是f[i-1]了呀。 那么在利用乘法原理得出f[i]=f[i-1]^n。 还没完,还有...原创 2018-03-06 19:49:42 · 363 阅读 · 0 评论 -
bzoj1088: [SCOI2005]扫雷Mine
题目传送门 哈哈哈我扫雷很强。 初级6秒中级35秒高级125秒。 欢迎来破。(我感觉还可以了)言归正传。其实说我一眼就看出来怎么做了。 这是作为一个雷手的素质。。首先,当我们确定了前两个格子后,那么我们根据第二个格子的数字就可以确定第三个格子是雷还是空地了。 然后根据第二个和第三个格子,又可以确定第四个格子是什么了。那么前两个格子有多少种情况呢。 如果第一个数字为1。 那么表示前两个格原创 2017-09-25 13:23:27 · 396 阅读 · 2 评论 -
bzoj2456: mode
题目传送门 这道题真的恶心。跟我理解的众数完全不一样。。导致我完全忽略了出现次数大于n/2这个条件。。解法: 以为很水打了个代码交上去0msTLE真的舒服。 看了看讨论原来这个是MLE。 那就是不能开数组咯。。 不会啊(忽略了次数大于一半) 然后上网%题解。 发现哦原来还有这个条件。 那众数和不是众数的相互抵消。代码实现:#include<cstdio>#include<cstri原创 2017-10-27 09:55:04 · 258 阅读 · 0 评论 -
bzoj2463: [中山市选2009]谁能赢呢?
题目传送门 这道题就是道结论题,以前一场考试中考过。我记得我当时是这么yy的: 最后走完之后肯定是一个中间没有空间的块。 如果有空间肯定可以继续走。 然后因为他们两个人都很聪明,所以肯定都能提前知道这个情况。 那么输的那个人就会想办法扩大这个块使得他能赢。 两个人都这么想,最后肯定走完整个图,所以判断一下n的奇偶性就行了呀。代码实现:#include<cstdio>#include<c原创 2017-10-27 10:06:22 · 246 阅读 · 0 评论 -
bzoj1432: [ZJOI2009]Function
题目传送门 真的恶心这道题真是毒瘤。 tg这个人整天推荐毒瘤题。解法: 差点就连题目都看不懂了。%题解啊太垃圾了。 挺谢谢博主的 写的不错。代码实现:#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm> #include<iostream>using namespace std;int mai原创 2017-10-20 21:44:21 · 348 阅读 · 0 评论 -
bzoj5071: [Lydsy十月月赛]小A的数字
题目传送门 巨难受。不知道被谁怂恿去打月赛。 被虐了。解法: 真的垃圾。当时我也想到前缀和了。 只不过我推错了。 A[i-1]+A[i],-A[i],A[i+1]+A[i]。 我当时是这么想的。 A[i-1]加了一个A[i] A[i+1]加了一个A[i] -A[i]减了一个A[i] 那一共加了一个A[i] 那么这个前缀和是变化的。是动态的。那我就不能用前缀和了!!! 所以签到原创 2017-10-29 11:16:16 · 474 阅读 · 0 评论 -
1968: [Ahoi2005]COMMON 约数研究
题目传送门 这道题是给我水经验的么。解法: 看到题面有数学公式还以为是道大难题。。 结果。。 读完题后就是1~N每个数都作为因子一共出现多少次。。 就是n/i的和呗。代码实现:#include<cstdio>#include<cstring>using namespace std;int main() { int n;scanf("%d",&n);int ans=0;原创 2017-10-29 16:06:36 · 338 阅读 · 0 评论 -
bzoj1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
题目传送门 水题。解法: 这道题打个暴力都水过了。。代码实现:#include<cmath>#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>using namespace std;int s[1100000];int a[110000],n;int ma原创 2017-10-30 20:52:02 · 410 阅读 · 0 评论 -
bzoj1257: [CQOI2007]余数之和sum(数论)
题目传送门 神啊不会做啊初三数学不够用啊。膜了一发AKc大佬的题解,发现是个等差数列咯。 去膜原帖吧 然后我懒得用公式。 不想写做法了网上都有都差不多。 看代码注释吧。 其实我不一定能说清楚(最讨厌数论了)代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algori原创 2017-10-13 14:37:29 · 360 阅读 · 0 评论 -
bzoj1303: [CQOI2009]中位数图
题目传送门 好题。解法: 连续子段中位数为b。 那么这段子段肯定包含b。 那么从b的位置开始可以往左边延伸也可以往右边延伸。 那么小于b的数的数量要等于大于b的数的数量。 小于b的为1,大于b的为-1。 最后整一段的和等于0那么中位数肯定是b。 用l,r。 l[i]表示从b开始向左连续一段和为i的有多少种情况。 比如l[1]等于从b这个位置开始向左连续一段和为1的有多少种情况。原创 2017-11-01 10:12:37 · 218 阅读 · 0 评论 -
bzoj2005: [Noi2010]能量采集
题目传送门 好题啊。。解法: gcd(x,y)其实就是这条直线上(包括(x,y))有多少个点。 然后因为能量损失是不包括((x,y)) 所以每个点的能量损失其实是(gcd(x,y)-1)*2+1=gcd(x,y)*2+1 f[i]表示gcd(x,y)为i的对数。 f[i]=公因数为i的情况-最大公因数不是i的情况。 那么公因数为i的情况就等于(n/i)*(m/i)。 最大公因数不是i原创 2017-11-01 10:54:28 · 355 阅读 · 0 评论 -
bzoj1045: [HAOI2008] 糖果传(数论)
题目传送门 双倍经验。3293。解法: 一碰到数论就是各种不会啊只会膜题解了。 hzw的写的很好我看懂了。 原帖 首先,最终每个小朋友的糖果数量可以计算出来,等于糖果总数除以n,用ave表示。 假设标号为i的小朋友开始有Ai颗糖果,Xi表示第i个小朋友给了第i-1个小朋友Xi颗糖果,如果Xi<0,说明第i-1个小朋友给了第i个小朋友Xi颗糖果,X1表示第一个小朋友给第n个小朋友的糖原创 2017-10-17 15:06:17 · 360 阅读 · 0 评论 -
bzoj1217: [HNOI2003]消防局的设立(贪心)
题目传送门 这不是洛谷的弱化版么。。 好水。。解法: 显然的贪心呀。 把1弄做根。 然后搞出每个点的深度。 那么肯定从边边开始染呀。 然后对于每个边边的点,不用考虑他下面的点了。 然后把他的爷爷设立为消防局就完了呀。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include原创 2017-12-04 13:13:34 · 356 阅读 · 0 评论 -
bzoj1034: [ZJOI2008]泡泡堂BNB
题目传送门 又遇大水题。解法: 这道题不是田忌赛马么。 最好情况分三种情况吧。 如果我当前所剩最小的大于对方所剩最小的,直接用。 如果我当前所剩最大的大于对方所剩最大的,直接用。 不然的话就拿我当前所剩最小的去碰掉对方所剩最大的。自己的最坏情况其实就等于对面的最好情况。 然后一局双方得分恒为2,所以最后用2*n-ans就好咯。代码实现:#include<cstdio>#include原创 2017-11-25 17:41:39 · 211 阅读 · 0 评论 -
bzoj1218: [HNOI2003]激光炸弹
题目传送门 不会什么解法只能面向数据编程了。解法: 范围0到5000,+1变成1到5001。。。。 直接暴力呀兄弟。。 sum[i][j]表示以ij为右下角的长度为R-1的矩阵(边界不行) 直接做。。跑了两秒的垃圾。。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<a原创 2017-11-27 13:36:15 · 297 阅读 · 0 评论 -
bzoj1800: [Ahoi2009]fly 飞行棋
题目传送门 水。解法: 矩形? 直角呗。 两条对角线都是直径。 范围? N<=20 暴力枚举N四方代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>#include<queue>using namespace原创 2017-12-31 11:24:40 · 337 阅读 · 0 评论 -
bzoj3124: [Sdoi2013]直径
题目传送门 。解法: 两个傻逼结论: 首先肯定在同一条直径上。因为每条直径都要经过这一段。 肯定是连续的一段。 因为如果你有两段的话。那么敢问这两段之间的路径你是怎么走过去的(树上两点路径唯一!)这样的话就很好做了。 随便找条直径。 在这条直径上确定一条路径。使得这条路径上: 任意一点都不可能从别的分支扩展出直径。 懒得画图直接文字描述。 假设求出了一条直径是1->...原创 2018-04-22 19:13:15 · 355 阅读 · 0 评论