IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> noi2021题目分析大纲 -> 正文阅读

[数据结构与算法]noi2021题目分析大纲

写在前面
金牌线 393
银牌线 205
100银 282

day1T1

据说有类似原题

染色[SDOI2011]

n , m < = 5000 n,m<=5000 n,m<=5000

暴力标记
喜提30

A , B / A A,B/A A,B/A

区间修改+单点修改+区间查询线段树
喜提20

B B B

树剖线段树维护标记

因为查询点必定为父子关系,所以考虑把操作1换成区间修改的“修改的最晚时间是什么”

查询的时候只要考虑这两个点的最晚修改时间是否相同

(其实这个是和正解最接近的部分分)

喜提20

n , m < = 2 e 4 n,m<=2e4 n,m<=2e4

不知名log^3做法(并没有找到也没有想到什么参考)

估计是给正解常数大的人

10pts

n , m < = 1 e 5 n,m<=1e5 n,m<=1e5

树剖线段树,维护区间左边颜色,区间右边颜色,区间内重边数目

20pts

day1T2

(吐槽)据说是过了一车人的LGV,不过…

据说和CF167E大致相同

CF167E

很容易观察到题目考察的内容——交点数的奇偶性——只与两条路径的起点与终点有关系。

如果起点是1,2,3,…n,终点是 p 1 , p 2 , p 3 . . . p n p_1,p_2,p_3...p_n p1?,p2?,p3?...pn?

那么交点数的奇偶性就是 p 1 ? n p_{1-n} p1?n? 的逆序对数

k = = 2 k==2 k==2

邻接矩阵的行列式的答案

35pts

B B B

(感觉意思就是保证每一层的节点数都是1)

20pts

n < = 10 n<=10 n<=10

估计是乱出的,我感觉它是想出个 2 10 ? 2 10 2^{10}*2^{10} 210?210的dp,然后数据范围出错了…(但是砍掉一半好像也没法做)

咨询了一些人 姑且把它当做乱出处理了
不包含AB,10pts (是不是给正解数组开小的人的)

n 1 = n 2 = . . . = n k / A n_1=n_2=...=n_k/A n1?=n2?=...=nk?/A

行列式的值乘起来

(已经和正解非常接近了qwq)

(没有计算包含B的) 20pts

正解

乘起来的行列式/或者说lGV定理 不过如果是从上面的部分分推过来的话,其实可能会跳过LGV这一步

至于为什么行列式乘起来不对:喂喂,你的行列式是正方形耶…

但是不同的点数之间可能会出现长方形

20pts

day1T3

注意到题目只考虑可达性 因此要考虑缩点

自闭了我读错题了 我一直以为 加的两条边是可以钦定的 没想到是题目给定的 我恨…

所以我的那个new idea是不是可以出题之类的)

n , q < = 5 , k = 0 / n < = 1000 n,q<=5,k=0/n<=1000 n,q<=5,k=0/n<=1000

考虑 一个点合法 当且仅当正向的时候 这个点能被 s s s 走到

边反向之后 这个点能被 t t t 走到

标记一下就好

复杂度应该是 m q mq mq,但是就是可以冲过去)

28pts

m = n ? 1 m=n-1 m=n?1

首先 这个条件转换完之后 是一颗外向树

具体来说 因为题目保证联通,又有一个限制,如果 x , y x,y x,y可以到达 z z z 那么x可以到 y y y 或者 y y y 可以到 z z z

也就是说 到达一个点会出现两种方式

如果出现这种情况 n ? 1 n-1 n?1 条边会不够用

因此是外向树

在这个条件下

k = 0 k=0 k=0

直接统计 8pts

k = 1 k=1 k=1

8pts

k = 2 k=2 k=2

12pts
在这里插入图片描述
贴一个分讨的做法…就不人工手写了(主要还是因为看错题了所以非常悲伤)


这里放一个 当k可以钦定时的想法

k=1

分类讨论一下

d [ x ] d[x] d[x]表示x的深度

如果 s , t s,t s,t是父子关系

