[NOI2010]

[NOI2010]海拔

高度只需要0/1,所以一个合法方案就是一个割,平面图求最小割。

[NOI2010]航空管制

反序拓扑排序,每次取出第一类限制最大的放置,这样做答案不会更劣。
考虑如何求每一个的最早时间,同上述拓扑排序,该元素不入队,当无点可拓展时就是最早时间。

[NOI2010]超级钢琴

对每一个左端点维护当前取出了前几大的右端点,用堆+主席树维护。

[NOI2011]

[NOI2011]兔农

不难发现数列模意义下的进程是:斐波那切数列,首项回归0(减一操作),斐波那切数列......
也就是说每一段中分别是一个斐波那切数列,故可以分段矩乘。
而模\(K\)意义下斐波那切数列循环节不超过\(6K\),所以处理出循环节后暴力。

[NOI2011]Noi嘉年华

区间离散化,设\(w_{l,r}\)为区间\([l,r]\)权值,设\(f_{i,j}\)表示前\(i\)个点场地一答案为\(j\),场地二的最大答案。
考虑算第二问的答案,对于询问区间,枚举包含它的大区间。类似\(f\)先处理好后缀答案\(g\)。
预处理大区间答案:\(ans_{l,r}=max_{x,y}\{min(w_{l,r}+f_{l-1,x}+g_{r+1,y}\ ,\ x+y)\}\)。
可以发现\(x\)上升\(y\)一定不降(为了平衡两边权值),所以只用枚举\(x\),\(y\)用一个指针维护,复杂度\(O(n^3)\)。

[NOI2011]阿狸的打字机

建\(AC\)自动机,相当于询问一个点跳\(fail\)能跳到一条\(dfs\)链上的几个点。
离线\(dfs\),然后用树状数组实现子树加计算答案。

[NOI2011]兔兔与蛋蛋游戏

把网格图转为二分图博弈,需要支持移动一步维持匹配、判定匹配必须点,找交替路即可。

[NOI2012]

[NOI2012]美食节

暴力,每道菜建点\(v\to T\),每个厨师建点\(S\to u\)。
对每个厨师,按天数分层建点,第\(i\)层表示做倒数第\(i\)道菜,并把该点向每道菜连边,跑费用流。
可以动态加边,当一个厨师被增广后,再给他建新菜的边,复杂度\(O(nm\sum_{j=1}^p j)\)不满,能过。

[NOI2012]魔幻棋盘

扩欧差分后矩阵修改变成单点修改,拿线段树套线段树分四个象限维护。

[NOI2012]骑行川藏

