NOIP 口胡
因为没准备啥东西 这两天口胡一下近年 NOIP 的题
大概会一道不落?没什么很寄的考点主要是
2021
T1 报数
打一个 \(O(\log n)\) 查询 \(n\) 中是否有 \(7\),打一个类埃式筛筛掉所有倍数。然后可以 lower_bound
也可以直接记录下一个数是多少。
总时间复杂度小常数 \(O(n \log n)\)。
T2 数列
发现数据范围小,考虑直接 dp。由于一堆 \(2^a\) 时需要进位,我们设计状态 \(f(i,j,k,p)\) 为 当前到了 \(S\) 中的第 \(i\) 位,到了 \(a\) 中的第 \(j\) 位,\(S\) 的二进制表示下有 \(k\) 个 \(1\),同时该位需要向下一位进位 \(p\) 的情况下,所有乘积之和。
考虑枚举一个值 \(v\),一个出现次数 \(t\)。然后 \(f(i,j,k,p)\) 可以向 \(f(i+1,j+t,k+(t + p) \& 1, (t + p) / 2)\) 转移,系数是 \(v^t \times \binom{n-j}{t}\)。
最后统计答案时 \(k + \text{popcount}(p)\) 小于给定的 \(k\) 时能计入。
总时间复杂度 \(O(n^4m)\) 的。最好写成刷表的形式。或者记搜?
T3 方差 术劣
简单化柿子得到需要最小化 \(n\sum_{i=1}^na_i^2 - \left(\sum_{i=1}^na_i\right)^2\)。
你像这种有奇怪操作的题,他的套路就是通过一些变换(缀和/差分/邻位异或/特征异或)把操作转成正常操作。一般顺着试一遍大概就出来了。这题是差分。
发现操作就是交换差分的两项。
不是很会推式子,但总而言之最终需要让差分呈现单谷的情况。似乎打完爆搜能搜出来?
首先 sort 一下差分序列。从小到大考虑每个值该放在左边还是右边最优。
设 \(f(i,x)\) 为当前需要放第 \(i\) 个差分 \(d_i\),\(\sum_{i=1}^na_i = x\) 时的 \(\sum_{i=1}^na_i^2\) 最小值。考虑放在左右两侧的情况。放在左侧就是 \(f(i,x) + i\times d_i^2 + 2d_i\times x \to f(i+1,x+i\times d_i)\),右侧就是 \(f(i,x) +\left(\sum_{j=1}^id_i\right)^2\to f(i+1,x+ \sum_{j=1}^id_i)\)。哦我还能记录一下差分的和是吧
最后取 \(\min_{i=0}^{sum}(n \times f(n, i) - i^2)\) 就是答案。
发现一个事,这样是 \(O(n^2\times \max a_i)\) 的,会炸。但是由于 \(a_i\) 升序,差分中不为 \(0\) 的项是 \(\min\{\max a_i, n\}\) 的。删除无用状态后做到 \(O(n\times\max a_i\times \min\{\max a_i, n\} )\)。
T4 棋局
……
会 但是不想说也不想写
一类边暴力 二类边用并查集维护连续段和段端点 三类边用线段树合并 每个连通块维护连通块边上的棋子的黑白性和等级
跳了
2020
T1 排水系统
希望场上会写高精
不考虑高精的话直接拓扑排序维护 dp 即可。
我记得 noip 可以用 __int128
来着
T2 字符串匹配
反正我上来思考的方式是 \(O(26n + n\log n)\)。
首先记录前缀和后缀的每个位置中出现奇数次的字符的数量以及这个的前缀和。然后可以直接枚举 \(|AB|\) 的长度,每次往前蹦一格,看 \(C\) 里出现奇数次的字符的数量,查询有几个 \(A\) 满足条件,加入即可。
总时间复杂度似乎是 \(O(26n + n\log n)\) 的。
T3 移球游戏
不会。
会个 \(n=2\) 暴力。首先有一种操作是把一个栈 \(X\) 里给定的颜色提到最顶上。我们需要一个空栈和一个满栈。设给定的颜色个数为 \(x\),我们先把满栈里的 \(x\) 个元素扔到空栈里面,再依次将 \(X\) 弹空。如果当前弹出的是给定颜色则扔进原来满的栈里,反之扔进原来空的栈里。最后先把原来空的栈里的元素弹进 \(X\) 里,再把原来满的栈里的元素弹进 \(X\) 里,满栈复位,完成。
这样也能把颜色提到最底下。总操作数是 \(2n + 2x\) 的。
然后对颜色分治。首先将 \(\le mid\) 的颜色置成 \(1\),其他颜色置成 \(0\)。把一个颜色提出来后分治即可。
总操作次数约为 60w 次。可以通过此题。
T4 微信步数
第一个观察是直接枚举点来移动的复杂度绝对炸掉。考虑每次操作后能接着移动的点都是一个 \(k\) 位超立方体,维护这玩意就行。
第二个观察是第一轮过后每一轮只要能结束那么对超立方体边界的减少量是相似的。可以列出式子求和。
我们设能走满 \(k\) 轮,求和得到的结果是 \(\sum_{i=1}^n \sum_{x=0}^k f(x)\)。\(f(x)\) 是个 \(i + 1\) 次多项式,系数可以直接插出来。
拉插:\(f(x) = \sum_{i=1}^n f(x_i) \prod_{j\neq i}\frac{x - x_j}{x_i - x_j}\)。
然后我们就只需要做一下 \(i\) 次方前缀和了。暴力即可。或者也可以伯努利数做,但这就不是 NOIp
而是 noip
了。
2019
?您在期待什么
2019 年没有 NOIp
2018
D1T1 铺设道路
好吧没想到最简单的做法
首先你这个肯定贪心地在填右边的时候填左边,因此假设 \(a_0 = 0\),我们有答案即为 \(\forall \ 1\le i\le n\ \land \ a_i > a_{i-1}, a_i - a_{i-1}\)。
D1T2 货币系统
背包。
贪心地 sort 一下,从小到大跑值域上的背包。如果已经被拼出来了就扔掉,反之不扔。
D1T3 赛道修建
听说很厉害的贪心,为什么我看着像 sb 题?
首先二分。然后把孩子里的链拼合。由于一条边只能被经过一次,所以选孩子里没被选的最长链传给父亲接着决策就行了。
每次看当前决策的链里有没有大于 \(\text {mid}\) 的和拼起来大于 \(\text{mid}\) 的。第一类直接删,第二类对最小值二分即可。
D2T1 旅行
不会 log 解法。
树上简单。把你的 vector sort 一遍就完了。
基环树上简单。枚举不走哪条边再 sort 你的 vector 就完了。
D2T2 填数游戏
是个打表找规律题。
首先打表可以发现 \(f(n,m) = f(m,n)\)。这点的构造是翻转每一位,矩形旋转 90°,左右翻转。
然后打表可以发现 \(f(1,m) = 2^m\)。这点……显然。
最后打表可以发现当 \(m > n + 1\) 时 \(f(n,m) = 3\times f(n,m-1)\)。证明不会(
之后去学学(
D2T3 保卫王国
听说是个 ddp?
NOIP 口胡的更多相关文章
- NOIP2016考前做题(口胡)记录
NOIP以前可能会持续更新 写在前面 NOIP好像马上就要到了,感觉在校内训练里面经常被虐有一种要滚粗的感觉(雾.不管是普及组还是提高组,我都参加了好几年了,结果一个省一都没有,今年如果还没有的话感觉 ...
- Topcoder口胡记 SRM 562 Div 1 ~ SRM 599 Div 1
据说做TC题有助于提高知识水平? :) 传送门:https://284914869.github.io/AEoj/index.html 转载请注明链接:http://www.cnblogs.com/B ...
- 口胡FFT现场(没准就听懂了)&&FFT学习笔记
前言(不想听的可以跳到下面) OK.蒟蒻又来口胡了. 自从ZJOI2019上Day的数论课上的多项式听到懵逼了,所以我就下定决心要学好多项式.感觉自己以前学的多项式都是假的. 但是一直在咕咕,现在是中 ...
- BZOJ 口胡记录
最近实在是懒的不想打代码...好像口胡也算一种训练,那就口胡把. BZOJ 2243 染色(树链剖分) 首先树链剖分,然后记录下每个区间的左右端点颜色和当前区间的颜色段.再对每个节点维护一个tag标记 ...
- Atcoder/Topcoder 口胡记录
Atcoder/Topcoder 理论 AC Atcoder的❌游戏示范 兴致勃勃地打开一场 AGC 看 A 题,先 WA 一发,然后花了一年时间 Fix. 看 B 题,啥玩意?这能求? 睡觉觉. e ...
- 关于有向图走“无限次”后求概率/期望的口胡/【题解】HNCPC2019H 有向图
关于有向图走"无限次"后求概率/期望的口胡/[题解]HNCPC2019H 有向图 全是口胡 假了不管 讨论的都是图\(G=(V,E),|V|=n,|E|=m\)上的情况 " ...
- 「口胡题解」「CF965D」Single-use Stones
目录 题目 口胡题解 题目 有许多的青蛙要过河,可惜的是,青蛙根本跳不过河,他们最远只能跳 \(L\) 单位长度,而河宽 \(W\) 单位长度. 在河面上有一些石头,距离 \(i\) 远的地方有 \( ...
- PKUSC 2022 口胡题解
\(PKUSC\ 2022\)口胡题解 为了更好的在考试中拿分,我准备学习基础日麻知识(为什么每年都考麻将 啊啊啊) 首先\(STO\)吉老师\(ORZ,\)真的学到了好多 观察标签发现,这套题覆盖知 ...
- 「线性基」学习笔记and乱口胡总结
还以为是什么非常高大上的东西花了1h不到就学好了 线性基 线性基可以在\(O(nlogx)\)的时间内计算出\(n\)个数的最大异或和(不需要相邻). 上述中\(x\)表示的最大的数. 如何实现 定义 ...
- 「浙大ACM」图森未来杯游记一篇以及简易口胡题解
前言 蒟蒻有参加了ACM比赛,这一次有适合HY和慕容宝宝大佬一起比的,他们好巨啊,把我带飞了. 又是窝掌机,QAQ,他们仗着自己巨,就欺负窝... 我又打了\(4\)个小时的代码,而且那个键盘太恶心了 ...
随机推荐
- MySQL 中 datetime 和 timestamp 的区别与选择
MySQL 中常用的两种时间储存类型分别是datetime和 timestamp.如何在它们之间选择是建表时必要的考虑.下面就谈谈他们的区别和怎么选择. 1 区别 1.1 占用空间 类型 占据字节 表 ...
- 计算shell 脚本的执行时间
# shell_time.sh #!/bin/bash UseTime () { startTime_s=`date +%s` # 获取从1970-01-01 00:00:00 UTC到现在的秒数 $ ...
- 12. Fluentd部署:多Workers进程模式
介绍如何使用Fluentd的多worker模式处理高访问量的日志事件.此模式会运行多个worker进程以最大利用多核CPU. 原理 默认情况下,一个Fluentd实例会运行一个监控进程和一个工作进程. ...
- [算法2-数组与字符串的查找与匹配] (.NET源码学习)
[算法2-数组与字符串的查找与匹配] (.NET源码学习) 关键词:1. 数组查找(算法) 2. 字符串查找(算法) 3. C#中的String(源码) 4. 特性Attribute 与内 ...
- 引擎之旅 Chapter.4 日志系统
关于近段时间为何没有更新的解释:Find a new job. 目录 引言 日志语句的分类 控制台窗体 和 VSOutput Tab的日志打印 存储至特定的文件中 展示堆栈信息 引言 一般来说,一个优 ...
- Java中的多线程的创建方式
首先理清几个基本概念: 程序:为完成特定任务,用某种语言编写的一组指令的集合.即一段静态的代码(还没运行起来) 进程:是程序的一次执行过程,也就是说程序运行起来了,加载到了内存中,并占用了cpu的资源 ...
- RAID5 IO处理之重构代码详解
1 作用 当阵列降级时,可以添加一块新盘进行重构,以恢复阵列的冗余. 2 发起重构 可以通过以下命令md并发起重构: mdadm -C /dev/md0 --force --run -l 5 -n 3 ...
- 开源数字基础设施 项目 -- Speckle
[Speckle](https://speckle.systems/)是用于 3D 设计的任何东西的开源数字基础设施.处理软件孤岛.实时协作.数据管理.版本控制和自动化之间的互操作性.致力于构建一个开 ...
- 记一个深层的bug
1. 业务场景 产品需要每隔几天进行一次组件的更新,在自动化测试中,每隔30s检测一次更新源上的某个文件MD5值是否与本地一致,不一致代表有更新的版本,开始更新. 2. 问题出现 一个再平常不过的繁忙 ...
- go channel原理及使用场景
转载自:go channel原理及使用场景 源码解析 type hchan struct { qcount uint // Channel 中的元素个数 dataqsiz uint // Channe ...