2019 Multi-University Training Contest 2

不会数据结构,玩?ACM

1005 Everything Is Generated In Equal Probability

题意

给出一个整数 N ( N ≤ 3 × 1 0 3 N (N\le3\times10^3 N(N3×103),先从 [ 1 , N ] [1,N] [1,N]随机选取一个 n n n,然后从所有长度为 n n n的全排列中随机选取一个排列。求期望这个排列的函数 f ( x ) f(x) f(x)值是多少。
f ( x ) f(x) f(x)值定义如下:从当前排列中随机选取一个子序列,求出这个子序列的 f ( x ) f(x) f(x)值后,加上当前排列的逆序对个数作为返回值。

题解

对于一个长度为 n n n排列来说,他的逆序对期望个数为 n ( n − 1 ) 4 \frac{n(n-1)}{4} 4n(n1),因为两个数字都有一半的可能成为逆序对。
在一个长度为n的序列中,选取一个子序列,有 C ( i , n ) 2 n \frac{C(i,n)}{2^n} 2nC(i,n) 的概率剩下的序列长度为 i i i。那么可以认为 f ( x ) = n ( n − 1 ) 4 + ∑ i = 0 n C ( i , n ) 2 n f ( i ) f(x)=\frac{n(n-1)}{4}+\sum_{i=0}^n \frac{C(i,n)}{2^n}f(i) f(x)=4n(n1)+i=0n2nC(i,n)f(i)
这样,结合一开始的选取规则,答案就是 ∑ i = 1 N f ( i ) N \frac{\sum_{i=1}^N f(i)}{N} Ni=1Nf(i)
f ( x ) f(x) f(x)可以 O ( n ) O(n) O(n)地递推一次,那么做出所有 f ( x ) f(x) f(x)的总体复杂度是 O ( n 2 ) O(n^2) O(n2),这样可以预处理出所有的答案

1008 Harmonious Army

题意

有一个由 n ( n ≤ 500 ) n (n\le 500) n(n500)个人组成的军队,每个人都可以担任战士或法师。
军队中存在 m ( m ≤ 1 0 4 ) m(m\le10^4) m(m104)个关系,第 i i i个关系中包括两个人 l i , r i l_i,r_i li,ri。当两人均为战士时,军队总战斗力上升 A i A_i Ai,当一人为战士一人为法师时,军队总战斗力上升 B i B_i Bi,当两人均为法师时,军队总战斗力上升 C i C_i Ci,保证 B = A 4 + C 3 B=\frac{A}{4}+\frac{C}{3} B=4A+3C且公式内均能整除。
求军队能获得的最大总战斗力。

题解

用最小割来表示方案的选择。因为这题要求最大值,所以将所有方案的收益求和,减去最小割来求解。
每种切割方案都对应一种选择方案,切割的花费应该设置为选择这种方案后的损失(即对应的其他方案的收益和)。
网络流建图
根据三种方案得到方程组
a + b = A + B a+b=A+B a+b=A+B//两个法师
c + d = C + B c+d=C+B c+d=C+B//两个战士
a + d + e = A + C a+d+e=A+C a+d+e=A+C//一战一法
b + c + e = A + C b+c+e=A+C b+c+e=A+C//一战一法
上面解出来得
a = b = ( A + B ) / 2 a=b=(A+B)/2 a=b=(A+B)/2
c = d = ( C + B / 2 ) c=d=(C+B/2) c=d=(C+B/2)
e = − B + ( A + C ) / 2 e=-B+(A+C)/2 e=B+(A+C)/2
跑个最大流就行了。

1009 I Love Palindrome String

题意

给出一个长度为 n ( n ≤ 1 0 5 ) n (n\le 10^5) n(n105)的字符串。要求输出 n n n个整数,第 i i i个整数表示该字符串有多少个长度为 i i i的字串,它不仅自身是回文串,而且它的后半部分(长度向上取整)也是回文串。

题解

跑个回文自动机就没了,我也不知道咋整的。

1010 Just Skip The Problem

题意

给出一个 n ( n ≤ 1 0 9 ) n (n\le 10^9) n(n109),你可以同时发起若干个询问来猜测一个二进制下有 n n n位的数字 X X X,每个询问包括一个数字 Y Y Y,返回 X & Y = Y X\&Y=Y X&Y=Y这个等式是否成立。所有的回答都是同时返回的。求在询问次数最少的情况下,有多少种询问的方式。

题解

我们认为每次确定一位,需要 n n n次来确定这个数字,那么这 n n n次的询问顺序是任意的,所以答案为 n ! n! n!

1011 Keen On Everything But Triangle

题意

给出一个长度为 n ( n ≤ 1 0 5 ) n (n\le 10^5) n(n105)的数列,一共有次 Q   ( Q ≤ 1 0 5 ) Q\ (Q\le 10^5) Q (Q105)询问,每次询问包括一个区间 [ L i , R i ] [L_i,R_i] [Li,Ri],要求回答这个区间内取出三个数能组成所有三角形中,三角形的最大周长。不能组成三角形输出 − 1 -1 1

题解

显然地,答案应由数字按大小排序后,连续的三个数字组成。不妨从大到小取,第一组合法的三个数字求和即是最大周长。不难发现不合法的情况下,数字大小呈斐波那契级别增长,简单计算可以发现,不合法情况最多持续45次,那么对于每个区间,取出前45大的数字即可。
可以直接主席树,也可以线段树维护区间前45大。还有jls的一个做法:线段树每次取最大,然后删除,完成一次询问后再恢复。

1012 Longest Subarray

题意

给出一个长度为 n ( n ≤ 1 0 5 ) n (n\le 10^5) n(n105)的数列,求一个最长的子区间,对于区间内的每一个数字,都满足它在该区间内出现次数不少于 K K K

题解

线段树高级做法,不会

补题

  • 1005
  • 1008
  • 1009
  • 1010
  • 1011
  • 1012

读题

1001
1002
1003
1004
1006
1007

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值