Assignment Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Mean: 给你一个数列和一个k,求连续区间的极值之差小于k的数的个数. analyse: 用两个优先队列来维护区间的最大值和最小值,每次插入新值的时候检查区间内的极值差是否满足条件,不满足就将最左边的数删除,直到满足条件为止.ans每次加上区间的长度即得最终答案. Time complexity: O(N) Source code:  /* * t…
2018 Multi-University Training Contest 5 6351.Beautiful Now 题意就是交换任意两个数字,问你交换k次之后的最小值和最大值. 官方题解: 哇塞,C++竟然自带全排列的函数,头文件为#include<algorithm> 全排列 next_permutation() 函数.随便传送两篇博客: 1.[算法]——全排列(Permutation)以及next_permutation 2.next_permutation 代码: //1002-63…
2018 Multi-University Training Contest 4 6333.Problem B. Harvest of Apples 题意很好懂,就是组合数求和. 官方题解: 我来叨叨一些东西. 这题肯定不能一个一个遍历求和,这样就上天了... 解释一下官方题解的意思. 为什么 sum(n,m)=2*sum(n-1,m)-c(n-1,m). 因为c(n,m)=c(n-1,m)+c(n-1,m-1),至于为什么成立,不懂的百度一下组合数和杨辉三角吧... sum(n,m)=c(n,…
Buildings Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5301 Mean: n*m列的网格,删除一个格子x,y,用矩形来填充矩阵.且矩形至少有一边是在矩阵的边缘上. 要使最大矩形的面积最小,求满足条件的矩形填充方式中面积最大的矩形. analyse: 任何矩形都可以分为宽度为1的小矩形,所以只考虑矩形的可以的最小长度即可. 讨论: 不删除格子时:最小长度为min((n+1)/2,(m+1)/2) = len n =…
RGCDQ Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5317 Mean: 定义函数f(x)表示:x的不同素因子个数. 如:f(2) = 1, f(6) = 2: 给定L和R(L<=i<j<=R),求区间内任意不相等的两个数f(x)的最大公约数的最大值. analyse: 因为2*3*5*7*11*13*17 >1e6,所以f(x)的值最大为7; 我们先打表求出每个数的f(x)值: f[i][j]表示2~i中…
多校训练就这么华丽丽的到了 ,于是乎各种华丽丽的被虐也開始了. 这是多校的1002; 最小费用最大流. 题目大意: 有n*m个方格,每一个方格都一个的十进制一位的数.你能够操作K次. 对于每一次操作,你能够选择一个出发点向下或向右Jump.跳的花费是|x1-x2|+|y1-y2|-1的能量 .假设你跳的这两个位置上数字同样,那么你就会获得数字表示的能量值. 对于每一次操作,你能够这样跳随意次 ,可是每一个位置仅仅能经过一次在这K次操作中. 初始能量值是0,当操作完毕后,假设n*m个方格没有都经过…
不easy啊.最终能够补第二个题了.! 顺便说一句:模版写残了就不要怪出题人啊 ~ (这残废模版研究了好长时间才找出错) 题目大意: 有一个n*m的矩阵.每个格子里都将有一个数.给你每一行数字之和和每一列数字之和. 求每个位置能填0~k之间的哪个数.假设有多种可能输出"Not Unique",假设没有解输出"Impossible",假设一组解则将其输出. 解题思路: 最大流: 不可能的条件:是行之和和列之和不想等或者建图后的最大流与他们不想等. 多组的条件是:在最大…
果然,或滥用零件,啥都不说了.我们欣慰地学习阅读.这两天残疾儿童是数学. 这是求所需的问题,不明确.贴上官方的解题报告. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluMzc1NjkxMDEx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" align="middle" alt=""> 留着慢慢研…
题意: 给出一个十进制数,数位两两可以交换,给出最多能交换多少次,以及交换后的数不能有前缀0,问能形成最小和最大的数 * * * 尝试的思路 贪心,将字符串先排出最大以及最小的情况,然后按一定顺序将对应位置换过去,不知道为什么wa * * * 枚举全排列,将验证能否在规定步数能换过去,假如可以则更新最小最大值,不会判断能否换过去,计算循环节,循环节内的交换次数为(循环节长度-1) * * * 通过观察发现,一个长为n的串,假如最多能交换n-1次,它就能变成任何的串,那么就缩小了k的范围.然后解决…
题意:给出一个数列.问当中存在多少连续子区间,当中子区间的(最大值-最小值)<k 思路:设dp[i]为从区间1到i满足题意条件的解.终于解即为dp[n]. 此外 如果对于arr[i] 往左遍历 一直到arr[r] 此时从区间r到区间i满足(最大值-最小值)<k,再往左一位即越界 或者 不满足条件,此时有 dp[i] = dp[i-1] + i - r + 1; 由于数据量大 往左遍历时 可能会超时 ,所以用rmq打表 查找r时用二分 就过了 代码: #include <algorithm…