FZU Monthly-201909 tutorial
FZU Monthly-201909 tutorial
题目(难度递增) | easy | easy-medium | medium | medium-hard | hard |
---|---|---|---|---|---|
思维难度 | AB | CD | EF | G | H |
A. IQ-spray
签到题
给喷雾按照恢复理智的量排个序,按量从多往少买即可。
O(N^2)的冒泡我们也放过去了。
B. OF-1 火山制造
这道题为临时更改,所以题面上漏洞较多,包括M,N,A,B不应该是正整数,而是自然数、M大于等于N时即可喷发,而不需要超过等,在此表示抱歉,至于该题的原题,你们应该能够在下次月赛见到。
这道题属于比较简单的细节题,但是按照出题人在现场观察的情况来看,大部分选手都在稿纸上讨论奇偶性问题,某些选手甚至写出了一百多行的代码,然而最快的一位仅7分钟就完成了这道题。
事实上这道题首先应该判断初始值是否已经喷发,随后考虑A即可,很简单的可以想到,如果AB都是0,那么肯定GG。进一步可以想到,如果A是0或者1时,如果B是奇数,那么会陷入死循环,也是GG,否则由于B是偶数,那么答案一定是偶数,剩下的交给暴力循环就可以了。
C. OF-EX1 演出继续
这道题的题意简单来说就是N个数中取出M个,使得这M个数方差最小,输出这个方差的M*M倍。本题中的“数”为一条直线上的二维点,和一维数字差别不大。
根据方差公式的变形,DX = E(X^2) - E(X) ^ 2,预处理前缀和即可在时限内完成此题。
这道题原本的定位是属于简单题,所以放在C的位置上,但是现场却没有人做出来。赛后询问原因,得到的回答包括忘记了方差公式、不确定是总体方差还是样本方差等等。有若干位选手已经很接近AC了,但是他们均只对横坐标进行排序,有一组数据是所有的点都在Y轴上,于是。。。。
D. move on circle
容易证明合并方式为某一个人的位置保持不动,两边的人向他靠拢,只要枚举不动的人,再枚举从顺时针方向与逆时针方向靠拢的分界线,分别统计两边的移动步数即可取和最小即可
E. treesum
树dp,对每个节点,分别有与子树有或无相连路径,根据子树的状态求根节点怎样构造路径使得两种状态下树的路径和最大即可
F. Mountain
我们知道一个无序序列通过交换相邻位置变换到有序序列的最小操作次数为该无序序列的逆序对数。那么问题就转换成构造一个单峰序列,使得其相较于初始位置的逆序对数最小。明显的贪心思路:先将所有山按高度从大到小排,然后每次取出一个山,看是放在已排好山峰的最左还是最右,判断标准就是看放入哪边所产生的逆序对数最小,这个用树状数组即可O(logn)求得。总时间复杂度O(nlogn)。
G. powerful bit operation
套路题
这题是一道2-sat的经典题,队员们有必要通过这题去学习一下2-sat。
由于是位运算,位之间的关系是独立的,可以想到要去逐位判断。
那么我们可以枚举矩阵的元素,获取原序列那两个数的一些关系:
1.如果是与运算得到的结果
1.1 0的情况,那么一个数取了1,另一个数就要取0
1.2 1的情况,两个数都得是1
2.如果是或运算得到的结果
2.1 0的情况,两个数都得是0
2.2 1的情况,那么一个数取了0,另一个数就要取1
3.如果是异或运算得到的结果
无论结果是0还是1,只要知道其中一位,那么另一位就固定了
上述关系都可以用一张有向图来表示,这样可以得到31张有向图,分别tarjan缩点判断有没有解就可以了,全部有解才输出Yes。
时间复杂度O(N^2),有个31的常数。
H. Dinner
首先,可以先算出所有奇数号桌子摆菜的方案数C(m, n) * n!,且任意一种方案对其他偶数号桌子来说都是一样的。故可以假设奇数号桌子的摆菜方案为1、2、…、n。
其次,在假设的基础上考虑偶数号桌子的摆菜方案,容易得到如下DP方程:
DP( i, j ) = sigma( DP( i - 1, k ) ) 其中,k 不等于 i, i + 1, j,j 不等于i, j不等于i + 1。
其中DP(i,j)表示当前摆到第i个桌子,且摆第j种菜的方案数。将上式展开后化简,即可O(n)递推。
最后,ans = max( C( m, n ) * n! * sigma( dp(n - 1, k) ) )。