把题补了,感觉要自己梳理一下,就写一下题解,
后续会把其他自己能补的也补了.
目录
D.Link with Game Glitch(SPFA判断负环,小数转log存储)
G.Link with Monotonic Subsequence(构造,签到)
J.Link with Arithmetic Progression(数学,线性回归方程)
K.Link with Bracket Sequence I(括号匹配,dp)
思路:我们现在a个b物品转化为c个d物品,可以看成一个b物品可以转化为(c/a)个d物品,题目问c缩小几分之几可以保证不会无限的增长下去.首先明了,如果可以无限生成的话就肯定是形成了一个循环,而且这个循环是成倍增长的,也就是说这个环的增长倍数(c/a)是>1的,这样的话就会无限的增长.此时我们就可以把这个问题抽象成一个图论问题.:
我们按照题目给的生成关系建立单向边,边权就是每一组的(c/a).当然,如果连续处理多个这种小数相乘的话很容易丢精,那么就可以尝试把边建立为log,就w=log(c/a).这样的话边权就不是一个小时,而是一个带小数点的负数,不那么容易丢精.
然后我们对着这个图用spfa跑最长路(因为本来按照题意路径就在增长(c/a大于1的话)).然后用spfa判断负环.这里判断负环是根据spfa的性质,如果边权(也就是c/a)>1的话那么spfa的"缩点操作"就会无限伸长.那么这里就可以判断次数即可判断负环.而对于题目所说的要更改的w,(按照题意就是让每个边变为c/a*k,k为我们所求的倍数答案,范围是[0,1]).那么根据之前的log保证精度的写法,这个式子就变成了log(c/a)+log(k).这个k的取值对结果产生单调性,那么我们就可以采用二分k的大小,然后用SPFA判断负环进行check即可求出答案.
ps:这里向严格鸽学了个小数二分的方法,不用l 一定可以保证精度了. AC code: 思路:把数组分块,每一块内保证递增,然后每一开之间保证递减即可.当两者分块接近于 7,8,9,4,5,6,1,2,3.此时答案最小. AC code: 思路:n个人,一个电梯,电梯最多容纳m个人,楼高k. 我们可以把每个人上楼下楼的操作分成两类,然后都看成下楼的操作.然后进行模拟,从最高处向下走.当遇到一个区间的上端点,(把那个上下楼操作看成一个区间)就说明此时需要上来一个人.下端点就看成电梯上要下一个人.我们就记上人为+1,下人为-1.每个点就会存在一个值,再把这些值按照序号进行排序.从最高处往下遍历.当同一个点有上下人多个操作时,先下人在上人. 当到某个点时,电梯上的人超过了上限,那么就需要在这个高度的点在开一个电梯.那么我们把对于上升下降处理的两种情况.因为我们每次坐电梯都有上升下降两种操作,那么每次我们之前储存的上升下降的电梯楼层进行两两匹配,然后每次取能到的最高点,计算要经过的层数即可. 直接高中考点. 思路:f(i,j,k)的含义是原串长度为j,和子串相匹配的长度为i,此时原串左括号比右括号多k的方案的总数. 详细思路在注释里: 思路:用dp写,详细思路见代码(有点抽象):
G.Link with Monotonic Subsequence(构造,签到)
的时候对于结果的贡献就会更小.比如(1-9),我们分成三块1,2,3 4,5,6 7,8,9,然后把这三块倒序排列:H.Take the Elevator(模拟,贪心)
J.Link with Arithmetic Progression(数学,线性回归方程)
K.Link with Bracket Sequence I(括号匹配,dp)
L.Link with Level Editor I
接口的触发形式类型有哪些?
极速视觉:揭秘YOLO如何革新目标检测速度
项目经理如何去拆分复杂项目?
我的大二web课程设计 使用HTML做一个简单漂亮的页面(纯html代码)
Java8新特性stream和parallelStream有什么区别
给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。
Kotlin语言实现单击任意TextVIew切换一个新页面,并且实现颜色变换
驱动开发day8
Flink中的时间和窗口操作