pa2010 切题记

来源:互联网 发布:java中的代理模式 编辑:程序博客网 时间:2024/04/29 06:19

       没有题解好虚啊。。。剩下的题要么不会,要么做起来太慢感觉没意义,弃了吧。

Algorithmic Engagements 2010

Tasks

Rectangles(Round 0)(10/10)Orienteering [B](Round 1)(10/10)Mushrooms [B](Round 2)(10/10)Coins [A](Round 2)(10/10)Fragments [A](Round 3)(10/10)Squared Words [B](Round 3)(10/10)Evacuation [A](Round 4)(10/10)Map [B](Round 4)(10/10)The Goat [A](Round 5)(0/10)Map 2 [B](Round 5)(10/10)Termites [A](Round 5)(10/10)Byties Display [B](Round 5)(10/10)Byton Tree [B](Round 6)(10/10)Firm [B](Round 6)(10/10)Planning the Roadworks [A](Round 6)(0/10)Riddle [A](Round 6)(0/10)Variable Subsequences(Final round - practice session)(10/10)Rectangles 2(Final round - practice session)(10/10)Sweets(Final round)(10/10)Acyclic Decomposition(Final round)(10/10)Divisors(Final round)(10/10)Byteball Match(Final round)(10/10)Army Training(Final round)(10/10)Blindfold Nim(Final round)(10/10)Termites 2(Final round)(10/10)Rectangles 枚举长宽直接统计即可。

Orienteering [B] 破环成链倍长,然后统计每个点向前最多延伸多少。

Mushrooms [B] 显然他一定是走到一个点i,然后在i-1和i之间来回扭脖。注意在原点和1之间来回扭脖的情况。

Coins [A] 令'R'=k,'O'=-1,然后统计最长的子串使和为0的,hash+扫描即可。

Fragments [A] 对不同的长度分别处理,求出断点以及断点上的增值即可,断点只能为10^k或者某一段的数字。注意略卡空间。

Squared Words [B] 大力枚举断点跑lcs,加一些剪枝O(N^3)过了。。

Evacuation [A] 对于(i,j),如果1和i且j和n连则至少断(1,i)(i,j)(j,n)中的一个。(1,i),(i,n)同理,注意(1,n)的情况。

Map [B] 排序后统计比某个点x小的y的最小最大值;反过来再求一遍即可。

Map 2 [B] 枚举x坐标,则y坐标的范围一定。在相邻x坐标之间的一起统计即可。

Termites [A] 最优决策下不会有个人选相邻的点(否则会被另一个人破坏掉?),然后如果x比两侧都大就用两侧-它替换。

Byties Display [B] 显然越大的越多越好。从9~0枚举,然后二分最多有几个跑网络流。

Byton Tree [B] dp。注意一个点剪掉的时间要比它的子树中其余点要晚,然后求出最优决策的时间段即可。

Firm [B] 离根节点的距离相当于深度。按深度离线,求dfs序然后按时间加入即可。

Variable Subsequences dp。dp[i]的前面一个可以是1~i-1,然后减去和它一样的即可。维护两个前缀和。

Rectangles 2 枚举长,宽是一个范围内的1~k的前缀和。

Sweets 我只会sb做法。首先分成两堆,三个人差分表示成(i,j),然后在另一堆找最小的x+y使x+i>=0且y+j>=0.

Acyclic Decomposition 如果不可以一组,那么所有(i,j)且i<j的分成一组即可。

Divisors 把1和n带进去看是否一样。

Byteball Match 显然每个球队都可以刷净胜球,然后就是网络流经典问题了。

Army Training 用射线法,预处理统计每条(i,j)右侧有多少点,最后加起来在减去反过来右侧的点,这样每个点算了两遍要/2。注意顶点的问题。

Blindfold Nim 打表发现每次都是选最大的-1。实际上如果你不选那么后手就可以这么走不会更差。

Termites 2 挺不错的一道思维题。由于是一棵树,所以一个连通块一定恰好一个点没有被选。对于每个人,维护一个数组表示在最优策略下他能否保住某一个点,并维护一个链表。加入边的时候讨论一下。

       QAQ水平太差了。

       代码戳→  

by lych

2016.1.1

0 0
原创粉丝点击