首页 > 其他分享 >往年 NOI 做题记录

往年 NOI 做题记录

时间:2023-04-09 21:24:10浏览次数:42  
标签:... le NOI 记录 dfs 1a 往年 向量 答案

一个新坑,先把真题都刷一下大概就知道会考什么和难度怎么样了。

2013

向量内积

给定一个 \(n\) 个 \(m\) 维向量,求出一组不同的向量 \(p,q\) 使其内积(点乘)在模 \(k\) 意义下为 \(0\)。

\(k=2,1\le n\le 2\times 10^4, 1\le m\le 100\) 或 \(k=3,1\le n\le 10^5, 1\le m\le 30.\)

*哈希,矩阵,模

神奇套路题。主要思想:随机化哈希判断相等。原理:哈希值相同是真的相同的必要条件。

把向量想象成一个 \(n\times m\) 的矩阵 \(A\),题目等价于 \(AA^T\) 在非对角线上存在 \(0\) 值。先考虑 \(k=2\) 的情况,只需判断是不是全是 \(1\) 即可。直接做是 \(n^2m\) 的,考虑再乘上一个 \(n\times 1\) 的列向量,可以优化到 \(O(nm)\)。这时只需判断最后的结果是否相同,随几次可以认为是对的。

\(k=3\) 时我们发现 \(1^2\equiv 2^2\equiv 3\pmod 3\)。于是我们把答案的矩阵每个数平方,对应到原来的矩阵即把向量 \(a_1,a_2,...,a_m\to a_1a_1,a_1a_2,...a_1a_m,a_2a_1,a_2a_2,...,a_2a_m,...a_ma_1,a_ma_2,...a_ma_m\)。所以可以 \(O(nm^2)\)。

code

矩阵游戏

*数列,费马小定理

先把单独一行拿出来看,设 \(f_1\) 是这一行的第一个元素,有 \(f_i=f_{i-1}*a+b\)。所以 \(f_m=f_1a^{m-1}+\frac{a^{i-1}-1}{a-1}b\)。如果不会的可以再去补一下高中数学。

然后设 \(g_i\) 是第 \(i\) 行的 \(f_m\),有 \(g_i=(g_{i-1}c+d)a^{m-1}+\frac{a^{i-1}-1}{a-1}b\),然后换个元又变成上面的式子,搞一搞就出来了。

但是 \(n,m\) 太大怎么搞?我们有一个费马小定理,\(a^{p-1}=1\pmod p,a<p\)。然后就可以降到 \(p\) 以下了。

坑点:注意 \(a=1\) 时等比数列求和公式不存在,需要特判,而次时又需要模 \(p\) 的 \(n,m\),所以 \(n,m\) 两个都要模。

树的计数

*概率期望,树的遍历

首先我们发现我们要求的就是树的期望高度,然后根据期望的线性性我们可以把它分成几层。

观察到这个树的编号是无所谓的,我们可以给bfs序重新编号成 \(1\) 到 \(n\),同时改变dfs序,这样不会有影响。

又发现bfs是按层来搞的,所以我们下一步就是分层,也就是把bfs划分成几个区间,每个区间在一层。

显然这不可能是随便分层,有一些限制。我们用一个数组来表示 \(i\) 和 \(i+1\) 直接有没有分割,如果为 \(0\) 即为不确定。

1,\(1\) 和 \(2\) 之间一定有分隔。这很显然。

2,假设 \(d_i\) 是 \(i\) 在dfs序中的位置。若 \(d_i>d_{i+1}\) 说明dfs的过程中先遍历到 \(i+1\) 再遍历到 \(i\),而如果他们在同一层中则不可能(因为是按顺序排的),所以它们一定不在同一层中,答案加一。

3,还有这第三个限制,也是比较难想到的。假设 \(dfn_i\) 是dfs序,若 \(dfn_i+1<dfn_{i+1}\),说明 \(dfn_{i+1}\) 的 深度最多比 \(dfn{i}\) 多1,所以 \(dfn_{i}\) 与 \(dfn_{i+1}\) 之间最多放一个分隔线,而枚举几种情况发现期间必有一条分隔线,所以这一段不得再有其他分隔线。

最后,如果还是可填可不填的答案就加0.5。

快餐店

*基环树,dp

这是一道类似于基环树直径的题。显然答案为直径除以2。

考虑暴力的做法,每次断一条环上边,然后找一下当前的直径,再取一个最小值即可。

