题面 一看到求“最小值的最大值”这种问题,就能想到二分了. 二分答案,然后我们要把一圈分成三块,使这三块的大小都$\geq mid$.做法是把环展开成2倍长度的链,先钦定一个起点,然后根据前缀和再二分一下前两块的最小大小(注意前两块要连着),第三块用一圈的大小减去前两块的大小即可得到.如果第三块的大小$\geq mid$就返回$true$,提高答案范围:否则返回$false$,降低答案范围. 这样就能卡着最优情况下最小那一块的最大值从而得出答案了. 上面这种做法是$O(n*log_n*log_a…
[题解]LOJ2759. 「JOI 2014 Final」飞天鼠(最短路) 考虑最终答案的构成,一定是由很多飞行+一些上升+一些下降构成. 由于在任何一个点上升或者下降代价是一样的,所以: 对于上升操作来说,只要保证前面飞行合法就不需要上升.当且仅当我飞不过去了才上升. 对于下降操作来说,只要我不会越过目标点就不需要下降.当且仅当我会越过目标点才下降. 也就是说,上升和下降操作是不需要手动进行决策的,不存在一种更优解使得这种解通过提前上升或者下降来使得时间花费缩短.因为假设存在一种"更优解&qu…
「JOI 2014 Final」飞天鼠 显然向上爬是没有必要的,除非会下降到地面以下,才提高到刚好为0. 到达一个点有两种情况:到达高度为0和不为0. 对于高度不为0的情况,显然花费的时间越少高度越高(每下降1m都要1单位时间),而必然高度越高越好,因此只需求花费的最少时间. 对于高度为0的情况,显然花费的时间越少越好. 高度不为0的情况比高度为0的情况要优越,而且事实上,高度不为0的情况花费必然会小于高度为0的情况.因此两种情况可以直接合并. 故可以直接dijkstra跑一遍. 复杂度\(o(…
loj 这题有在一棵树上上升或者下降的操作,稍加分析后可以发现上升操作如果不是一定要做(指高度不足以到下一棵树或者是最后到达\(n\))就不做,下降操作也是如果不是一定要做(指到达下一棵树时高度过高)就不做,因为如果提前做了,可能会导致后面要浪费一些步数使得移动合法.然后这个移动过程就会分成两段,先是一直移动或者下降,不用上升,然后会每次上升再移动,一直到终点 先看前一段的移动,如果移动的时候正好能移到下一棵树就直接移,如果移的时候高度过高就往下移一点直到能正好移动到下一棵树上.这里对每个点记\…
做法一 首先将边界也视作四条裁剪线,整个平面作为一张纸,视存在 \(y = -\infty, y = +\infty, x = -\infty, x = +\infty\) 四条直线. 按照纵坐标依次扫描每条线,每次维护当前纵坐标水平无穷长的直线和每个位置下面第一条之前插入过的纵坐标之间围成区域的连通性,如下图所示: 图中箭头指向的就是当前扫描(维护)到的(水平)线,红绿蓝分别为所围成的区域(有效). 具体地,由于上述扫描过程中连通性只会在:水平线段,竖直线段底部,竖直线段顶部发生改变,因此我们…
「JOI 2017 Final」JOIOI 王国 题目描述 题目译自 JOI 2017 Final T3「 JOIOI 王国 / The Kingdom of JOIOI」 JOIOI 王国是一个 HHH 行 WWW 列的长方形网格,每个 1×11\times 11×1 的子网格都是一个正方形的小区块.为了提高管理效率,我们决定把整个国家划分成两个省 JOI 和 IOI . 我们定义,两个同省的区块互相连接,意为从一个区块出发,不用穿过任何一个不同省的区块,就可以移动到另一个区块.有公共边的区块…
LOJ#3014. 「JOI 2019 Final」独特的城市(长链剖分) 显然我们画一条直径,容易发现被统计的只可能是直径某个距离较远的端点到这个点的路径上的值 用一个栈统计可以被统计的点,然后我们把这棵树长链剖分,每次在所有轻儿子中找深度最大的,去掉距离u小于这个深度的栈里的点,然后去计算u的重儿子 然后去掉距离u小于重儿子深度栈里的点,但是要再把u加进去,再遍历u的其他儿子 最后重新去掉u,计算答案,用直径两端当根都做一遍,取深度较大的那个 统计的话直接在外面开一个数组,弹出弹入的时候判断…
「JOI 2015 Final」分蛋糕 2 题解 这道题让我想起了新年趣事之红包这道DP题,这道题和那道题推出来之后的做法是一样的. 我们可以定义dp[i][len][1] 表示从第i块逆时针数len块的一个扇形,JOI先拿,JOI的所得. dp[i][len][0] 表示从第i块逆时针数len块的一个扇形,IOI先拿,JOI的所得. 我们发现,dp[......][len][......]可以从dp[......][len - 1][......]转移过来,所以考虑先len 从小到大枚起. 详…
「JOI 2015 Final」城墙 复杂度默认\(m=n\) 暴力 对于点\((i,j)\),记录\(ld[i][j]=min(向下延伸的长度,向右延伸的长度)\),\(rd[i][j]=min(向左延伸的长度,向上延伸的长度)\)(遇到不能放的停止) 那么枚举左上端点\((i,j)\)和右下端点\((i+len-1,j+len-1)\),能够被计入答案要求\(ld[i][j] \geq len , rd[i+len-1][j+len-1] \geq len,len>=L\). 复杂度\(o(…
「JOI 2015 Final」舞会 略微思考一下即可知该过程可以化为一棵树.(3个贵族中选择1个,即新建一个节点连向这3个贵族). 该树的结点个数为\(2n\). 考虑二分答案mid. 判定的是公主是否能和熟练度大于mid的人跳舞. 这样子是满足单调性的. 将熟练度大于等于mid的人设为1,小于mid的人设为0. 考虑dp. 每个结点记录需要多少个1才能使得它的值为1. 事实上,儿子只需要有两个1即可,故从三个儿子中取最小的两个. 复杂度\(o(nlog(n))\). #include<bit…