[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. Siki_Unity_3-7_AssetBundle从入门到掌握

    Unity 3-7 AssetBundle从入门到掌握 任务1&2&3:课程介绍 AssetBundle -- 用于资源的更新 为了之后的xLua (Lua热更新的框架)打下基础 任务 ...

  2. 我是如何自学 Python 的?

    最近一直有读者私信问我,Ahab你是如何学习Python的?能推荐几本适合新手学习的书吗?有没有好的实践项目分享一下呢? Python未来发展前景怎么样呀?今天我就认真的告诉大家我是如何学习Pytho ...

  3. TensorFlow学习之路1-TensorFlow介绍

    TensorFlow是一个采用数据流图(data flow graphs),用于数据计算的开源软件库. 什么是数据流图? TensorFlow的数据流图是由“节点”(nodes)和“线”(edges) ...

  4. Set up classpath in Eclipse

    On Eclipse main window Right click on .java file-> Run As -> Run Configurations... On Run Conf ...

  5. /etc/profile不生效问题

    http://blog.csdn.net/cuker919/article/details/54178611

  6. Fourteenth scrum meeting

    闫昊 今日完成:整理上一阶段代码,规划第二阶段实施过程 明日完成:学习讨论区开发 唐彬 今日完成:整理上一阶段代码,规划第二阶段实施过程 明日完成:学习学习进度部分开发 史烨轩 今日完成:整理上一阶段 ...

  7. 实验三:敏捷开发与XP实践

    Java实验三报告 一.   实验内容 (一)敏捷开发与XP 内容:1.敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法. 2.极限编程(eXtreme Pro ...

  8. 炸弹人NABCD分析

    团队项目NABCD分析结果 N(Need 需求):现在安卓手游比较热门,所以我们想要编写这样一款软件应用于学生,让学生可以在课余时间放松心情,缓解学习压力. A (Approach 做法):使用Coc ...

  9. frist Django app — 一、 创建工程(转载)

    转载地址:https://www.cnblogs.com/sunshine-2015/p/5658283.html 缘起 既然python都学了,学习python的时候感觉是相见恨晚,一种新的编程语言 ...

  10. 浅谈Java中的Hashmap

    HashMap:   java.lang.Object ∟ java.util.AbstractMap<K,V> ∟ java.util.HashMap<K,V> 类型参数: ...