日常乱搞
文章平均质量分 59
ArkBagpipe
这个作者很懒,什么都没留下…
展开
-
牛客多校第五场 F - take (树状数组)
题目链接初始的时候手里有大小为0的钻石,现在依次打开n个箱子,第i个箱子有x/100的概率开出大小为y的钻石。如果开出的钻石比手中的要大,就交换一次。求交换次数的期望。考虑要在某个位置交换,就必须满足在它前面的比它大的钻石都没有被开出来。也就是,第i个位置对答案的贡献是。对于这个东西,我们可以将d从大到小排序,用树状数组去维护(1-pi)的前缀积。依次加入到树状数组中时,由于加入的...原创 2018-10-18 16:30:29 · 177 阅读 · 0 评论 -
Gym 101431B Vera and Banquet (后缀数组)
题目链接一个环形的字符串,求本质不同子串数目,顺逆时针皆可。顺时针直接复制一遍,统计长度不超过n的种类;逆时针就翻转过来再复制一遍,统计长度不超过n的种类。因此搞到一起就是把串复制一遍再对称过去,中间加一个特殊字符,统计长度不超过n的种类再减去含有特殊字符的种类。不超过n的种类显然是min(len-sa[i]+1, n),含有特殊字符的种类按长度分类总共是1+2+……+n = n*(n...原创 2018-09-28 23:30:43 · 267 阅读 · 0 评论 -
HDU-5136 2014ICPC广州现场赛J - Yue Fei's Battle
题目链接求直径为k、每个点的度不超过3的不同构树的数目。考虑按照直径所在的链分为若干部分,显然每部分都是一棵二叉树。dp[i]为深度为i的不同构树的数目,sum[i]为num[i]的前缀和。对于深度为i时,根的两个分支有可能为:(1)一个深度为i-1,另一个深度小于i-1,有dp[i-1]*sum[i-2]种方案。(2)深度都为i-1,两分支不同时为dp[i-1]*(dp[i-...原创 2018-10-07 22:39:33 · 260 阅读 · 0 评论 -
ZOJ 4019 Schrödinger's Knapsack (DP)
题目链接背包问题,但放东西的顺序会影响结果,放入基础价值为k的物品的贡献为kr,其中r为放入这个物品后背包剩余的体积。且规定只有两种价值的物品,分别为ka,kb。给出每个物品的体积,求最大的总价值。由于同种物品只有体积上的差别,基础价值是相同的,因此易知同种物品必然是放体积小的比放体积大的更优。先把两种物品分别按体积排序,dp[i][j]表示放入了第一种体积前i小、第二种体积前j小物品...原创 2018-09-28 14:48:05 · 166 阅读 · 0 评论 -
POJ 1430 Binary Stirling Numbers (排列组合)
题目链接对于第二类斯特林数S(n,m) = S(n-1,m-1) + m*S(n-1,m),求S(n,m)的奇偶性。学习了大佬的博客……在模2的意义下,如果m为偶数,则S(n,m)=S(n-1,m-1);如果m为奇数,则S(n,m)=S(n-1,m-1)+S(n-1,m)。考虑这种关系的另一种表示:初始时在(0,0)处,对于状态(x,y),如果x为奇数,可以转移到(x+1,y+1)...原创 2018-09-21 16:26:08 · 333 阅读 · 0 评论 -
POJ 3252 Round Number (排列组合)
题目链接定义Round Number为二进制表示下0不少于1的数字。问区间[l,r]内有多少个Round Number。仍然是考虑用[1,r]的答案减去[1,l-1]的答案。对于一个二进制长度为n的数x,显然长度为1~n-1的数必然是合法的。首先看长度为n且小于x的数中有多少个合法答案。方法是从第二位开始,如果碰见1,就考虑如果它为0,可能产生多少种合法答案。以26=(11010)b为...原创 2018-09-21 14:47:30 · 214 阅读 · 0 评论 -
HDU 6437 Videos (最小费用最大流)
题目链接将每场电影拆成两个点,从入点向出点连边,费用是h,容量为1。从源点向它的入点、它的出点向汇点连边,费用为0,容量为1。考虑到m很小,可以O(m^2)地在电影之间连边。如果i的结束时间不晚于j的开始时间,那么就从i的出点带j的入点连边,容量为1,若i和j为同类费用为w,否则费用为0。最后将源点也拆成两个点,从入点到出点连边,容量为k,费用为0,表示一共只有k个人。这样就是一个...原创 2018-09-13 20:23:22 · 253 阅读 · 0 评论 -
HDU 6406 Taotao Picks Apples (线段树)
题目链接 给出一个数列,要求每次单点更新后查询从1开始的严格上升子序列长度。考虑到严格上升子序列所具有的单调性,我们可以用一棵线段树来维护区间最大值,然后通过相邻区间的最大值关系来确定严格递增序列的长度。在维护一个区间的时候,显然它的左儿子和右儿子都有一个贡献。如果前一个数比后一个数要大,后一个数显然是不会产生贡献的。因此,一个区间的贡献应该至少是它左儿子的贡献。而对于右儿子产生的贡献,可...原创 2018-09-07 16:52:04 · 141 阅读 · 0 评论 -
HDU 6415 Rikka with Nash Equilibrium (DP)
题目链接要求在n*m矩阵中填入1-n*m,使得存在且仅存在1个位置,这个位置的数在所在的行与列都是最大值。问有多少种方案。易知这个位置上必然是n*m。为了满足有且仅有一个点符合条件,我们从n*m倒着往矩阵里面放,显然每个数都应该放在已经存在数的行或列上。考虑用i个数已经在j行k列上放置了数字,在放第i+1个数之后只可能覆盖j行k列、j+1行k列、j行k+1列。这样分别有j*k-i、k*...原创 2018-09-10 23:01:47 · 192 阅读 · 0 评论 -
HDU 6403 Card Game (基环树 + DP)
题目链接有n张纸牌,每张牌的正反面分别写着一个数字,现在需要翻转某些纸牌使得所有纸牌正面的数字各不相同,问最少的操作次数以及操作的方案数。首先建图,从初始时反面的数字向正面数字连边。问题实际上就是:将最少的边反向,使得每个点的入度都不超过1。对于每一个弱联通分量,如果边数大于点数,那么必然会存在某些点的入度大于1。也就是说,建好的图中的弱联通分量,要么是树,要么是基环树。否则无解。...原创 2018-09-10 16:38:46 · 457 阅读 · 0 评论 -
2018 ICPC沈阳网络赛 F. Fantastic Graph (上下界网络流)
题目链接给出一个二分图,问能否删去某些边,使得每个点的度都在[l,r]范围内。建一个源汇,分别从源点向x部、y部向汇点连边。这样就变成了一个有源汇上下界可行流的问题。建一个超级源汇,对于每条从u到v流量范围为[l,r]的边,从u到v连边容量为r-l,从超级源点到v连边容量为l,从u到超级汇点连边容量为l。如果最大流等于(n+m)*l则存在可行流。以及今天发现以前用的dinic模板辣...原创 2018-09-10 14:35:27 · 361 阅读 · 0 评论 -
2018牛客暑期多校训练赛 第一场 (A.D.E.J)
题目链接A. Monotonic Matrix给出n和m,问存在多少个n*m矩阵使得对于任意i, j都满足a(i, j) <= a(i+1, j)且a(i, j) <= a(i, j+1),其中0 <= a(i, j) <= 2。显然一个位置的元素不大于右下方三个位置的元素。考虑0和1、1和2的分界线,题目就变成了:从(n, 0) 到(0, m)的两条不相交可重...原创 2018-09-30 16:06:29 · 267 阅读 · 0 评论 -
HDU 5117 2014ICPC北京现场赛 F - Fluorescent (状压DP)
题目链接有n个灯和m个开关,每个开关控制一些灯,显然开关的状态有2^m种。设亮着的灯的数目为x,求所有状态下x^3之和。n,m <= 50显然不能直接计算每种x进行dp的。考虑直接计算x^3。x^3 = (x1 + x2 + ... + xn)* (x1 + x2 + ... + xn)* (x1 + x2 + ... + xn) = Sum(xi * xj * xk)。枚举...原创 2018-10-09 22:03:19 · 210 阅读 · 0 评论 -
2017 CCPC 秦皇岛站现场赛 【7/13】
题目链接A - Balloon Robot如果机器人从x开始某队需要等待的时间是t,那么如果从x+1开始,需要等待的时间就是。由此我们可以先处理出机器人从1开始的等待时间,然后排序之后依次扫过去取结果的最小值,理论的复杂度为。但是发现,有很多点是一定不会成为最优解的。可以证明只有在p个队伍中出现过的点才有可能会成为最优解,这样总的复杂度就只有。#include <bits/...原创 2018-11-01 23:16:34 · 268 阅读 · 0 评论 -
2018 NEERC South-Sub C - Cloud Computing (CF-1070C) (线段树)
题目链接1-n天每天都需要k个cpu,cpu有m种方案,每种方案给定了可使用的期限、数目和价格。问1-n天的最小的总花费是多少。容易想到这个东西需要一棵线段树。但是,线段树的节点是价格,它储存两个值,当前状况下,价格区间内的总数目和价格区间内的总花费。从1到n遍历时间,在每个时刻,线段树中只存在当前可以使用的方案。通过分别对左端点和右端点排序可以在mlogT的时间里完成这个操作。然后对...原创 2018-10-23 23:35:49 · 290 阅读 · 0 评论 -
牛客多校第九场 E - Music Game (DP)
题目链接有n个箱子,第i个箱子有pi的概率开出东西,连续i个箱子开出东西的贡献为i^m,求n个箱子总贡献的期望。dp,dp[i]表示前i个位置的总结果。显然在i处有两种情况,开出东西和没开出东西。没开出东西就是。而开出东西的情况,就枚举这一段的起点计算,时间复杂度。#include <cstdio>#include <cstring>#includ...原创 2018-10-21 20:10:53 · 311 阅读 · 0 评论 -
牛客多校第六场 I - Team Rocket (线段树)
题目链接给出n个区间和m个询问,每次询问给出一个数,规则是如果这个数位于某一个尚未标记的区间内,就标记这个区间。查询要求输出此次标记的区间数目,强制在线。所有查询结束后要求输出每个区间被标记的时刻。将所有的区间按照L升序排序,然后将每个区间作为线段树的叶子节点,这里线段树维护的是区间内R的最大值。对于炸掉的铁路,可以直接将R更新为-INF。每次查询的时候,需要先二分出这个点所能影响到的...原创 2018-10-20 15:41:15 · 292 阅读 · 0 评论 -
牛客多校第六场 A - Singing (模拟)
题目链接有2^n个人打淘汰赛,每次对战需要从自己的曲库中选一首,问都在最优情况下谁会获得最后的胜利。两个人对战的时候,在双方都最优的情况下,自然是最大的歌较大的人赢。但是赢的那个人不一定要用最大的歌来对战,他需要用的是大于对面最大值的最小的歌。这样把所有人扔进队列里,每次取出要对战的两个人按照这样的方法进行模拟即可。#include <cstdio>#include &...原创 2018-10-19 19:26:08 · 212 阅读 · 0 评论 -
NAIPC2017 E - Blazing New Trails (二分 + 最小生成树)
题目链接给出一个图,对于其中一些确定的边,可以将它们的权值都加上某一个值,使得这些边中正好有w条出现在最小生成树中。求最小生成树的最小总权值。可以发现,对于加到特殊边上的值,它和最小生成树中特殊边的数量是一个单调的关系。因此可以二分这个值,然后每次去求最小生成树。实现起来主要是一些细节的问题。在合法的解中,这个值与最小生成树的值也是一个单调的关系,可以相应的简化一下记录的过程。以及...原创 2018-10-16 22:01:11 · 333 阅读 · 0 评论 -
ZOJ - 2532 Internship (网络流求割边)
题目链接有n个城市和m个中转点,0号点是汇点。问提高哪一条边的容量可以使进入汇点的容量增加。如果一条边对总的流量有影响,那么它在求完最大流的残余网络中肯定满足两个条件:第一,这条边是满流;第二,源点和汇点分别经过未满流的边可达此边的两个端点。因此就是求最大流后在残余网络中dfs处理一下连通性,然后遍历每一条边判断即可。#include <cstdio>#includ...原创 2018-10-16 21:54:42 · 235 阅读 · 0 评论 -
HDU 5130 & 5134 2014ICPC广州现场赛 D & H (计算几何)
2014GZ - D & 2014GZ - HD - Signal Interference给定一个多边形及其内部的点A,并给出另一个点B,求多边形内部到B距离不超过到A距离的k倍的点集的面积。经过推导可以得出来满足距离关系的点集是一个圆,那么就只需要求出这个圆之后求它与这个多边形的面积交即可。H - Highway某个人在距离高速公路D的点处,他在公路外的速度是v0...原创 2018-10-09 22:48:09 · 286 阅读 · 0 评论 -
HDU 5114 2014ICPC北京现场赛 C - Collision (扩展欧几里得)
题目链接在n*m的方格的两个整数点处发射初速度都为(1, 1)的质点,质点在边界会发生弹性碰撞,问两质点能否相遇。若能,求出二者第一次相遇的坐标。首先为了避免小数的出现,将坐标全部扩大为原来的两倍。这种碰撞问题显然需要将速度正交分解,然后有四种情况:(1)x1==x2&y1==y2 此时显然t=0。(2)x1==x2&&y1 != y2 此时显然结果取决...原创 2018-10-09 22:22:54 · 365 阅读 · 0 评论 -
2018 ICPC青岛网络赛 B. Red Black Tree (LCA乱搞)
题意:给出一棵树,其中某些点是红色,其余点是黑色。定义一个点的花费为这个点到距其最近的红色祖先节点的距离。要求进行q次查询,每次查询给出k个节点,允许将最多一个黑色点变为红色, 求这k个点中最大花费的最小值。每次查询相互独立,不对树的结构产生影响。首先可以预处理出每个点的最近红色祖先以及花费。在查询的k个点中,需要修改的只可能是从花费最大的点到它的最近红色祖先的路径上的点,否则最大值不会得...原创 2018-09-16 20:48:59 · 770 阅读 · 0 评论 -
HDU 5956 The Elder (树形DP + 斜率优化)
题目链接容易看出来是一个树形dp,并且有一个非常显然的状态转移方程:,其中v是树上从u到根节点路径上的点。但是显然这样的时间复杂度在树退化成链的时候会达到,需要想办法来进行优化。尝试进行变形:如果状态v和w都可以转移到状态u,那么在这种情况下,从状态v转移会更优:我们发现上式变成了一个斜率的形式。考虑将(dis[i], f[i])的点绘制出来,如果出现了下面...原创 2018-09-06 13:57:55 · 336 阅读 · 0 评论 -
2018 ICPC徐州网络赛 D. Easy Math
题目链接先放一个问答区的图求。考虑莫比乌斯函数的定义,当n = k*p*p (p > 1)时,。又考虑到莫比乌斯函数作为积性函数的性质,则有:。由容斥原理:令: ,则:。先预处理n的质因子,就可以加速的计算,递归地进行处理。考虑处理到边界时,n = 1即为求。预处理以内的数,其余部分用杜教筛来进行处理。#include <cstdio>...原创 2018-09-09 22:17:23 · 479 阅读 · 0 评论 -
HDU 6351 Beautiful Now (并不是贪心)
题目链接 给出一个数,允许最多k次将某对位置的两个数字交换,问可生成的最小和最大的数是多少。此题,贪心的解法是个假解法。。。。举个栗子,k=2时的970979,贪心的求出最大值是999077,但实际上可以达到的最大值是999770。所以这题必然不是个贪心。。。最长只有9位,考虑遍历原数所有的排列,如果能由原数在k次之内变换而来,就尝试更新答案。#include <cstdio&...原创 2018-08-09 14:55:04 · 406 阅读 · 0 评论 -
HDU 6357 Hills And Valleys (DP)
题目链接 给出一个由0-9构成的串,允许将其中的一个子区间翻转,求最长不下降子序列的长度及翻转的区间。枚举翻转区间的端点显然是不行的,可以换个思路,枚举翻转区间的值域。假设翻转的区间是[x,y],那么参与构成最长不下降子序列的元素在翻转之前必然是这样的:0`,1`,.....(x-1)`,x`,y`,(y-1)`,...(x+1)`,x`,y`,(y+1)`.....8`,9`。其中k...原创 2018-08-09 14:22:06 · 228 阅读 · 0 评论 -
HDU 6315 Naive Operations (线段树)
题目链接给定一个数组b和一个空的数组a,要求支持两种操作:将a在从l到r上每项都加1,查询从l到r区间上之和。由于每一个bi都是不同的,直接维护ai/bi很困难。观察要求查询的是区间内ai/bi向下取整之和,且ai初始为0。显然ai每增加bi次,才能使结果增加1。于是我们可以把这个问题转化成,查询的区间内结果增加了多少次,也就是说,查询的区间内ai的值每增加bi一次结果就会增加1,我们...原创 2018-07-27 17:05:30 · 219 阅读 · 0 评论 -
[Kuangbin带你飞]专题十 匹配问题
A->L:二分图最大匹配二分图最大匹配最常用的是匈牙利算法,用DFS找增广路,时间复杂度O(n*m),在稠密图中简单又好用。当数据范围较大时,可以选用Hopcroft_Carp算法,BFS多次增广,优化之后的时间复杂度为O(sqrt(n)*m)。几条重要的性质:最大匹配=最小顶点覆盖DAG最小路径覆盖=顶点数-最大匹配数最大独立集=顶点数-最大匹配数A. Fire Net -HDU1045:...原创 2018-05-11 17:04:52 · 304 阅读 · 0 评论 -
[Kuangbin带你飞]专题十四 数论基础
A. Bi-shoe and Phi-shoe: 给出一个数列a,对于其中的每个元素,求出欧拉函数值不小于此元素的最小数。题解:由欧拉函数的定义可以得到,对于一个数字x,欧拉函数值不小于x的最小数是不小于x的最小素数。因此先打出素数表,再二分地对于每一个元素找出不小于它的最小素数即可。#include<bits/stdc++.h>#define maxn 10050#define ...原创 2018-04-22 09:06:30 · 312 阅读 · 0 评论 -
4.9-4.15练习
1.Codeforces Round #474 C. Subsequence Counting题意:规定集合的子集只有在最大元素减去最小元素不超过d时才是合法子集。现给出合法子集的数目x和d,求一个满足条件的集合。题解:用类似于进制分解的方法,将x分为若干个2*i-1之和。这样这个集合的每个部分有i个元素,它们的差值不超过d,这样依次构造一个合法集合即可。#include<cstdio>...原创 2018-04-15 22:52:37 · 206 阅读 · 0 评论 -
4.2-4.8练习
简单数学Luogu P1372:1-n中找出k个数使得这k个数的gcd最大并求这个值。要使x与另一个数的gcd尽量大,另一个数最好是x的倍数。即,答案序列应为x,x*2,x*3...x*k。又因为x*k不大于n,那么答案就是n/k。Luogu P1338:求1-n的逆序数为m的字典序最小的排列。若排列中已经确定了一些数字,那么对于剩下的i个位置,能够产生的最大逆序数是i*(i-1)/2。并且一个排...原创 2018-04-08 22:15:07 · 197 阅读 · 0 评论 -
3.19-3.25练习
1. Uva11400 Lighting System Design: 有n种灯泡,不同种灯泡不能共用一个电源,且只能接在比额定低的电源上。给出每种灯泡的电压,电源费用,数量,单价,可以把一种灯泡换成额定更高的另一种灯泡来节约钱,求最优方案的费用。显然,每种电压的灯泡要么不换,要么全换。先将灯泡按照电压升序排序,令sum[i]为前i种灯泡的总数量,dp[i]为前i种灯泡的最小花费。状态转移方程为:...原创 2018-03-25 22:47:18 · 157 阅读 · 0 评论 -
3.12-3.18第三周练习
1. 状态压缩DP:对于一个集合,把每一个元素选择与否的情况对应到一个二进制位里,从而把集合的状态压缩成一个整数,方便计算与维护。 POJ2441 Arrange the Bulls:有n头牛和m兼屋子,每头牛都只喜欢住在某几间屋子里,问所有牛都满意的方案有多少种。屋子的居住一共有1<<m种情况,dp[i]表示状态为i时一共有多少种方案。遍历每一头牛,在每一种方案下看每一间屋子是否能够...原创 2018-03-18 22:52:48 · 189 阅读 · 0 评论 -
2.26-3.4第一周练习
1.二分搜索 1)从有序数组中查找值 2)假定一个解判断是否可行 3)最大化最小值 POJ3273-Monthly Expense 题意:n天每天有不同的花费,将n天分成m组,问各组费用之和的最大值最小是多少。#include<cstring>#include<cstdio>#include<cmath>#include<cstd...原创 2018-03-04 21:03:47 · 167 阅读 · 0 评论 -
3.5-3.11第二周练习
1. Codeforces Round #469 C. Zebras: 给出一个由0或1组成的字符串,问能否将其分为若干个01相间的子串。题解:用vector保存每一个子串的下标集合。对于每一个字符,若其为0,则应加在最后一个以1结尾的子串后面。否则就新开一个子串。若其为1,则只能加在最后一个以0结尾的子串后面。用cnt记录以0结尾的子串数目,maxx记录总的子串数目,在扫完一遍字符串之后应有cn...原创 2018-03-10 16:53:04 · 200 阅读 · 0 评论 -
HDU 5446 Unknown Treasure (Lucas定理+CRT 模板)
题目链接 求C(n,m)对M取模的结果,其中M=p1*p2*...*pk,保证pi<=1e5且为素数,M<=1e18。Lucas定理用于求C(n,m)模p的值,其中p为素数。具体表述为:则:Lucas定理模板:ll lucas(ll n, ll m, ll mod){ if(m == 0) return 1; return (C(n % mo...原创 2018-08-09 17:04:27 · 152 阅读 · 0 评论 -
HDU 6333 Harvest of Apples (莫队算法)
hdu6333 给出n和m,求C(n,0)+C(n,1)+...+C(n,m)的值。把结果定义为S(n,m),可以得到S(n,m) = S(n-1,m) + S(n-1,m-1),由此就有S(n,m) = S(n,m-1) + C(n,m) = 2*S(n-1,m) - C(n,m)。也就是说根据S(n,m)我们可以在O(1)的时间里求出S(n-1,m),S(n,m-1),S(n+1,m)...原创 2018-08-05 21:04:01 · 211 阅读 · 0 评论 -
HDU 6395 Sequence (分块矩阵快速幂)
给出F的定义求F(n) % 1e9+7。如果没有这个p/n,就是一个简单的矩阵快速幂。向下取整的值在1-n中,显然每一个数出现的时候都是连续的一段,这样就可以分块地去求矩阵快速幂。对于i,可以得出,p/i最后一次出现就是p/(p/i)。以及为什么G++比C++提交快这么多啊嘤嘤嘤 #pragma once#include <cstdio>#include ...原创 2018-09-03 23:42:48 · 227 阅读 · 0 评论 -
HDU 6396 Swordsman (优先队列+输入挂)
题目链接 n个怪物,每个怪物都有5个属性,只有每种属性都比怪物高的时候才能打败这个怪物,同时每种属性都会提升一点。问最终最多能杀掉多少怪物。贪心求解,不过贪心的姿势不是很好想。建5个优先队列,一开始的时候把所有的怪物都扔到第一个优先队列里面, 如果属性1高于 这个怪物,就把这个怪物从队列1中拿出来,扔到第2个优先队列里面。依此类推。然后在第5个队列中拿出怪物的时候就表示这个怪物可以被打死,将每...原创 2018-09-04 14:29:18 · 152 阅读 · 0 评论