不会数据结构,玩?ACM
1005 Everything Is Generated In Equal Probability
题意
给出一个整数
N
(
N
≤
3
×
1
0
3
N (N\le3\times10^3
N(N≤3×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(n−1),因为两个数字都有一半的可能成为逆序对。
在一个长度为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(n−1)+i=0∑n2nC(i,n)f(i)
这样,结合一开始的选取规则,答案就是
∑
i
=
1
N
f
(
i
)
N
\frac{\sum_{i=1}^N f(i)}{N}
N∑i=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(n≤500)个人组成的军队,每个人都可以担任战士或法师。
军队中存在
m
(
m
≤
1
0
4
)
m(m\le10^4)
m(m≤104)个关系,第
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(n≤105)的字符串。要求输出 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(n≤109),你可以同时发起若干个询问来猜测一个二进制下有 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(n≤105)的数列,一共有次 Q ( Q ≤ 1 0 5 ) Q\ (Q\le 10^5) Q (Q≤105)询问,每次询问包括一个区间 [ 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(n≤105)的数列,求一个最长的子区间,对于区间内的每一个数字,都满足它在该区间内出现次数不少于 K K K。
题解
线段树高级做法,不会
补题
- 1005
- 1008
- 1009
- 1010
- 1011
- 1012
读题
1001
1002
1003
1004
1006
1007