
2016-多校
_zidaoziyan
这个作者很懒,什么都没留下…
展开
-
Hdu 5775 Bubble Sort(Multi 4 L 给你一个1到n的排列,然后按照冒泡排序的移动方式,问每个i 能移动到的最左位置和最右位置的差是多少)
传送门:Hdu 5775 Bubble Sort原创 2016-07-28 18:18:58 · 1815 阅读 · 2 评论 -
Hdu 5820 Lights(矩形中有多少个点)
传送门:Hdu 5820 Lights 题意:给你n个点,如果这是一条好的路径的话,任意两个点之间能到达且拐歪处一定有点,且走的距离为|x1-x2|+|y1-y2| 思路:我们对一个点找出它上下左右分别离它最近的是哪一个点,然后就组成了一个矩形,这要判断这个矩形里面是不是还有其它的点就可以了#include<bits/stdc++.h>using namespace std;const原创 2016-08-10 10:47:16 · 952 阅读 · 0 评论 -
Hdu 5811 Colosseo(给你一个n*n的矩阵,分成两部分,记为T1,T2,T2最多能给T1多少个点,使得给完之后的两个图仍然是竞赛图)
传送门:Hdu 5811 Colosseo 题意:给你一个n*n的矩阵,分成两部分,记为T1,T2, 如果两部分都是一个竞赛图,那么T2最多能给T1多少个点,使得给完之后的两个图仍然是竞赛图 思路:首先可以根据拓扑排序分别判断每一个图是不是一个合法的图,即为T1,T2 如果都是合法的话,把T2中的每个点都尝试插入到T1中,如果能成功,显然位置是唯一的, 那么我们只要对T2中的原创 2016-08-10 20:26:28 · 608 阅读 · 0 评论 -
Hdu 5819 Knights(前缀相同,骑士决斗,最后剩下第n个骑士)
传送门: Hdu 5819 Knights 题意:给你n个骑士,n+1个格子,刚开始第i个骑士站在第i个格子上,然后每个骑士都有一个初始的方向(向左或者向右,碰到格子的终点会反向),然后两个骑士相遇会进行决斗,每个骑士胜利的概率都是1/2,问最后剩下第n个骑士的概率 思路:因为最后一个骑士肯定是往左走击败之前剩余的所有骑士,所以只要考虑前面i−1个格子之后向右的骑士有j个的概率,考虑利用dp思原创 2016-08-10 16:37:18 · 753 阅读 · 0 评论 -
Hdu 5812 Distance(三种操作. 1.插入x 2.删除x 3.在集合中找到一个数y,使得y->x,每次能除以一个素数或者乘上一个素数,问最少的操作次数)
传送门:Hdu 5812 Distance 维护一个集合,有三种操作. 1.插入x 2.删除x 3.在集合中找到一个数y,使得y->x,每次能除以一个素数或者乘上一个素数,问最少的操作次数 思路:记f(x)为从1变到x所需要使用的最小的次数(可在线性筛的时候预处理) 要使y->x,即相当于对于每个x的因子z,从集合中找出一个y使得f[y/z]+f[x/z]最小,对于f[x/z]很好原创 2016-08-10 14:58:28 · 706 阅读 · 0 评论 -
Hdu 5862 Counting Intersections(有n条线段,每一条线段都是平行于x轴或者y轴,问有多少个交点)
传送门:Hdu 5862 Counting Intersections 题意:有n条线段,每一条线段都是平行于x轴或者y轴,问有多少个交点 思路:按x排序,只统计竖直的与水平相交的情况, 比如竖直的(x1,y1)-(x1,y2),就是统计sum(y2)-sum(y1-1) 水平的:(x1,y1),(x2,y1),就是在x1这个位置add(y1,1),在x2这个位置add(y1,-1)原创 2016-08-20 12:32:51 · 1070 阅读 · 0 评论 -
Hdu 5857 Median(给你一个有序的序列,取出连续的两段l1,l2,r1,r2,求这两段合并之后的中位数)
传送门:Hdu 5857 Median 题意:给你一个有序的序列,取出连续的两段l1,l2,r1,r2,求这两段合并之后的中位数。 思路:比赛的时候没有看到有序,用了主席树求第k大#include<bits/stdc++.h>using namespace std;const int maxn=101000;int root[maxn],sz;long long t[2*maxn],a原创 2016-08-20 11:59:54 · 775 阅读 · 1 评论 -
Hdu 5866 Lucky E(树上点期望的最大值)
传送门:Hdu 5866 Lucky E 题意:给你一棵树,有n个节点,m种操作,树上的每个点相当于一个士兵,有一个伤值, m中操作,每种操作都有一个点的标号和一个概率,表示可以对这个点的子树造成1点伤害, 求受伤最高的士兵的伤值的期望 题解:摘自http://www.cnblogs.com/duoxiao/p/5784466.html 考虑到操作数M较小而树较大,所以可以转载 2016-08-20 10:08:13 · 783 阅读 · 0 评论 -
Hdu 5834 Magic boy Bi Luo with his excited tree(从树上每个点出发,获得的最大的利润为多少)
传送门:Hdu 5834 Magic boy Bi Luo with his excited tree 题意:给你一棵树,有n个点,每个点都有一个利润,每条边都有一个花费,问从每个点出发, 获得的最大的利润为多少(每个点上的利润只能取一次,每条边每走一次就要花费) 思路:我们任意选取一个根,每个点都保存四个值,down[i][0],down[i][1]分别表示向下不回到这个点和回到这个点原创 2016-08-18 10:59:46 · 574 阅读 · 0 评论 -
2016 Multi-University Training Contest 5 题解
E.题解:原创 2016-08-02 19:53:36 · 781 阅读 · 0 评论 -
Hdu 5782 Cycle(给你两个长度相同的字符串,对于长度为i的前缀,如果这两个字符串的前缀是循环相等的,那么输出1,否则输出0)
传送门:Hdu 5782 Cycle题意:给你两个长度相同的字符串,对于长度为i的前缀,如果这两个字符串的前缀是循环相等的,那么输出1,否则输出0思路:两个子串循环相同->第一个子串可以被分为a1,b1,第二个子串可以被分为a2,b2,且a1=b2,b1=a2 先用一个biset处理出对于每一个字符,它在B这个字符串中出现的位置可能是哪些 然后bitset处理出a中的0-i可以和b中的那些匹配(原创 2016-08-05 18:57:15 · 983 阅读 · 0 评论 -
Hdu 5782 Cycle(改变一个人的能力值(变为100000),使得整个公司的能力值的和最大)
传送门:Hdu 5782 Cycle题意:给你一个公司的架构,为一棵树,每个人的能力值是它子树的中位数(包括这个点),你现在可以改变一个人的能力值(变为100000),使得整个公司的能力值的和最大思路:如果一个节点的能力值改变,那么它的子树中有一个能力值小于等于现在的当前节点的能力值改变 那么我们只要从根到叶子进行dfs(先求出每个节点的能力值和其中位数变化之后增大的值), 如果访问到了这个节点原创 2016-08-05 18:23:15 · 658 阅读 · 0 评论 -
Hdu 5790 Prefix(每次查询问你第L个字符串和第R个字符串之间的公共前缀有多少个)
传送门:Hdu 5790 Prefix题意:给你n个字符串(1≤N≤100000),字符串的总长度小于等于100000 接下来有q个查询(1<=q<=100000),每次查询问你第L个字符串和第R个字符串之间的公共前缀有多少个思路:将每个前缀都表示成在字典树上的值,然后插入到主席树中->主席树区间内有多少个不同的值#include<bits/stdc++.h>using namespace st原创 2016-08-05 14:20:54 · 760 阅读 · 0 评论 -
2016 Multi-University Training Contest 4 题解
A.传送门:Hdu 5763 Another Meaning题意:给你两个字符串A和B(len<=100000),如果A中有和B相同的子串,则可以用’*’替换A中的这个子串,A中相邻的替换子串不能重叠 问替换之后A可以有多少种不同的表示思路:经过分析可以发现,如果可以替换,那么替换之后的每个A串都是不相同的 然后从后往前遍历,维护一个后缀和,dp表示这个点之后能产生的不同的子串的方案数 对于每原创 2016-08-01 16:37:27 · 339 阅读 · 0 评论 -
hdu 5773 The All-purpose Zero(Multi J,给你n个数(n<=1e5),每个数小于等于1000000,其中数为0的那些数可以变成其他任意的数,问变化之后的最长上升子序)
传送门:hdu 5773 The All-purpose Zero题意:给你n个数(n<=1e5),每个数小于等于1000000,其中数为0的那些数可以变成其他任意的数,问变化之后的最长上升子序列。思路一: 首先猜想一个结论:那些为0的数一定全部在最长上升子序列中 反证法:假设至少一个0不在最长上升子序列中,那么将这个0的后面一个位置的数替换为0,最长上升子序列的长度一定不变。那么我们可以想到一原创 2016-07-29 10:04:15 · 740 阅读 · 0 评论 -
Hdu 5785 Interesting(给你一个字符串,你可以选择这个字符串的一个子串,记为s[l...r] 你可以选择一个k(i<=k< j)将这个子串划分成两半,如果这两半都是回文串,那么答案)
题意:给你一个字符串,你可以选择这个字符串的一个子串,记为s[l…r] 你可以选择一个k(i<=k< j)将这个子串划分成两半,如果这两半都是回文串,那么答案加上l*r, 同一个子串可以被划分多次,问最后的答案为多少。思路:首先我们先对原来的子串进行一次manacher,那么假设以i这个点为分割点 分成s[l…i]和s[i+1…r],那么这个对答案的贡献便为(x1+x2+…+xn)*(y1+y原创 2016-08-02 19:54:55 · 2201 阅读 · 0 评论