WELCOME——一只蒟蒻的幻想
听说HAOI有洪水,像我这种蒟蒻最喜欢了,于是最近就开始刷HAOI了。。。
妈的用MarkDown贴题面真TM蛋碎
据说支持内嵌html然后我把html贴上去之前的内容就华丽丽地消失了(:з」∠)
或者说是我这个编辑器的锅吗,我还是选择稳妥的不贴题面了
好,停止吐槽
说起来这道题原来是我给初三讲课里面的题目
原来一直懒得去做,现在趁着刷水一起做了
对于第一问,感觉应该可以算是很经典的问题了,二分长度,然后贪心验证就好了
然后对于第二问,我们可以很容易地想到一个O(NM)复杂的Dp,用f[i][j]表示前j个木棍分成i段的方案数,然后就可以得到 $$f[i][j]=\sum^{k<j}_{k=0} f[i-1][k] (sum[j]-sum[k]<=len)$$ 我们可以显然的发现,这个是会华丽丽地T掉的。但是我们可以发现对与递增的j,k的位置也是递增的,所以我们可以使用队列优化DP。
然后因为空间问题,还要对第一维滚存
不过具体的复杂度我并不会证,可能还是不对的。但是至少还是过去了。。(:з」∠)今天晚上听见初三爷在纠结滚存怎么滚,感觉我的作业是不是太凶残了
1 |
|
一道计算几何的题目
上次做计算几何是什么时候来着(:з」∠)应该已经是好几个月以前的事情了吧。。
我们观察数据范围可以知道
因为n只有1000所以直接$N^2$,对每一个圆盘暴力枚举每一个在它上方的圆盘,然后求出被遮盖的弧长
对于两个相交的圆,我们可以知道他们的半径和圆心之间的距离。然后就可以很轻易的使用反三角函数求出图中的$\angle EAC$。然后再求出直线$AC$的极角,就可以表示出被遮盖的位置。因为这样求出来的弧度可能是负数,所以需要把它转换到$[0,2\pi]$的范围内。然后就简单地统计一下就好了。
复杂度: $O(N^2)$
1 |
|
感觉有点厉害的一道题,诶其实只是我弱(:з」∠)
对于第一问,要求最小化改变的数量,可以转化成最大化不变的数量。然后我们考虑对与这个进行DP,设f[i]表示i位置不变的最大不变数量,然后可以得到一个的DP方程$$f[i] = Max f[j]+1 (a[i]-a[j]>=i-j)$$后面的限制条件是因为要满足递增。
然后我们将a[i]-a[j]>=i-j移项得到a[i]-i>=a[j]-j可以发现原问题就转化为了对a[i]-i数组求最长不下降子序列。直接写一个$O(N\log_2N)$的模板上去就好了
然后对与第二问。。
在满足第一问的前提下的最小改变量,考虑那一些位置可以转移到i,然后就会得到一个DP方程$$g[i] = Min g[j]+w[i][j] (f[j]+1=f[i]) $$其中w[i][j]表示把i到j这一段改成符合条件的最小代价。
然后对此有一个性质,w[i][j]的方案一定会以某一个k分界,使得[j,k]之间的均为b[j],[k+1,i]之间的均为b[i],证明嘛。。。
还是直接贴神犇的证明吧
1 |
|
有错误请指出$$\mathcal {FIN}$$