套拉格朗日最小乘子法公式:\(F(x_{1\sim n},\delta)=f(x_{1\sim n})+\delta g(x_{1\sim n})\)。
那么问题变为求一组解\((x_{1\sim n},\delta)\)满足每个变量的偏导都是\(0\),\(x_i\)显然是很好求的,二分即可。
不难发现\(\delta\)与\(F'(x_{1\sim n},\delta)=g(x_{1\sim n})\)呈反比关系,所以乘子\(\delta\)也可以二分求解。

[NOI2012]迷失游乐园

对于一棵树,从根出发最后一定是到一个叶子。当经过一个度数为\(p\)的点时,概率乘上\(\frac{1}{p}\)或\(\frac{1}{p-1}\)。
考虑每条边的贡献,换根\(dp\)即可。基环树由于环很小所以没什么区别,大力讨论起终点的位置然后暴力。

[NOI2013]

[NOI2013]向量内积

目前最喜欢的一道\(NOI\)题。
先考虑\(k=2\),显然可以构造两个矩阵\(A,B\),满足\([c_{i,j}]C=A\times B\)为\(vec_i,vec_j\)的向量内集。
我们现在的目标是判断\(A\times B\)是否为除对角线外全\(1\)的矩阵。
随机化,通过\(rand\)几个行向量与原矩阵向量相乘优化矩乘复杂度,然后判断结果是否相同。
关于\(k=3\),把矩阵\(C\)的每一项平方即可变为\(k=2\)的问题。
发现\(c_{i,j}=(\sum_{k=1}^n a_{i,k}b_{k,j})^2=\sum_{k=1}^n\sum_{t=1}^n(a_{i,k}a_{i,t})(b_{k,j}b_{t,j})\),所以扩域即可。

[NOI2013]快餐店

考虑计算快餐店落在每条边上的答案,变为求基环树上到某条边的最长路径,随便\(dp\)一下。

[NOI2013]树的计数

问题变为\(bfn\)序期望分多少层,考虑在一棵树上\(dfs\)的过程,不难发现:
若\(dfn_{bfs_{i}}>dfn_{bfs_{i+1}}\),则\(i,i+1\)必须分一层,贡献为\(1\)。
若\(bfn_{dfs_{i}}<bfn_{dfs_{i+1}}\),则\(bfn_{dfs_{i}},bfn_{dfs_{i+1}}\)最多分一层。剩下的未定点贡献均为\(0.5\)。

[NOI2014]

[NOI2014]购票

可以写出一个斜率优化的式子,然后上有根树点分治就行了。

[NOI2014]动物园

建\(next\)树,然后\(dfs\)一遍用栈维护即可。也可以先求\(next\),然后类似求\(next\)的把答案求出来。

[NOI2015]

[NOI2015]品酒大会

建后缀数组,按照\(Height\)从大到小合并,带权并查集维护答案。

[NOI2015]寿司晚宴

按照\(>\sqrt{n}\)的质因子分层状压\(dp\)。

[NOI2015]小园丁与老司机

暴力\(dp\),然后把所有路径抠出来后变为\(DAG\)覆盖问题,跑上下界网络流。

[NOI2016]

[NOI2016]区间

枚举\(r\),\(l\)显然随着\(r\)的增长单调递增。双指针后用线段树判合法,实时更新答案。

[NOI2016]循环之美

纯循环小数满足:\(x(K^t-1)\equiv y(mod K)\),由于\(x\perp y\)故\(K^t\equiv 1(mod\ y)\),有解时\(K\perp y\)。
所以\(Ans=\sum_{x=1}^n\sum_{y=1}^m [x\perp y][K\perp y]=\sum_{y=1}^m[K\perp y]\sum_{d|x,d|y}\mu(d)\)。
故\(Ans=\sum_{d}\mu(d)\lfloor \frac{n}{d}\rfloor\sum_{y=1}^{\lfloor \frac{m}{d} \rfloor} [yd\perp K]=\sum_{d}\lfloor \frac{n}{d}\rfloor(\sum_{y=1}^{\lfloor \frac{m}{d} \rfloor}[K\perp y])\mu(d)[d\perp K]\)。
令\(f(d)=\mu(d)[d\perp K]\),问题变为求\(\sum_{i=1}^n f(d)\)。
令\(g(d)=[d\perp K]\),可以发现\(f(d)*g(d)=e\),然后上杜教筛就行了。

[NOI2016]优秀的拆分

使用\(SA\)的顶标法解决。

[NOI2016]国王饮水记

把水位低于首都水位的地方先扔掉,把城市按水位升序排序。然后疯狂找(cai)性(jie)质(lun)。
(1)一个水池只会被合并一次,显然。
(2)最终合并的水池一定是一段后缀且分成若干连续段合并,反证法显然。
(3)把水池分开合并比一起合并更优,感性理解手玩一下的确是这样的。
设\(f_{i,j}\)表示前\(i\)个水池合并\(j\)次的最优解,\(f_{i,j}=min_k\frac{s_i+(f_{k,j-1}-s_k)}{i-k+1}\),其中\(s_i\)为水位前缀和,左式显然斜率优化。
(4)斜率优化的决策单调,即\(k\)随着\(i\)的增加而不降。利用\(s_{i+1}\ge s_{i}+i\),带入暴力验证即可。
(5)合并水池长度单调不升,若两段\(l_i <l_{i+1}\),把\(l_{i+1}\)的第一个元素移到\(l_i\)会更优,列式子暴力验证即可。
(6)长度大于\(1\)的段不会很多,不超过\(log(\frac{nh}{min(h_i-h_j)})\),即不超过\(14\),打表可得。
然后利用上述性质,我们只用求解\(f_{i,j\leq 14}\),最后\(dfs\)一遍,用高精小数类求出精确答案。

[NOI2016]旷野大计算

造计算机神题,题解令开一份:戳这里

[NOI2017]

[NOI2017]整数

先考虑\(|a|=1,b=1\)的暴力,线段树模拟二进制,加法就是向高维找\(0\),减法就是向高维找\(1\)。
可以发现\(b>1\)其实并没有什么不同,压位即可。

[NOI2017]蚯蚓排队

用链表模拟,每次\(O(K^2)\)暴力合并/删除即可。考虑每个点的贡献可以分析出复杂度为\(O(nK)\)。

[NOI2017]泳池

先把问题转为求面积\(\leq K\)的方案数。预处理长度为\(i(i\leq K)\)的合法方案数,剩下的就是线性递推。
考虑最低点,设\(f_{i,j}\)表示长度为\(i\),最低点高度为\(j\)的合法方案数,其中\(ij\leq K\)故状态数调和级数。
转移枚举最低点在哪(强制选最小最低点):\(f_{i,j}=q^j(1-q)\sum_{k=1}^j (\sum_{l=k+1}^{1000}f_{k-1,l})(\sum_{r=k}^{1000}f_{i-k,r})\)。

[NOI2017]游戏

搜一下未确定点的选择,然后上\(2-sat\)。

[NOI2017]蔬菜

首先第\(i-1\)天的蔬菜集合一定是第\(i\)天的子集,所以实际上只用求最大的那天的结果。
建网络流模型,\(S\to\)每种蔬菜,每种蔬菜按时间建一条链,链的容量限制按变质递减,链上每个结点向对应那天连边。
考虑每次增广,可以发现反悔边没有鸟用(每种蔬菜只用一个增广方向),所以考虑模拟费用流。
不难发现找最长路等价于每次取出价值最大的蔬菜增广,拿个堆维护即可。
最后的问题在于链上递减的容量限制。
因为每种蔬菜对每一天的贡献都是一样的,所以贪心的先增广较晚的天就行了,用并查集搞下。

[NOI2018]

[NOI2018]归程

\(Dij\)预处理\(1\)到每个点的最短路。建\(Kruskal\)重构树,问题变为子树最小值,随便维护下。

[NOI2018]冒泡排序

合法的充要条件为:不存在长度为\(3\)的下降序列。
稍加思考可以得到\(dp\):设\(f_{i,j}\)表示前\(i\)个的最大值为\(j\),转移\(f_{i,j}=\sum_{k=1}^j f_{i-1,k}\),其中\(j\ge i\)。
加了字典序的限制,考虑数位\(dp\),即我们需要直到一个后缀的方案数。
设\(g_{i,j}\)表示还有\(i\)个数要放,前面放的数的最大值为\(j\)的方案数,转移\(g_{i,j}=\sum_{k=j}^nf_{i+1,k}\),其中\(j\ge n-i+1\)。
用网格图优化一下\(g\)的求解,然后用树状数组维护合法性,从前往后数位\(dp\)求出答案。

[NOI2018]你的名字

先求\(T\)有多少不同子串,然后求\(T\)的每个前缀在\(S\)上的匹配长度,这个放在\(S\)的\(SAM\)上跑一下即可。
为了防止算重,对\(T\)也建\(SAM\),然后在这个\(SAM\)上跑一遍把答案跑出来。

[NOI2018]屠龙勇士

用\(set\)把每次战斗的剑搞出来,用扩欧把式子化为同余方程,然后上\(EXCRT\)。

[NOI2018]情报中心

设\(Len_{(u,v)}\)表示路径\((u,v)\)的长度。根据部分分的提示,分\(S_1,S_2\)两种情况讨论:
(1)两条路径的\(lca\)不同:
我们可以把路径\((u,v)\)拆成两条直上直下的路径\((u,z)\),其中\(dep_u>dep_z\)。
那么路径的交是一条从上往下的链,设为\((a,b)\),其中\(dep_a>dep_b\)。
考虑枚举\(a\),那么就是选两条路径\((u_1,z_1),(u_2,z_2)\)满足\(u_1,u_2\)在\(a\)的不同子树中。
这组选择的答案为:\(Len_{(u_1,v_1)}+Len_{(u_2,v_2)}+val_1+val_2-dis_a+max(dis_{z_1},dis_{z_2})\)。
设\(f_{x,j}\)表示\(u\)在\(x\)子树内,\(dep_z=j\)的最优信息,用线段树合并维护一下这个值并求答案。
(2)两条路径的\(lca\)相同:
首先对每个\(lca\)建虚树。对每个虚树分别求一遍。
设\((u_1,v_1),(u_2,v_2)\)的路径交为\((a,b)\),其中\(u_1,u_2\)在\(a\)子树中。
一个关键的转化:答案的两倍=\(Len_{(u_1,v_1)}+Len_{(u_2,v_2)}+val_1+val_2+dis(u_1,u_2)+dis(v_1,v_2)\)。
考虑枚举\(a\),那么令\(W_{(u_1,v_1)}=Len_{u_1,v_1}+val_1+dis_{u_1}\)。
答案变为\(dis(v_1,v_2)+W_{(u_1,v_1)}+W(u_2,v_2)-2dis_{a}\),\(-2dis_a\)扔掉,就是一个集合直径问题。
额外挂的边权值可能为负,但分析可知这张图依旧满足正权直径定理,所以暴力合并即可。
结合两部分就是正解,第一部分为\(O(nlogn)\),第二部分为\(O(n+m)\),需要注意实现细节。

NOI2010~NOI2018选做的更多相关文章

  1. [SDOI2016]部分题选做

    听说SDOI蛮简单的,但是SD蛮强的.. 之所以是选做,是因为自己某些知识水平还不到位,而且目前联赛在即,不好花时间去学sa啊之类的.. bzoj4513储能表&bzoj4514数字配对 已写 ...

  2. 20175221 《Java程序设计》迭代和JDB(课下作业,选做):

    20175221 <Java程序设计> 迭代和JDB(课下作业,选做): 任务详情 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功 ...

  3. MyOD(课下作业,选做)

    MyOD(课下作业,选做) 代码要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.b ...

  4. 迭代和JDB(课下作业,选做)

    迭代和JDB(课下作业,选做) 题目要求 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功能 2 m,n 要通过命令行传入 3 提交测试运行截图 ...

  5. 20175312 2018-2019-2 《Java程序设计》第6周课下选做——类定义

    20175312 2018-2019-2 <Java程序设计>第6周课下选做--类定义 设计思路 1.我觉得Book其实就是一个中转的作用,由测试类Bookself通过Book输入数据,然 ...

  6. 20175314薛勐 MyOD(课下作业,选做)

    MyOD(课下作业,选做) 要求 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 思路 伪代码: 读取命令行输入的参数(文件名) 以16为每个字 ...

  7. 20155228 2017-11-19 实现mypwd(选做,加分)

    20155228 2017-11-19 实现mypwd(选做,加分) 题目和要求 学习pwd命令 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 实现mypwd 测试mypwd ...

  8. 2017-2018-2 20165312 课下选做 MySort

    2017-2018-2 20165312 课下选做 MySort 题目描述 模拟实现Linux下Sort -t : -k 2的功能,参考 Sort的实现. import java.util.*; pu ...

  9. 「LOJ2000~2023」各省省选题选做

    「LOJ2000~2023」各省省选题选做 「SDOI2017」数字表格 莫比乌斯反演. 「SDOI2017」树点涂色 咕咕咕. 「SDOI2017」序列计数 多项式快速幂. 我们将超过 \(p\) ...

随机推荐

  1. Unity Shader 学习之旅之SurfaceShader

    Unity Shader 学习之旅之SurfaceShader unity shader 图形图像  如果大地的每个角落都充满了光明 谁还需要星星,谁还会 在夜里凝望 寻找遥远的安慰——江河 官方文档 ...

  2. Git知识点整合

    Git安装 Windows上安装Git 64 位安装包下载地址 : https://github.com/git-for-windows/git/releases/download/v2.16.2.w ...

  3. kuberentes 源码编译安装

    下载源码 git clone https://github.com/kubernetes/kubernetes && cd kubernetes # 切换版本分支 git checko ...

  4. HotSpot JVM 常用配置设置

    本文讨论的选项是针对HotSpot虚拟机的. 1.选项分类及语法 HotspotJVM提供以下三大类选项: 1.1.标准选项 这类选项的功能是很稳定的,在后续版本中也不太会发生变化. 运行java或者 ...

  5. Vue 入门之概念

    Vue 简介 Vue 是一个前端的双向绑定类的框架,发音[读音 /vjuː/, 类似于 [view].新的 Vue 版本参考了 React 的部分设计,当然也有自己独特的地方,比如 Vue 的单文件组 ...

  6. 08慕课网《进击Node.js基础(一)》事件events

    引用events模块中的EventEmitter 事件的监听和发射 相同的事件发射数量有限,可以通过setMaxListeners设置峰值 var EventEmitter = require('ev ...

  7. WebGL学习笔记三

    在上一章中主要说明了通过矩阵来实现平面图形的平移.旋转.缩放,到最后完全可以用4*4矩阵实现所有的动作,在本章就是第四章主要是对矩阵进行了封装,其WebGL的流程和上一章大部分大部分相同,定义可以在w ...

  8. 【CS231N】3、Softmax分类器

    wiki百科:softmax函数的本质就是将一个K维的任意实数向量压缩(映射)成另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)之间. 一.疑问 二.知识点 1. softmax函数公式 ...

  9. mvc拦截请求IHttpModule

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...

  10. 【CSAPP笔记】9. 汇编语言——缓冲区溢出

    x86-64 Linux 内存结构 先来看看一个程序在内存中是如何组织的.Linux 为每个进程维持了一段单独的虚拟地址空间.(进程是计算机科学中很深刻.很成功的一个概念.当我们在运行一个程序时,会得 ...