优化也很简答,维护四个数组 \(h1,h2,g1,g2\) 分别代表到左端点(环上第一个点)前缀最大值,到右端点(也是环上第一个点(嘿嘿想不到吧,只不过饶了一圈))后缀最大值,以及前缀最大答案和后缀最大答案,不动的看一下图就懂了。

NOI2013.png

然后我们枚举断边\(i \rightarrow i+1\),然后拿\(max(h1[i]+h2[i+1],max(g1[i],g2[i+1]))\)来更新答案,别忘了再和不在环上的链取最大。

书法家

*dp

从右往左,\(11\) 个 dp。注意细节就好。

标签:...,le,NOI,记录,dfs,1a,往年,向量,答案
From: https://www.cnblogs.com/zcr-blog/p/17301087.html

相关文章

  • 2023第14届蓝桥杯C/C++A组参赛记录+部分题解
    比赛记录早上起得还算早,没吃早餐,我吃早餐会瞌睡,也会变蠢。在门口还没来得及和队里其他同学聊几句就进场了......键盘还是一样的难用,软件有codeblocks和dev,很舒服。今年来参加蓝桥杯的人好多啊......女生也好多。听说今年蓝桥杯有统一的正经培训,不过和我这个被踢出蓝桥杯群的......
  • NOI / 1.8编程基础之多维数组 04:错误探测
    描述给定n*n由0和1组成的矩阵,如果矩阵的每一行和每一列的1的数量都是偶数,则认为符合条件。你的任务就是检测矩阵是否符合条件,或者在仅改变一个矩阵元素的情况下能否符合条件。"改变矩阵元素"的操作定义为0变成1或者1变成0。输入输入n+1行,第1行为矩阵的大小n(0<n<100),以......
  • Ubuntu22.04办公环境初始设置记录
    1前言这周末刚从Windows办公环境切换到Ubuntu22.04,有些东西还是比较折腾,记录一下便于以后查找。2.安装时的分区设置从一块完整的新硬盘安装Ubuntu单系统时,只需要以下分区:ESP分区(EFISystemPartition),设为200MB即可,是GPT分区表存储的位置。UEFI引导的系统都需要这个分区。......
  • 练习记录-cf-div2-856(A-C)
    vp的写出4道C感觉目前不是能力范围以后有机会留下来打比赛的话再说A-PrefixandSuffixArray给出字符串的前缀和后缀问是不是回文 我采用枚举长度为n-1和1的拼凑但是这并不奏效一直wa3后来改用拼两个n/2的就过了如果有大佬看到了希望能解答一下qwq#include<b......
  • 练习记录- AtCoder Beginner Contest 295(D)
    vp的觉得我的D很聪明所以来写一下(乐D-ThreeDaysAgo题意就是求所有字符出现次数均为偶数的字串数量太笨了所以想了很久我把存在奇数个1当作第2位是2那么当经过了两次1 2^2这个2就变成了02就是第二位就是4...以此类推 所以我遍历一遍字符串求出当前的异或......
  • 练习记录-cf-div2-864(A-D)
    状态不怎么好场上就写出3道还磨磨蹭蹭推错结论qwq 警钟长鸣A.LiHuaandMaze一开始以为要切割发现就把其中一个包起来就行了计算包某个块需要的最小块数#include<bits/stdc++.h>#defineclosestd::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)usingn......
  • 【转】git 合并某个分支上某次commit记录到另外一个分支
     转,原文:https://www.cnblogs.com/wjxbk/p/15469212.html------------------------------ git合并某个分支上某次commit记录到另外一个分支 需求:需要将A分支的某次提交记录,合并到B分支 解决步骤:1)gitcheckoutA分支找到提交的commitid可以使用gitlog命令......
  • ARC 比赛记录
    \(\text{ARC148}\)赛时通过\(\text{ABC}\),\(\text{D}\)不会。\(\text{performance:}1691\)。目前改题情况:\(\text{EF}\)待改。这一场可以说是我第一次认真的打的\(\text{ARC}\),虽然打的很烂。\(\text{ARC149}\)赛时通过\(\text{ABC}\),\(\text{D}\)不会。\(\text{pe......
  • 记录一次linux代理访问服务静态资源失败问题
     1.后台端口  2.  3.访问成功的页面静态资源加载  4.访问成功但是静态资源没有出来 ......
  • 练习记录-AtCoder Beginner Contest 296(A-F)
    vp的感觉整场挺智慧A-Alternately找有没有连续的男女#include<bits/stdc++.h>#defineclosestd::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)usingnamespacestd;typedeflonglongll;constllMAXN=3e5+7;constllmod=1e9+7;constllinf=0x3......