| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 第十二届蓝桥杯 2021年省赛真题 (Java 大学A组) 第一场 -> 正文阅读 |
|
[数据结构与算法]第十二届蓝桥杯 2021年省赛真题 (Java 大学A组) 第一场 |
蓝桥杯 2021年省赛真题 (Java 大学A组 )Placeholder #A 相乘本题总分:5 分 问题描述 ??小蓝发现,他将
1
1
1 至
1000000007
1000000007
1000000007 之间的不同的数与
2021
2021
2021 相乘后再求除以
1000000007
1000000007
1000000007 的余数,会得到不同的数。 答案提交 ??这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
朴素解法??朴素的去枚举 [ 1 , 1000000007 ] [1,1000000007] [1,1000000007] 中的每一个数,看似不明智,但实际上, ??对于现代的 C P U \mathrm{CPU} CPU 来说,就是洒洒水。 ??就算你的 C P U \mathrm{CPU} CPU 主频低至 2.0 G h z 2.0\mathrm{Ghz} 2.0Ghz,那也是每秒钟二十亿次的计算速度。 ??
余数定义??余数的定义是, ??给定两个整数 a a a、 b b b,其中 b ≠ 0 b \ne 0 b?=0,那么一定存在两个唯一的整数 q q q、 r r r,使得 a = q b + r , 0 ≤ r < ∣ b ∣ a=qb+r,0 \leq r < |b| a=qb+r,0≤r<∣b∣ ??而在这道题中,我们最后要找的,可能存在的这个数字可表示为, ?? 2021 ? a ′ = 1000000007 ? q + 999999999 2021 \cdot a' = 1000000007 \cdot q + 999999999 2021?a′=1000000007?q+999999999, ??显然 q q q 不会超过 2021 2021 2021, ??枚举的变量选择为 q q q 的话,就能大大的减少枚举范围。
同余方程扩展欧几里得算法??依题意,有同余线性方程: ?? a × x ≡ b ( m o d n ) a × x \equiv b \pmod{n} a×x≡b(modn), gcd ? ( a , n ) ∣ b \gcd(a,n) \mid b gcd(a,n)∣b ??将 2021 2021 2021 代入 a a a, 1000000007 1000000007 1000000007 代入 n n n, gcd ? ( a , n ) = 1 \gcd(a,n)=1 gcd(a,n)=1,方程有无穷解。 ??稍微解释一下, ?? a × x ≡ b ( m o d n ) a × x \equiv b \pmod{n} a×x≡b(modn) 可改写为 a × x + n × y = b a × x + n × y = b a×x+n×y=b, ??用扩展欧几里得算法求出一组数 x 0 , y 0 x_{0}, y_{0} x0?,y0?,使得 a × x 0 + n × y 0 = gcd ? ( a , n ) a × x_{0} + n × y_{0} = \gcd(a,n) a×x0?+n×y0?=gcd(a,n), ??则 x = b × x 0 gcd ? ( a , n ) x = \cfrac{b × x_{0}}{\gcd(a,n)} x=gcd(a,n)b×x0?? 是原方程的一个解。 ??通解为 b × x 0 gcd ? ( a , n ) ? m o d ? n  ̄ ( m o d n ) \overline{\cfrac{b × x_{0}}{\gcd(a,n)} \bmod n} \pmod{n} gcd(a,n)b×x0??modn?(modn), ??人话一点就是模 n n n 与 x x x 同余的同余类。
??毕竟是结果填空题, ??就用 P y t h o n \mathrm{Python} Python 写了, ??下面再放个 J a v a \mathrm{Java} Java 的吧。 费马小定理??对 a a a, a ∈ Z a \in \mathbb{Z} a∈Z,若 p p p 为质数, gcd ? ( a , p ) = 1 \gcd (a,p) = 1 gcd(a,p)=1,有 ?? a p ? 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1 \pmod p ap?1≡1(modp) ??容易整理出方程, ?? a x ≡ a p ? 1 ( m o d p ) x ≡ a p ? 2 ( m o d p ) b x ≡ b a p ? 2 ≡ b ( m o d p ) \begin{aligned}ax & \equiv a^{p-1} &\pmod p\\x & \equiv a^{p-2} &\pmod p\\bx & \equiv ba^{p-2} \equiv b &\pmod p\end{aligned} axxbx?≡ap?1≡ap?2≡bap?2≡b?(modp)(modp)(modp)?
?? J a v a \mathrm{Java} Java 实现起来较为容易一点。 #B 直线本题总分:5 分 问题描述 ??在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上,那么这些点中任意两点确定的直线是同一条。 答案提交 ??这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
直线方程集合??一种朴素的想法,是将所有点连接起来,去掉重复的线,然后统计。 ??为了方便表示,这里采用斜截式方程 y = k x + b y=kx+b y=kx+b 来表示每一条直线,其中 k k k 为直线斜率, b b b 为直线在 y y y 轴上的截距,并统一不处理斜率不存在的线,将结果加上一个 20 20 20。 ??注意! 这段程序的结果是不准确的。
分式消除误差??斜率在浮点数表示下,精度那是参差不齐,诚然可以将误差限制在一个范围内,当绝对差落入当中时,我们就将其视为值相同。 ??但是对于这种需要可表示的范围小的时候,我们可以定义分式来做到无误差,而不是控制精度。
平面几何??这是一个平面直角坐标系,原点与 ( 1 , 2 ) (1,2) (1,2) 连成一条线段。
??若在连接一条直线时,将所有直线经过的点标记起来,在下次遇到已经标记过的两点,我们便可直接跳过。
??我觉得可能会再考个差不多的,这里给大伙一个推论。 ??平面直角坐标系上有 n × n n × n n×n, n ≥ 2 n \ge 2 n≥2 个点 { ( x , y ) ∣ 0 ≤ x < n , 0 ≤ y < n , x ∈ Z , y ∈ Z } \{(x, y)|0 ≤ x < n, 0 ≤ y < n, x ∈ Z, y ∈ Z\} {(x,y)∣0≤x<n,0≤y<n,x∈Z,y∈Z},从原点出发可连接的不同直线为 1 ≤ x , y < n 1 \leq x,y <n 1≤x,y<n, x ≠ y x \ne y x?=y 中 g c d ( x , y ) = 1 gcd(x,y) = 1 gcd(x,y)=1 的次数加 3 3 3。 ??感兴趣的读者可以自行证明。 ??同时在 1 ≤ x < y < n 1 \leq x < y < n 1≤x<y<n 时, g c d ( x , y ) = 1 gcd(x,y) = 1 gcd(x,y)=1 的出现次数恰好等于 ∑ y = 2 n ? 1 φ ( y ) \displaystyle\sum_{y = 2}^{n-1}\varphi(y) y=2∑n?1?φ(y),其中 φ \varphi φ 为欧拉函数。 ??能力有限,这里便不再继续讨论。 #C 货物摆放本题总分:10 分 问题描述 ??小蓝有一个超大的仓库,可以摆放很多货物。 答案提交 ??这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
暴力搜索??每届必考的基本算术定理。
??直接套两 for 也不是不行,但这么写出来的程序,通常到比赛结束都跑不完。 ??因此我们要避免无效因子的判断, ??这里统计的为质因子分成三份,可能的组合个数,它与原命题等价。 ??没什么好讲的。 缩放质因子??举个例子, ??当 n = 9 n = 9 n=9? 时,有 6 6 6 种方案: 1 × 1 × 9 1×1×9 1×1×9、 1 × 3 × 3 1×3×3 1×3×3、 1 × 9 × 1 1×9×1 1×9×1、 3 × 1 × 3 3×1×3 3×1×3、 3 × 3 × 1 3 × 3 × 1 3×3×1、 9 × 1 × 1 9 × 1 × 1 9×1×1; ??当 n = 25 n = 25 n=25 时,有 6 6 6 种方案: 1 × 1 × 25 1×1×25 1×1×25、 1 × 5 × 5 1×5×5 1×5×5、 ? \cdots ? ; ??当 n = p 2 n =p^{2^{}} n=p2 时,有 6 6 6 种方案: 1 × 1 × p 2 1×1×p^{2} 1×1×p2、 1 × p × p 1×p×p 1×p×p、 ? \cdots ? ; ??其中 p p p 为质数。 ??其实上例解法当中,我们就能发现,组合的个数与其具体的值无关,它只与质因数指数挂钩。 ?? 2021041820210418 = 2 × 3 3 × 17 × 131 × 2857 × 5882353 2021041820210418 = 2 × 3^3 × 17 × 131 × 2857 × 5882353 2021041820210418=2×33×17×131×2857×5882353 ??如果我们找最小的几个质数来代替它们,得到的新数字 2 3 × 3 × 5 × 7 × 11 × 13 = 120120 2^3 × 3 × 5 × 7 × 11 × 13 = 120120 23×3×5×7×11×13=120120 与 2021041820210418 2021041820210418 2021041820210418 在这个命题下等价。 ??而 120120 120120 120120 的大小就足够我们真暴搜把它的全部因数组合找到了。
#D 路径本题总分:10 分 问题描述 ??小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径。 答案提交 ??这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
??题目已经说的够清楚了, ??建一个有 2021 2021 2021 个顶点 21 × 2000 + 21 ( 21 + 1 ) 2 21 × 2000 + \cfrac{21(21 + 1)}{2} 21×2000+221(21+1)? 条边的无向图,跑图上的算法就完事了。 ??还有的细节就是整形是否会溢出,我们取 ( 1 , 2021 ] (1,2021] (1,2021] 中最大的质数 2017 2017 2017 与 202 1 2 2021^2 20212 相乘,得到的结果还是有点夸张的,虽然经过测试,可能的线路权值合至多不会超过 2 31 ? 1 2^{31} - 1 231?1,但毕竟是面向竞赛,考虑甄别的时间成本,直接使用长整形更为划算。 搜索深度优先搜索?? 2021 2021 2021 个顶点,绝大多数顶点都连有 2 × 21 2 × 21 2×21 条边, ??别深搜了,一搜就是 ??compilaition completed successfully in 500ms(4 hour ago) ??就,电脑跟选手对着坐牢。 记忆化搜索??深度优先搜索,在搜索最优结果时,通常需要完整的枚举全部可能的问题状态。 ??但在这个问题状态的集合中,所有可选方案的 “后缀” 都是相同,也就是所有可选的分支,它们都是以同一个节点结尾。 ??如果我们将已经搜索到的节点到目标节点间的最短路径保存下来,在再次搜索到这个 “后缀” 的分支时直接返回。 ??那么问题就可能在一个较短的时间内解决。 ??这也是所谓的记忆化搜索。
枝剪广搜??其实朴素的去搜索,不论深搜还是广搜,在竞赛里都是很冒进的行为, ??影响这两个算法执行效率的因素太多。 ??当然要是没有其他的思路,也只能死马当活马医了。 ??幸运的是,只需简单的枝剪,就能在很短的时间计算出结果
单源最短路径Dijkstra??题目给出的图显然是个边加权,权重非负的无向图,跑遍 D i j k s t r a Dijkstra Dijkstra 就完事了。
Floyd??如果是一道最短路径的结果题。 ??竞赛时限内能运行完 O ( n 3 ) O(n^{3}) O(n3) 的程序。 ??那其实无脑套 F l o y d Floyd Floyd 就行。
??半分钟就出来了,还行。 #E 回路计数本题总分:15 分 问题描述 ??蓝桥学院由
21
21
21 栋教学楼组成,教学楼编号
1
1
1 到
21
21
21。对于两栋教学楼
a
a
a 和
b
b
b,当
a
a
a 和
b
b
b 互质时,
a
a
a 和
b
b
b 之间有一条走廊直接相连,两个方向皆可通行,否则没有直接连接的走廊。 答案提交 ??这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
记忆化搜索??题目描述显然能构成边集大小为 ∑ i = 1 21 φ ( i ) = 140 \displaystyle\sum_{i=1}^{21} \varphi (i) = 140 i=1∑21?φ(i)=140 的无向图,遍历图的复杂度估算为 O ( ∏ i = 1 n φ ( i ) ) O(\prod_{i=1}^n \varphi(i)) O(∏i=1n?φ(i)), ??暴力去搜索似乎不太可行,但我们可借助一定的优化手段,以及记忆化处理来使它在一个可接受的时间内计算出结果。 ??设 f v , s t a t u s f_{v,status} fv,status? 为从 v v v 点开始,历经 s t a t u s status status 的方案数, s t a t u s status status 在二进制表示下,第 i i i 位为 1 1 1 表示需要经过 i i i 点。 ??则答案为 ∑ v = 2 21 f v , s t a t u s ? v ? 1 \displaystyle\sum_{v = 2}^{21} f_{v,status - v-1} v=2∑21?fv,status?v?1?,因为 1 1 1 与 如何大于 1 1 1 的整数互质,也就是说从任意点都可以到 1 1 1 号点,我们只需要统计经过除一号点遍历全图的路径数就行了。 ??然后将 [ 2 , n ] [2,n] [2,n] 映射到 [ 0 , n ? 2 ] [0, n - 2] [0,n?2] 优化一定的性能, ??最后 3 3 3s 就能运行出现,还是挺意外的。
??记忆化搜索就是状压 d p \mathrm{dp} dp的递归实现, ??写给 A \mathrm{A} A 组的话没有什么实现的必要, ??就是提一句。 #F 最少砝码时间限制: 1.0 1.0 1.0s 内存限制: 512.0 512.0 512.0MB 本题总分: 15 15 15 分 问题描述 ??你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于
N
N
N 的正整数重量。 输入格式 ??输入包含一个正整数 N N N。 输出格式 ??输出一个整数代表答案。 测试样例1
评测用例规模与约定 ??对于所有评测用例, 1 ≤ N ≤ 1000000000 1 ≤ N ≤ 1000000000 1≤N≤1000000000。 变种三进制??一个集合中包含 n n n 个数,任取若干数可以加减出任意小于等于 N N N 的正整数。 ??首先要考虑怎么去满足题目要求的性质, ??设第 i i i 个砝码的重量为 w i w_{i} wi?,原集合 A N = { w 1 , w 2 , ? ? , w n } A_{N} = \{w_{1},w_{2},\cdots,w_{n}\} AN?={w1?,w2?,?,wn?}。 ??要满足题意首先要有 s u m ( A ) ≥ N sum(A) \ge N sum(A)≥N, ??设我们知道了 A ? N / 3 ? A_{\lfloor N/3 \rfloor} A?N/3?? 的方案,那么我们就能在这个方案里加入一个 2 ? N / 3 ? + 1 2\lfloor N/3 \rfloor + 1 2?N/3?+1,就能用 2 ? N / 3 ? + 1 2\lfloor N/3 \rfloor + 1 2?N/3?+1 对 A ? N / 3 ? A_{\lfloor N/3 \rfloor} A?N/3?? 中个若干元素做差表示出 ( ? N / 3 ? , 2 ? N / 3 ? + 1 ) (\lfloor N/3 \rfloor, 2\lfloor N/3 \rfloor + 1) (?N/3?,2?N/3?+1),对若干元素求和表示出 ( 2 ? N / 3 ? + 1 , N ] (2\lfloor N/3 \rfloor + 1, N] (2?N/3?+1,N],并入 A ? N / 3 ? A_{\lfloor N/3 \rfloor} A?N/3?? 本身能表示的范围,即能表示出任意小于等于 N N N 的正整数。 ??如果 A ? N / 3 ? A_{\lfloor N/3 \rfloor} A?N/3?? 本身是最优的,那么往里面加入 K = 2 ? N / 3 ? + 1 K = 2\lfloor N/3 \rfloor + 1 K=2?N/3?+1 的 A N A_N AN? 也一定是最优的,因为要使得 K + s u m ( A ? N / 3 ? ) ≥ N K + sum(A_{\lfloor N/3 \rfloor}) \ge N K+sum(A?N/3??)≥N, K K K 必须大于等于 2 ? N / 3 ? + 1 2\lfloor N/3 \rfloor + 1 2?N/3?+1,而当 K > 2 ? N / 3 ? + 1 K > 2\lfloor N/3 \rfloor + 1 K>2?N/3?+1 时,就无法表示出 ? N / 3 ? + 1 \lfloor N/3 \rfloor + 1 ?N/3?+1, ??当然这一切还有个前提条件,那就是 s u m ( A ? N / 3 ? ) = ? N / 3 ? sum(A_{\lfloor N/3 \rfloor}) = \lfloor N/3 \rfloor sum(A?N/3??)=?N/3?。’ ??不过到这里已经足够启发我们去顺推了, ??因为这个问题的边界是显然的, ??当 N = 1 N = 1 N=1 时, A 1 = { 1 } A_{1} = \{1\} A1?={1}, ??我们往 A 1 A_{1} A1? 中加入 2 × s u m ( A 1 ) + 1 2 × sum(A_{1}) + 1 2×sum(A1?)+1,得到 A 4 A_{4} A4?,即 ??当 N = 4 N = 4 N=4 时, A 4 = { 1 , 3 } A_{4} = \{1,3\} A4?={1,3}, ??当 N = 13 N = 13 N=13 时, A 13 = { 1 , 3 , 9 } A_{13} = \{1,3,9\} A13?={1,3,9}, ?? ? ? \cdots \cdots ?? ??当然还存在 N N N 不在我们找到的最优规律中。 ??我们设 N = 5 N = 5 N=5, ??因为 A 4 = { 1 , 3 } A_{4} = \{1,3\} A4?={1,3} 的最优性, 2 2 2 个元素至多组成任意小于等于 4 4 4 的正整数, ??因为 A 13 = { 1 , 3 , 9 } A_{13} = \{1,3,9\} A13?={1,3,9} 的最优性, 3 3 3 个元素可以表示任意小于等于 13 13 13 的正整数。 ??即对 N = 5 N = 5 N=5 给出的答案,必须大于 2 2 2 小于等于 3 3 3。 ??对于给出任意 N N N 我们都可以按照这个性质求出答案。 ??同时在三进制下来看这个规律: ?? { N } = { ( 1 ) 3 , ( 11 ) 3 , ( 11 ) 3 , ? ? } \{N\} = \{(1)_{3},(11)_{3},(11)_{3},\cdots\} {N}={(1)3?,(11)3?,(11)3?,?} ??可以二分,但没有必要。
??写的稀烂,主要这题目出的就恶心人。 #G 左孩子右兄弟时间限制: 3.0 3.0 3.0s 内存限制: 512.0 512.0 512.0MB 本题总分: 20 20 20 分 问题描述 ??对于一棵多叉树,我们可以通过 “左孩子右兄弟” 表示法,将其转化成一棵二叉树。 输入格式 ??输入的第一行包含一个整数
N
N
N。 输出格式 ??输出一个整数表示答案。 测试样例1
评测用例规模与约定 ??对于
30
30
30% 的评测用例,
1
≤
N
≤
20
1 ≤ N ≤ 20
1≤N≤20; 树形 DP??一棵树的高度等于根节点最高子树的高度加一, ??而一棵由左孩子右兄弟表示法得到的二叉树, ??我们可以将最大的子树放在最右边, ??这种策略下,每棵子树的高度为子树个数加最高子树高度。 ??显 然 正 确 ??于是有状态转移方程: d p ( v ) = c o u n t ( s o n ( v ) ) + m a x { d p ( s o n ( v ) ) } dp(v) = \mathrm{count(son(}v\mathrm{))} + \mathrm{max\{}dp\mathrm{(son(}v\mathrm{))\}} dp(v)=count(son(v))+max{dp(son(v))}
#H 异或数列时间限制: 2.0 2.0 2.0s 内存限制: 512.0 512.0 512.0MB 本题总分: 20 20 20 分 ??
A
l
i
c
e
\mathrm{Alice}
Alice 和
B
o
b
\mathrm{Bob}
Bob 正在玩一个异或数列的游戏。初始时,
A
l
i
c
e
\mathrm{Alice}
Alice 和
B
o
b
\mathrm{Bob}
Bob 分别有一个整数
a
a
a 和
b
b
b,有一个给定的长度为
n
n
n 的公共数列
X
1
,
X
2
,
?
?
,
X
n
X_1, X_2, \cdots , X_n
X1?,X2?,?,Xn?。 输入格式 ??每个评测用例包含多组询问。询问之间彼此独立。 输出格式 ??输出
T
T
T 行,依次对应每组询问的答案。 测试样例1
评测用例规模与约定 ??对于所有评测用例, 1 ≤ T ≤ 200000 1 \leq T \leq 200000 1≤T≤200000, 1 ≤ ∑ i = 1 T n i ≤ 200000 1 \leq \sum_{i=1}^T n_i \leq 200000 1≤∑i=1T?ni?≤200000, 0 ≤ X i < 2 20 0 \leq X_i < 2^{20} 0≤Xi?<220。 博弈论??题目没看太懂,不过没说那 a a a、 b b b 初始值应该为 0 0 0 吧。 ??首先我们来回顾一下公平组合游戏的定义。 ??1):游戏有两名玩家参与,二者轮流做出决策,双方均知道游戏的完整信息。 ??2):任意一位玩家在某一确定状态可以作出的决策集合只与当前的状态有关,与玩家无关。 ??3):游戏中的同一个状态不可能多次抵达,游戏以玩家无法行动为结束,且游戏一定会在有限步后以非平局结束。 ??因此我们需要将平局与非平局状态分开讨论,以便应用一些博弈论有关的结论。 ??对于 A l i c e \mathrm{Alice} Alice 和 B o b \mathrm{Bob} Bob 平局,仅在存在 a ⊕ X I 1 ⊕ X I 2 ⊕ ? ⊕ X I n = b ⊕ X J 1 ⊕ X J 2 ⊕ ? ⊕ X J m a \oplus X_{I_1} \oplus X_{I_2} \oplus\cdots\oplus X_{I_n} = b \oplus X_{J_1} \oplus X_{J_2} \oplus\cdots\oplus X_{J_m} a⊕XI1??⊕XI2??⊕?⊕XIn??=b⊕XJ1??⊕XJ2??⊕?⊕XJm??, I ∪ J = [ 1 , n i ] I\cup J = [1,n_i] I∪J=[1,ni?]、 I ∩ J = ? I\cap J = \varnothing I∩J=?。 ??我们可以简单的从恒等率 a ⊕ 0 = a a \oplus 0 = a a⊕0=a,和归零率 a ⊕ a = 0 a \oplus a = 0 a⊕a=0 中得到 a ⊕ X I 1 ⊕ X I 2 ⊕ ? ⊕ X I n ⊕ b ⊕ X J 1 ⊕ X J 2 ⊕ ? ⊕ X J m = 0 a \oplus X_{I_1} \oplus X_{I_2} \oplus\cdots\oplus X_{I_n} \oplus b \oplus X_{J_1} \oplus X_{J_2} \oplus\cdots\oplus X_{J_m}= 0 a⊕XI1??⊕XI2??⊕?⊕XIn??⊕b⊕XJ1??⊕XJ2??⊕?⊕XJm??=0, ??即当 X 1 ⊕ X 2 ⊕ ? ⊕ X n i = 0 X_1 \oplus X_2 \oplus\cdots\oplus X_{n_i}= 0 X1?⊕X2?⊕?⊕Xni??=0 时 对于 A l i c e \mathrm{Alice} Alice 和 B o b \mathrm{Bob} Bob 平局,而且显然当此式不成立时,无论如何都找不到一对集合 I I I、 J J J 使得上式成立。 ??现在再回顾一下公平组合游戏的定理。 ??1):没有后继状态的状态是必败状态。 ??2):一个状态是必胜状态,当且仅当存在至少一个必败状态为它的后继状态。 ??3):一个状态是必败状态,当且仅当它的所有后继状态均为必胜状态。 ??还是挂个 资料的链接 在这吧。 ??此外我们将自然数 a a a、 b b b 的大小关系推广一下, a > b a > b a>b,当存在一个最大的 i i i,满足 a a a、 b b b 大于 i i i 位的数字完全相等, a a a 的第 i i i 位数字大于 b b b 的第 i i i 位数字。 ??设 c = X 1 ⊕ X 2 ⊕ ? ⊕ X n i c = X_1 \oplus X_2 \oplus\cdots\oplus X_{n_i} c=X1?⊕X2?⊕?⊕Xni??,对于超出 c c c 位数的部分,无论怎么选择,最后总是相等的,对于 c c c 的最高位 c i c_i ci?,若它在 X X X 中只出现 1 1 1 次, A l i c e \mathrm{Alice} Alice 选择它即必胜,若它出现奇数次(不可能为偶数次),设其集合为 X ′ X' X′, ??若 A l i c e \mathrm{Alice} Alice 先从 X ′ X' X′ 中选择数字,余下的数字相与结果 c i = 0 c_i = 0 ci?=0,但这并不代表 A l i c e \mathrm{Alice} Alice 必赢,因为若 n i n_i ni? 为偶数,则在 A l i c e \mathrm{Alice} Alice 先手从 X ′ X' X′ 中选择数字的情况下, B o b \mathrm{Bob} Bob 总有办法能让 A l i c e \mathrm{Alice} Alice 第二个从 X ′ X' X′ 中选择数字,此时 A l i c e \mathrm{Alice} Alice 必败,反之必胜。 ??若 A l i c e \mathrm{Alice} Alice 先从 C X X ′ C_{X}X' CX?X′ 中选择数字,也是同理。 ??因此答案只与 X ′ X' X′ 的大小,与 n n n 的奇偶性相关。
??也可以放弃常数阶空间复杂度,减小时间复杂度上的一个较大的系数。 ??提一嘴。 #I 双向排序时间限制: 5.0 5.0 5.0s 内存限制: 512.0 512.0 512.0MB 本题总分: 25 25 25 分 问题描述 ??给定序列
(
a
1
,
a
2
,
?
?
?
,
a
n
)
=
(
1
,
2
,
?
?
?
,
n
)
(a_{1}, a_{2}, · · · , a_{n}) = (1, 2, · · · , n)
(a1?,a2?,???,an?)=(1,2,???,n),即
a
i
=
i
a_{i} = i
ai?=i。 输入格式 ??输入的第一行包含两个整数
n
,
m
n, m
n,m,分别表示序列的长度和操作次数。 输出格式 ??输出一行,包含 n n n 个整数,相邻的整数之间使用一个空格分隔,表示操作完成后的序列。 测试样例1
评测用例规模与约定 ??对于
30
30
30% 的评测用例,
n
,
m
≤
1000
n, m ≤ 1000
n,m≤1000; 去冗操作??其实看到这个数据规模,五分钟写完 Brute Force,就可以下一道了, O ( m n log ? n ) O(mn \log n) O(mnlogn) 就能过 60 60 60% 的用例, ??多的时间去证明其他程序的正确性可能收益会高点。 ??不过,骗分就多骗两个吧。 ??对于连续且 p i p_{i} pi? 相同操作,在 p i = 0 p_{i} = 0 pi?=0 时只需要做 q i q_{i} qi? 最大的操作,在 p i = 1 p_{i} = 1 pi?=1 时只需要做 q i q_{i} qi? 最小的操作,如图:
??特别的,我可以先将 ( p : 1 , q : 1 ) (p:1,q:1) (p:1,q:1) 压入栈底。
填数游戏??其实最开始就想直接写到这一步, ??但是我忙的同时又有点闲,就拆开写吧。 ??经过上述去冗操作,可以发现,最后需要操作的是一个 p ? 0 ∣ 1 p \ 0\mid 1 p?0∣1 交替的序列,为了便于读者理解, ??这里将原序列和操作抽象成不等长不同色线段, ??特别的,原序列和 p = 1 p = 1 p=1 的操作是一个颜色,因为原序列本就是升序。
??图像告诉了我们,如果 q q q 操作的范围盖过了栈里最近的 q q q,那么不仅这个最近的 q q q,连同栈顶 q q q 相反的操作都是可以跳过的。 ??同时根据这个性质优化后,根据栈内剩余的操作,我们总是能找到一段顺或倒序的不变区间。 ??将不变区间填入最终的答案,整个算法就大体完成了。
Chtholly Tree??未加限定的珂朵莉树 ( C h t h o l l y T r e e \mathrm{Chtholly Tree} ChthollyTree),就是红黑树上建值域线段树,在随机构造的数据下期望复杂度为 O ( n log ? log ? n ) O(n \log \log n) O(nloglogn), ??但 J a v a \mathrm{Java} Java 实现起来非常痛苦,于是 p l a n ? B \mathrm{plan\ B} plan?B,改用链表实现, ??其在随机构造的数据下期望复杂度为 O ( n log ? n ) O(n \log n) O(nlogn)。 ??珂朵莉树的策略就是将值域相同的区间合并成一个节点, ??对于任意 [ L , R ] [L,R] [L,R] 上的操作,我们都能转换成珂朵莉树 m e r g e ( s p l i t ( L ) , s p l i t ( R + 1 ) ) \mathrm{merge(split(L), split(R+1))} merge(split(L),split(R+1)) 上的操作。 ?? ??举个具体且形象的例子对我来说还是太难了, ??兄弟们自己找篇博客参考一下吧。 ??虽然捏个踢烂珂朵莉树的数据很简单, ??但就蓝桥的难度而言, ??出题人见没见过还是个问题。
#J 分果果时间限制: 10.0 10.0 10.0s 内存限制: 512.0 512.0 512.0MB 本题总分: 25 25 25 分 问题描述 ??小蓝要在自己的生日宴会上将
n
n
n 包糖果分给
m
m
m 个小朋友。每包糖果都要分出去,每个小朋友至少要分一包,也可以分多包。 输入格式 ??输入第一行包含两个整数
n
n
n 和
m
m
m,分别表示糖果包数和小朋友数量。 输出格式 ??输出一个整数,表示在最优情况下小朋友分到的糖果的最大重量和最小重量的差。 测试样例1
测试样例2
评测用例规模与约定 ??对于
30
30
30% 的评测用例,
1
≤
n
≤
10
1 \leq n \leq 10
1≤n≤10,
1
≤
m
≤
10
1 \leq m \leq 10
1≤m≤10,
1
≤
w
i
≤
10
1 \leq w_i \leq 10
1≤wi?≤10; 待做??我有一个 O ( log ? ( 2 ∑ i = 1 n w i ) n 3 m ) O(\log(2\sum_{i = 1}^n{w_i})n^3m) O(log(2∑i=1n?wi?)n3m) 的算法,所以我觉得没什么必要写下来, ??再想想吧。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 13:37:47- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |