x u a n x u a n 001 xuanxuan001 xuanxuan001的练习赛 R o u n d 1 Round1 Round1 总结
这一场比赛我考了 210 210 210分,还算可以(因为满分是 300 300 300)。
第一题:随机数
解题方法
这道题有 2 2 2种方法。
- 找规律
可以发现每一次总和的数都在 [ n , 2 n ] [n,2n] [n,2n]。
我们看 n = 3 n=3 n=3时的情况:
注:上图中红色字表示这个数字出现的次数。
我们再来看 n = 4 n=4 n=4时的情况:
当 n = 3 n=3 n=3时,每一个数字出现的次数分别是 1331 1331 1331。
当 n = 4 n=4 n=4时,每一个数字出现的次数分别是 14641 14641 14641。
一看,就可以发现这是杨辉三角的一部分。
不懂杨辉三角的可以去这里。
杨辉三角递推公式:
a i , j = { 1 i = 1 , j = 1 0 i = 0 0 j = 0 a i − 1 , j + a i − 1 , j − 1 i > 1 , 1 ≤ j ≤ i a_{i,j}=\begin{cases} 1&i=1,j=1\\ 0&i=0\\ 0&j=0\\ a_{i-1,j}+a_{i-1,j-1}&i>1,1\leq j\leq i \end{cases} ai,j=⎩⎪⎪⎪⎨⎪⎪⎪⎧100ai−1,j+ai−1,j−1i=1,j=1i=0j=0i>1,1≤j≤i
但是当 n = 1 n=1 n=1时,当前匹配的应该是杨辉三角的第二行。
所以我们直接从第二行开始递推。
注意第 i i i行有 i + 1 i+1 i+1个数字。
递推公式:
a i , j = { 1 i = 1 , j ∈ [ 1 , 2 ] a i − 1 , j + a i − 1 , j − 1 i > 1 , j ∈ [ 1 , i + 1 ] a_{i,j}=\begin{cases} 1&i=1,j\in[1,2]\\ a_{i-1,j}+a_{i-1,j-1}&i>1,j\in[1,i+1] \end{cases} ai,j={1ai−1,j+ai−1,j−1i=1,j∈[1,2]i>1,j∈[1,i+1]
答案就是 ∑ i = 1 n + 1 a n , i × ( i + n − 1 ) \sum_{i=1}^{n+1}{a_{n,i}\times (i+n-1)} ∑i=1n+1an,i×(i+n−1)。
上式的 i + n − 1 i+n-1 i+n−1就是每一个数字。
这样就可以做到 20 20 20分。
我们考虑对上式优化。
首先我们知道杨辉三角的每一行都是对称回文的。
也就是说 a i , j = a i , n + 1 − j + 1 = a i , n − j + 2 a_{i,j}=a_{i,n+1-j+1}=a_{i,n-j+2} ai,j=ai,n+1−j+1=ai,n−j+2。
那么我们可以运用小学数学的分配律来解决。
我们把第 i i i项和第 n − i + 2 n-i+2 n−i+2项的数字相加。
因为第 i i i项的数字是 n + i − 1 n+i-1 n+i−1,第 n − i + 2 n-i+2 n−i+2项的数字 2 n − i + 1 2n-i+1 2n−i+1(这个可以自己推一下)。
所以两项之和等于 n + i − 1 + 2 n − i + 1 = 3 n n+i-1+2n-i+1=3n n+i−1+2n−i+1=3n。
因此我们直接结合,答案就等于 ∑ i = 1 ⌈ ( n + 1 ) / 2 ⌉ 3 n × a n , i \sum_{i=1}^{\lceil(n+1)/2\rceil}{3n\times a_{n,i}} ∑i=1⌈(n+1)/2⌉3n×an,i。
我们发现每个式子都有 3 n 3n 3n,所以结合得 3 n × ∑ i = 1 ⌈ ( n + 1 ) / 2 ⌉ a n , i 3n\times\sum_{i=1}^{\lceil(n+1)/2\rceil}{a_{n,i}} 3n×∑i=1⌈(n+1)/2⌉an,i。
可以发现 ∑ i = 1 ⌈ ( n + 1 ) / 2 ⌉ a n , i \sum_{i=1}^{\lceil(n+1)/2\rceil}{a_{n,i}} ∑i=1⌈(n+1)/2⌉an,i等于 ∑ i = 1 n + 1 a n , i × 1 2 \sum_{i=1}^{n+1}{a_{n,i}}\times\frac{1}{2} ∑i=1n+1an,i×21。
我们现在要求 ∑ i = 1 n + 1 a n , i × 1 2 \sum_{i=1}^{n+1}{a_{n,i}}\times\frac{1}{2} ∑i=1n+1an,i×21,怎么办?
有一个定理,就是杨辉三角的第 i i i行的所有数之和等于 2 i − 1 2^{i-1} 2i−1。
由于我们把第一行省略了,所以应该是,杨辉三角的第 i i i行的所有数之和等于 2 i 2^i 2i。
证明略。
答案就等于 3 n × 2 n × 1 2 3n\times2^n\times\frac{1}{2} 3n×2n×21。
但是我们要求的是期望,最后还要除以总数。
总数怎么求?
根据乘法原理,第 i i i个位置可以选择 1 1 1或 2 2 2这两种方案,一共有 n n n个位置,所以一共有 2 n 2^n 2n个方案。
用 3 n × 2 n × 1 2 3n\times2^n\times\frac{1}{2} 3n×2n×21除以 2 n 2^n 2n,得 3 2 n \frac{3}{2}n 23n.
由于数据比较大,你可以用高精度,或直接乘以 1.5 1.5 1.5,都不会爆。 -
d
p
dp
dp
我们可以直接用动态规划做这题,答案还是跟我的方法一样,这里就不讲了。
得分情况
比赛时满分。
第二题:整理书包
解题方法
我做了
60
60
60分,直接做一个
01
01
01背包。
满分,搜索
+
d
p
+dp
+dp。
得分情况
比赛时 60 60 60分。
第三题:购物
解题方法
暴力二重循环对了五个点,错了一个点,其他点超时。
我的方法算是贪心吧。
每次把可以放的都放进去就行了。
满分方法:
看了之后,似乎是二分图,可是我没学。
得分情况
比赛时 50 50 50分。