2022 正睿 NOIP 十连测
Day1
100+100+70+60,rank 5。
A
对
B
钦定
时间复杂度
C
因为写完这题以后没时间对拍了,所以写挂了。
设
- 设完全被
包含的区间有 个,若 ,我们需要删除其中代价最小的 个区间; - 我们需要将
的区间全部删除。
通过一些简单的处理,可以做到
D
洛谷 P6106 弱化版。
我的 60 分做法
对于测试点
但是直接这样做会爆空间。用莫队二次离线中的优化空间的方法,我们只记录线段从哪里开始移动、移动了多少个位置、移动的方向,在扫描线的过程中用 std::forward_list
维护所有存在的线段。这样我们只需要记录
正解
对于正着的移动和斜着的移动分别考虑。正着的、斜着的移动分别有两种,我们分别只考虑其中的一种,剩下的一种通过旋转坐标轴来处理。仍然做扫描线并维护差分数组。
- 对于竖向的移动,在差分数组上表现为区间加。
- 对于斜向的移动,斜着做扫描线。
代码不可能写。
Day2
100+100+10+30,rank 11。
A
因为
B
直接拉格朗日插值即可。
C
写错了一行,然后 100->10。能不能给个大样例啊?
对于一条边
点分治,每次处理经过分治中心
时间复杂度
D
设
可以看出
最后一个问题是计算答案。用归纳法可以证明
Day3
100+100+60+30,Rank 25。
A
略。
B
设
转移时,我们需要选择
C
随机选择一个
D
Day4
100+100+45+0,Rank 23。
A
考虑第一个
B
将所有已知的边按边权从小到大排序,并求出最小生成树。对于每条已知的非树边,求出它连接的两个点会在哪条树边加入后连通。
那么我们就可以算出边权相邻的两条已知的边之间能放多少条未知的边,然后检查总的能放的个数是否等于未知边条数即可。时间复杂度
C
以后一定补!
D
Day5
100+100+20+30,Rank 32。
A
从前往后扫,维护一个栈表示当前合并完得到的元素。每次加入一个元素时,检查它与栈顶能不能合并,最终若栈中只剩一个元素,那么答案为 Yes
。用 std::bitset
维护每个数中的质因子,时间复杂度
B
每行的 LR
,以及每列的 UD
,都是独立的,不妨只考虑一行的 LR
如何计算答案。我们要算出这一行匹配的方案数
设 R
想匹配但还没匹配的喜悦值之和,
设
C
首先是一个经典的容斥,答案是:
考虑将二项式系数拆成单项式之和,将式子化为:
时间复杂度
Day6
100+100+60+40,Rank 16。
A
“移动到相邻的格子”和“跳一步或多步”这两种操作间是互不影响的,也不会走到重复的格子。移动到相邻的格子是好做的,对于“跳”操作,预先将所有能够跳一步到达的点对之间连边,并预处理所有连通块的大小即可。
时间复杂度
B
首先,分三种情况讨论:
- 若
中既没有G
也没有T
,则最优方案是执行 ; - 若
中有G
但没有T
,那么找到第一个G
的位置,设为 ; - 若
中有T
,那么找到第一个非A
的位置,设为 。
若是后两种情况,最优方案就是执行
C
首先考虑
再考虑树怎么做。一个朴素的想法是设
将上面两个东西合起来。任取原图的一棵 DFS 树,非树边只有
设
D
JOISC 铁道旅行。
这个题的连边满足:若
所以要想跳得很远,要不然跳得尽量往左,要不然跳得尽量往右。设
考虑一个询问
时间复杂度
int n, mth[N], l[N][LogN], r[N][LogN]; char s[N];
int main() {
cin >> (s + 1); n = strlen(s + 1);
stack<int> stk;
For(i, 1, n) {
if (s[i] == '(') stk.push(i);
else {
int j = stk.top(); stk.pop();
mth[j] = i, mth[i] = j;
}
}
For(i, 1, n) {
l[i][0] = min(i, mth[i]), r[i][0] = max(i, mth[i]);
if (i > 1) l[i][0] = min(l[i][0], i - 1);
if (i < n) r[i][0] = max(r[i][0], i + 1);
}
For(j, 1, LogN - 1) For(i, 1, n) {
l[i][j] = min(l[l[i][j - 1]][j - 1], l[r[i][j - 1]][j - 1]);
r[i][j] = max(r[l[i][j - 1]][j - 1], r[r[i][j - 1]][j - 1]);
}
int q; cin >> q;
For(_, 1, q) {
int u, v; cin >> u >> v;
if (u == v) { cout << "0\n"; continue; }
if (u > v) swap(u, v);
int L = u, R = u, ans = 0;
Dec(i, LogN - 1, 0) {
int j = max(r[L][i], r[R][i]);
if (j < v) L = min(l[L][i], l[R][i]), R = j, ans += 1 << i;
}
u = R, L = R = v;
Dec(i, LogN - 1, 0) {
int j = min(l[L][i], l[R][i]);
if (j > u) R = max(r[L][i], r[R][i]), L = j, ans += 1 << i;
}
cout << ans + 1 << '\n';
}
return 0;
}
作者:alan-zhao-2007
出处:https://www.cnblogs.com/alan-zhao-2007/p/2022-zroi-noip.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具