如果 s s s 是子节点 那么从 s s s 往下最长链的叶子处 连一条边到根节点一定最优(答案是 s s s子树内的最长链+ d [ s ] d[s] d[s]

如果 t t t 是子节点 答案是max( s , t s,t s,t路径上的点,不经过 s , t s,t s,t路径的最长链)+ d [ t ] d[t] d[t]

否则 是 s s s子树内的最长链+ d [ t ] d[t] d[t]

维护的时候应该需要记录一下最长链,次长链,以及条数

k=2?


正解

所有做法的基础:
在这里插入图片描述
做法1: 结合外向树做法分类讨论

做法2: 结合暴力虚树

注意 要写 O ( 1 ) O(1) O(1) lca,不然会卡常到明年…

day2T1

数据点 1,3

bitset+unoerdered_map
O ( 25 6 k + 1 ? l o g ? q ) O(256^{k+1}~log~q) O(256k+1?log?q)
8pts
乱搞做法:(据说 没有深究正确性)

枚举有几位不一样 ,然后在trie上跑(也许可以多过几个k比价小的点)

复杂度是在 O ( 25 6 k q ) O(256^kq) O(256kq)左右(吧)

数据点 8,9

思路大致和上面相同 不过因为k=1,改成hash
8pts

正解

抽屉原理,转成16组,1<<16进制

day2T2

n , q < = 2000 n,q<=2000 n,q<=2000

暴力直接做

20pts

A A A

注意 F和R都会改变操作序列

所以意思就是F,R也不会使得操作序列出现连续相同段

所以可能出现的序列只有两种:

W E W E W E . . . WEWEWE... WEWEWE...
E W E W E W . . . EWEWEW... EWEWEW...

比起维护当前序列,直接维护两种可能的序列,判断当前是哪种直接输出应该更简单

注意 每次添加数的时候 虽然是加在了最后,但是实际做的时候,效果应该是原来有…然后最前面多了一项

15pts

B , C B,C B,C

从这里往下的每一档部分分 都需要推出矩乘

不会平衡树15pts

C C C

不会平衡树维护reverse 20pts

正解

操作W对应

( 1 1 0 1 ) \begin{pmatrix} 1 & 1\\ 0 & 1 \end{pmatrix} (10?11?)

操作E对应

( 1 1 1 0 ) ( 1 1 1 0 ) ( 1 ? 1 0 1 ) = ( 2 ? 1 1 0 ) \begin{pmatrix} 1 & 1\\ 1 & 0 \end{pmatrix}\begin{pmatrix} 1 & 1\\ 1 & 0 \end{pmatrix}\begin{pmatrix} 1 & -1\\ 0 & 1 \end{pmatrix}=\begin{pmatrix} 2 & -1\\ 1 & 0 \end{pmatrix} (11?10?)(11?10?)(10??11?)=(21??10?)
在这里插入图片描述
之所以这样讨论 是因为当最后一项不是1的时候 用的是第二种情况,最后一项是1时,用的是第一种情况,但我们发现,当最后一项是1时,用第一种和第二种得到的答案相同,因此默认都用第一种就好了

最开始的初值是

( 1 1 1 0 ) ( 0 1 1 0 ) = ( 1 1 0 1 ) \begin{pmatrix} 1 & 1\\ 1 & 0 \end{pmatrix} \begin{pmatrix} 0 & 1\\ 1 & 0 \end{pmatrix}=\begin{pmatrix} 1 & 1\\ 0& 1 \end{pmatrix} (11?10?)(01?10?)=(10?11?)

注意 rotate是关键字…建议不要关codeblock的代码补全 起码不会撞关键字)

30pts

day2T3

吐槽一下…题解第一篇的all没有任何实际含义,纯纯是为了减掉0那个时候的容斥值,想了好半天…
在这里插入图片描述
再吐槽一下

注意这个条件

你以为这个条件没有任何用处?

不 你太naive了

这个条件的用处是:对于一种钦定完之后会爆炸的序列,它有一种合法方案,为全填空

所有的代码参考见这个博客

大佬的博客

算法1

暴力dfs+验证(hash)

注意 因为得到的最终的纸带不同会记做不同方案,所以每个点都要验证

复杂度 O ( 3 m n n 2 m ) O(3^{mn}n^2m) O(3mnn2m)

可以过掉点123

12pts

算法2

我会容斥!

考虑枚举 i i i 表示对于一些纸条来说,可以作为起点,且均合法的点集合(状压表示)

然后一一枚举过程中走到的第 r r r 个位置

可以计算出当前走的是第几步

然后可以判断, r r r这个位置可能的结尾值都有什么

接着判断每个方块对应的开始,结尾的值都可能是什么

那么容斥在哪里呢?

具体来说 比如一个纸条 可以以1,2位置为起点 那么以1的时候会计算一次 以2的时候会计算一次,以12的时候仍然会计算一次

所以需要容斥

记枚举到的合法的点数为 k k k 容斥系数是 ( ? 1 ) k + 1 (-1)^{k+1} (?1)k+1

复杂度 O ( n 2 2 n m ) O(n^22^nm) O(n22nm)

可过12347 20pts

可以发现 复杂度瓶颈主要在 2 n 2^n 2n

算法3

我会优化算法2!

考虑枚举最后一个合法位置 r r r

那么我们就可以发现走的距离大于 c > n ? r c>n-r c>n?r 的一定会爆炸

那么其实 我们前面记录的距离一定是 m i n ( r , n ? r ) min(r,n-r) min(r,n?r)

这样复杂度就变成了 O ( 2 n / 2 ) O(2^{n/2}) O(2n/2)

具体来说 我们转移的时候需要维护min的状态,min前面是否出现过一个转移点

做dp的时候处理当前位置,做完 r r r结尾的dp之后 再处理 r r r之后的位置

(详情见代码)

喜提ex28pts

算法4

我会优化算法3!

具体来说 这个算法不再循环M,考虑在bitset里维护 r c [ i ] [ o p ] rc[i][op] rc[i][op] 表示往后走 i i i 的位置 状态为 o p op op 的机器人都有哪些

那么统计答案的时候 只要把bitset对应算法3做相应的操作,再统计有多少个位置有值就好

复杂度 O ( n 2 m 2 n w ) O(\frac{n^2m2^n}{w}) O(wn2m2n?)

(分数比起上一档来说没有显著变化)

算法5

注意到 m ? > m w m->\frac{m}{w} m?>wm?

2 n ? > 2 n 2 2^n->2^{\frac{n}{2}} 2n?>22n?

在这两项上我们很难再有所突破 所以转而考虑 n 2 n^2 n2

注意到 我们在维护bitset的时候 每次都会扫一遍当前枚举到的状态 i i i 这其实很没有必要

具体来说 比如两个状态的二进制表示是 1000001 , 1000000 1000001,1000000 1000001,1000000

我们发现 只有最后一位不一样

因此我们可以结合lowbit的思想 具体来说,不每次去扫状态 i i i

改为 f [ i ] [ o p ] = f [ l b ( i ) ] [ o p ] ? ∣ ? f [ i ? x o r ? l b ( i ) ] [ o p ] f[i][op]=f[lb(i)][op]~|~f[i~xor~lb(i)][op] f[i][op]=f[lb(i)][op]??f[i?xor?lb(i)][op]

共计得分100

(老实说 这个题的思维难度真的很大…)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:21:18  更:2022-04-29 12:23:29 
 
开发: 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 6:53:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码