杭电个人排位赛第三场

杭电个人排位赛第三场


Problem A.Anagram

  • 给定两个字母的集合,每次可以在一个字母上加一,'A'->'B','Z'->'A'这样。求最小变换,使得两个集合相等。
  • 带权二分图最小匹配。
  • 实际上贪心莽过。对于1集合的每个字母,都在2中找一个最近的,打标记。迭代即可。

Problem B.Bullet

  • 有一个n*n的地图,上面分布有怪,每个怪都有一定的经验,如果这个地方没有怪,那么经验为0。每行或每列最多打一个怪,打完一些怪能获得的经验值为这些怪中最少的经验值。求在打尽可能多的怪的情况下,获得尽可能大的经验值。0<=经验值<=1e9。
  • 二分图匹配加二分查找。
  • 可以发现,对于每行每列最多打一个怪,直接就能想到二分匹配。二分经验,然后对于大于等于的怪,标记1,二分匹配即可。

Problem D.Dance

  • 有一颗树,根为0,树上的每条边都有价值,树上的每条边都有最大经过次数,现在,你需要从叶子结点出发,走到根节点,走一次得到的价值为树上路径的价值和,求最大价值。
  • 假算法 网络流。源点往叶子建边,根往汇点建边,次数为每条边的容量上限,价值为费用,最大费用最大流。
  • 考虑贪心,我们优先选取从叶子到根最大价值的路线去走,直到某一刻,这条路径上的某条边被走完了。然后走次大的,再走第三大的,直到所有的走完为止。
  • 走的过程中,可以暴力查询路径上最小的边,由于题目数据较弱,并不会超时。
  • 当然,也可以用树剖。树剖完之后,查询树上路径的最小值,然后,树上路径统一减去这个最小值。

Problem E.Sequence

  • 出的相当强的一道题。不过数据太弱了,很多奇怪的方法都能莽过,(包括我瞎写的树状数组)。
  • 现在有一个数组是一个排列,对于位置i,如果存在位置j < i,并且Aj > Ai,那么这个位置good。现在,你需要删去一个数,使得剩下的数组good值尽可能大,删去的数要尽可能小。
  • 我们考虑删去每一个数之后,good值会变化多少。首先,如果这个数之前有小的数,那么删去之后,这一位的good就少了,那么记为1。其次,我们这样子考虑,对于一个数a,如果在数a之后的数b仅仅比a大,那么把a删去之后,b的good值也消失了,所以位置a++。当然如果a之后的数不仅仅大于a,也大于别的数,那么删去a或别的数时,b仍然为good,所以不管。
  • 最后,我们看哪位的值最小且数字最小即可。

Problem F.Four-tuples

  • 按顺序给4个区间,l1,r1,l2,r2,l3,r3,l4,r4。按顺序从4个区间中选取数,组成(x1,x2,x3,x4)。另 x1≠x2,x2≠x3,x3≠x4,x4≠x1. 求有几种组成方式。
  • 考虑容斥,总共4个条件,依次考虑,我们先将所有的区间相乘。减去x1与x2相等的状态,减去x2与x3相等的状态,减去x3与x4相等的状态,减去x4与x1相等的状态,C(4,1)总共4种。
  • 再加上x1=x2,x2=x3的状态,加上x2=x3,x3=x4的状态,加上x3=x4,x4=x1的状态,加上x4=x1,x1=x2的状态,加上x1=x4,x2=x3的状态,假设x1=x2,x3=x4的状态。C(4,2)总共6种。
  • 再考虑3个的情况,C(4,3)。
  • 再考虑4个的情况,C(4,4)。

Problem G.Games

  • A和B在博弈,n堆石子的nim博弈,A先走,现在B有个权力,他可以率先移走d堆,问能使他赢的移法的总数。
  • B能赢,即他移走的堆的异或和为总的异或和。那么题目就变为,有n个数,你从中挑出至多d个,使得这些数的异或和为1。
  • 考虑动态规划,dp[i][j][k],代表前i个数中,j个数的异或和为k的方案数。那么dp[i+1][j+1][k^a[i]]+=dp[i][j][k]+dp[i][j+1][k^a[i]]。记得用滚动数组。

Problem H.Dominoes

  • 有一张n * m的地图。
  • 地图上分布有1 * 2的骨牌,只有一个格子上有一个空,现在,你可以移动骨牌,骨牌不能重叠,问,最多有多少个位置可能出现空。
  • bfs暴力移动就完了。
原文地址:https://www.cnblogs.com/nowheretrix/p/9323494.html