PA2014部分题解

前言

之前有一些写过了大概扔在奇奇妙妙的地方…
可能翻一下blog能翻得到的
瞎写一下最近的题吧

bzoj3717: [PA2014]Pakowanie

2 24 2^{24} 224这个状压和爆搜尴尬的地位… 90 s 90s 90s果断状压了
把包从大到小排序,记一个 p a i r pair pair d p [ m a s k ] dp[mask] dp[mask]表示装完状态里的这些东西需要用到哪个包,并且最后一个包剩下多少容积,这显然是从大往小装并且能装的越多越好嘛…
转移枚举 0 0 0位,可以 l o w b i t lowbit lowbit优化
听说复杂度是靠谱的 2 n − 1 n 2^{n-1}n 2n1n

bzoj3718: [PA2014]Parking

随意想一下,我们可以首先把这些矩形拉到互不相交的位置
即保证每个矩形上下都是没有矩形的
那么,假如两个矩形先后顺序最后需要调换的话,显然这个厚度需要能让他们调换
即满足任意两个需要交换的矩形都能交换,那么这是合法的
线段树随意维护一下?
树状数组也可以的

**bzoj3711: [PA2014]Druzyny

这个题妙
首先有一个 n l o g 2 n nlog^2n nlog2n的做法,即直接分治然后讨论转移
这个 d d d的性质,如果我们令 g [ i ] g[i] g[i]表示只考虑 d d d的限制, i i i最远能从哪里开始转移
显然 g [ i ] g[i] g[i]单调不减,可以用一个单调队列预处理出来
那么我们考虑怎么满足 c c c的限制
约定 m i d mid mid表示 [ l + 1 , r ] [l+1,r] [l+1,r]区间的最大值的位置,则 s o l v e ( l , r ) solve(l,r) solve(l,r)表示处理 [ l , m i d − 1 ] [l,mid-1] [l,mid1] [ m i d , r ] [mid,r] [mid,r]的转移
显然我们这一段区间需要满足 c c c的限制均为 c [ m i d ] c[mid] c[mid]
那么思考如何转移
对于 g [ i ] > = m i d g[i]>=mid g[i]>=mid,直接结束转移
对于 g [ i ] > = l g[i]>=l g[i]>=l的,显然能转移的区间是已知的一段,那么直接在线段树上查找
对于 g [ i ] &lt; l g[i]&lt;l g[i]<l i − ( m i d − 1 ) &lt; c [ m i d ] i-(mid-1)&lt;c[mid] i(mid1)<c[mid] i i i每向后移动一位只会多一个可以转移的位置,用一个变量 O ( 1 ) O(1) O(1)维护转移即可
对于 g [ i ] &lt; l g[i]&lt;l g[i]<l i − ( m i d − 1 ) &gt; = c [ m i d ] i-(mid-1)&gt;=c[mid] i(mid1)>=c[mid]的,显然满足这样的数是连续一段并且在该区间仅有一段,二分出右端点在线段树上打标记修改
然后又是一个炫酷的复杂度分析
对于第二个操作,虽然目测是 n l o g 2 n nlog^2n nlog2n的复杂度,但是对于每个点,满足 l &lt; = g [ i ] &lt; m i d l&lt;=g[i]&lt;mid l<=g[i]<mid的区间仅会有一个,所以复杂度是 n l o g n nlogn nlogn
对于第三个操作,在每个区间中指针最多只会移动 m i n ( x , l e n − x ) min(x,len-x) min(x,lenx),那么这个是启发式合并的复杂度,也是 n l o g n nlogn nlogn
对于第四个操作,显然是 n l o g n nlogn nlogn
所以就变成优越无比的 n l o g n nlogn nlogn了??
感觉考场上遇到这个复杂度分析的题就算想到了也会认为是 n l o g 2 n nlog^2n nlog2n的然后自闭?

**bzoj3716: [PA2014]Muzeum

好题
首先一看就是个最大权闭合子图的裸模型
然后naive的以为是奇妙技巧建边跑假的复杂度的网络流?
然后就想不出来奇妙技巧了…
然后…发现这个东西我是根本不会想的啊…从来都是最小割=最大流,从来没有转化回去更改题意来做…
首先,我们可以把每个点的坐标变为 ( x i ∗ h , y i ∗ w ) (x_i*h,y_i*w) (xih,yiw),因为视野可以看成一个 ( − w , − h ) (-w,-h) (w,h)的向量,相互乘一下就变成 ( − 1 , − 1 ) (-1,-1) (1,1)的向量,那么视野就变为了直角
然后再旋转一下坐标系,使得视野变为在第二象限
x x x从小到大扫,现在我们变换了问题
从每个保安流流量到物品那里,求最大流多少
那么每个保安,肯定先流 y y y最小的,流完之后再流 y y y次小的
以此类推
过程用一个set维护
要记住这种 把最小割换为最大流,然后转化为贪心问题的套路啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值