2024.4 模拟赛日志
- 2024 年 syzx 春季训练 1(20240315)
- SS240323(20240323)
- 冲刺NOI2024联测1(20240329)
- 2024 年 syzx 春季训练 2(20240331)
- 冲刺NOI2024联测2(20240330)
- 冲刺NOI2024专题1:构造&交互(20240331)
- 冲刺NOI2024联测3(20240401)
- 冲刺NOI2024联测4(20240402)
- 冲刺NOI2024专题2:dp(20240402)
- 冲刺NOI2024联测5(20240404)
- 冲刺NOI2024专题3:数论和组合数学(20240404)
- 冲刺NOI2024联测6(20240405)
- 冲刺NOI2024联测7(20240406)
- 冲刺NOI2024专题4:代数、多项式类(20240407)
- 冲刺NOI2024联测8(20240408)
- 冲刺NOI2024联测9(20240409)
- 高一高二恢复性杂题训练7(20240410)
- 高一高二恢复性杂题训练8(20240411)
- 多校国赛模拟赛1(20240412)
- NOI2024容斥原理的简单应用「重庆八中刘洋」(20240413)
- 多校NOI2024国赛模拟赛2 (20240415)
- 多校NOI2024国赛模拟赛3暨重庆市友谊赛(20240416)
- NOI2024字符串选讲1-ACAM、PAM、SA、SAM「广实黄建恒」(20240417)
- NOI2024字符串选讲2-基本子串结构「广实黄建恒」 (20240417)
- 多校NOI2024国赛模拟赛4(20240419)
- NOI2024简单技巧杂题选讲「成外李枨夏」(20240420)
- 多校NOI2024国赛模拟赛5(20240422)
- 多校NOI2024国赛模拟赛6(20240423)
- NOI2024简单杂题选讲「金华一中赵晟昊」(20240424)
2024 年 syzx 春季训练 1(20240315)
https://www.cnblogs.com/caijianhong/p/18076181
SS240323(20240323)
http://cplusoj.com/d/senior/contest/65fd9320ccaa6dc9eee1e44f
- [A 魔环上的树] 计数,数树,平面图三角剖分(的结构)
- [B 序列舞蹈] 斜率相关,数据结构
- C 脱单计划 最小费用最大流,曼哈顿距离转化
\(100+100+100=300\)。
冲刺NOI2024联测1(20240329)
http://47.92.197.167:5283/contest/482
- [A 帽子] 序列构造双射的构造题
- [B 我希望你们永远不要用到的洗牌法] 很困难写的分治贪心题
- [C 一路向“北” / CF1621H Trains and Airplanes] 数据结构,整除分段的值
\(10+35(50)+40(30)=85(90)\)。
反思:T1 想错方向了,往相邻颜色上面想(具体见题目),没有发现是一个构造题;T2 的暴力 dp 复杂度写成 \(O(n^4)\) 了,以为是 \(O(n^3)\) 的。然后正解也不是很会,很像省选 D2T1 迷宫守卫,这种贪心题是一个弱点。T3 结束前半小时大概知道怎么做,结果没写完,下午写完了发现有一部分是假的,但是离正解也很近。然后这个 T3 还重写了一遍。
线段树合并新写法
- 定义 static 的数组可以不写数组大小
- 如果 static 函数与 std 重名(如下面的 merge),需要指明
int T;
struct segtree {
static constexpr int N = 200010 << 6;
static int ch[N + 10][2], tot, ans[N + 10];
static void maintain(int p) { ans[p] = ans[ch[p][0]] + ans[ch[p][1]]; }
static void insert(int x, int k, int &p, int l, int r) {
if (!p) p = ++tot;
if (l == r) return ans[p] += k, void();
int mid = (l + r) >> 1;
if (x <= mid)
insert(x, k, ch[p][0], l, mid);
else
insert(x, k, ch[p][1], mid + 1, r);
maintain(p);
}
static int merge(int p, int q, int l, int r) {
if (!p || !q) return p + q;
int z = ++tot;
if (l == r) return ans[z] = ans[p] + ans[q], z;
int mid = (l + r) >> 1;
ch[z][0] = merge(ch[p][0], ch[q][0], l, mid);
ch[z][1] = merge(ch[p][1], ch[q][1], mid + 1, r);
maintain(z);
return z;
}
static int query(int L, int R, int p, int l, int r) {
if (!p) return 0;
if (L <= l && r <= R) return ans[p];
int mid = (l + r) >> 1;
int ret = 0;
if (L <= mid) ret += query(L, R, ch[p][0], l, mid);
if (mid < R) ret += query(L, R, ch[p][1], mid + 1, r);
return ret;
}
int root = 0;
void insert(int x, int k) { insert(x, k, root, 0, T - 1); }
static segtree merge(segtree a, segtree b) {
return {merge(a.root, b.root, 0, T - 1)};
}
int query(int L, int R) { return query(L, R, root, 0, T - 1); }
int qall() { return query(0, T - 1, root, 0, T - 1); }
};
int segtree::ch[][2], segtree::tot, segtree::ans[];
int n, Q, K, col[200010];
vector<pair<int, int>> g[200010];
segtree t[200010][26];
int top[200010];
LL det[200010], f[26], w[26];
void dfs(int u, int fa, int topf) {
top[u] = topf;
t[u][col[u]].insert((det[u] - 1) % T, 1);
for (auto e : g[u]) {
int v = e.first, w = e.second;
if (v == fa) continue;
if (col[v] == col[u])
det[v] = det[u] + w, dfs(v, u, topf);
else
det[v] = w, dfs(v, u, u);
for (int j = 0; j < K; j++) t[u][j] = segtree::merge(t[u][j], t[v][j]);
}
}
原来以为是单点的,写的 dsu on tree。大家可以欣赏一下狗屎 shared_ptr
代码。其实线段树更好写更短。
struct dsuontree {
int me;
int buc[200010], tot, rsz[200010];
vector<pair<int, shared_ptr<int>>> qry[200010];
map<int, int> mp;
shared_ptr<int> ask(int u, int T) {
if (T >= 0) {
shared_ptr<int> ansp = make_shared<int>(-1);
if (!mp.count(T)) {
int t = mp.size();
mp[T] = t;
}
qry[u].emplace_back(mp[T], ansp);
return ansp;
} else {
return shared_ptr<int>(&rsz[u], [](int*) {});
}
}
void dfs(int u, int fa, int ban, int k) {
if (col[u] == me && det[u] >= 0)
buc[det[u]] += k, tot += k;
for (auto e : g[u]) {
int v = e.first;
if (v == fa || v == ban)
continue;
dfs(v, u, ban, k);
}
}
void solve(int u, int fa, bool keep) {
if (col[u] == me)
det[u] = mp.count(det[u] % T) ? mp[det[u] % T] : -1, rsz[u] = 1;
for (auto e : g[u]) {
int v = e.first;
if (v == fa || v == son[u])
continue;
solve(v, u, false);
rsz[u] += rsz[v];
}
if (son[u])
solve(son[u], u, true), rsz[u] += rsz[son[u]];
dfs(u, fa, son[u], 1);
for (auto q : qry[u]) *q.second = buc[q.first];
if (!keep)
dfs(u, fa, 0, -1);
}
} robot[26];
struct func {
map<int, LL> mp; // record delta
map<int, shared_ptr<int>> ques;
shared_ptr<int> all;
LL gen = 0;
void askall(int me, int u) {
for (auto e : mp) ques[e.first] = robot[me].ask(u, e.second);
all = robot[me].ask(u, -1);
}
LL answer() {
int gall = *all;
for (auto e : ques) gall -= *e.second;
if (gall)
return gen;
LL mn = 1e18;
for (auto e : ques) {
if (*e.second)
mn = min(mn, mp[e.first]);
}
return mn + gen;
}
};
2024 年 syzx 春季训练 2(20240331)
https://vjudge.net.cn/contest/617477
冲刺NOI2024联测2(20240330)
http://47.92.197.167:5283/contest/483
- [A 签到题] 构造,平面图三角剖分(的结构)
- [B 简单题] 构造,整除相关
- [C 模板题] 多项式,连通图计数
\(100+100+100=300\)。
T1 原题。T3 是模板题,卡常卡过去了。如果题目问什么什么的奇数的情况,可以考虑求总数和偶数 - 奇数,这个技巧考虑一下。T2 打表瞪出来的,感觉正解也差不多?整除相关的可以注意一下因子 \(2\)。
\(G_1(n)-G_0(n)=(-1)^{n}(n-1)!\),其中 \(G_1(n)\) 表示恰有奇数条的 \(n\) 个点有标号连通图个数,\(G_0\) 是偶数。
冲刺NOI2024专题1:构造&交互(20240331)
*https://vjudge.net.cn/contest/619645
冲刺NOI2024联测3(20240401)
- [A 恭喜你发现签到题(sequence)] 交互,子序列
- [B 过山车(roller)] 轮廓线 dp / 网络流
- [C 木棍(stick)] 差分约束、负环判定、hall 定理、线段树优化最短路
\(100+54+0(30)=154(184)\)。反思:T2 没想过网络流。T3 贪心假了,虽然看上去很明显是假的,但是没注意到。
冲刺NOI2024联测4(20240402)
- [A 斩首] 分治优化 dp
- [B 抓扑满挑战 / ARC128F] 贪心,格路计数,组合推导
- [C 战争] 树上启发式合并
\(70+28+35(20)=133(118)\)。反思:T1 搞了很久的笛卡尔树分治,并最终观察到笛卡尔树分治等价于 dsu on tree 因此不是一个很有效的方向;T2 就是不会;T3 的做法有点意想不到(的诈骗),也可能是对支配对相关问题不是很会。
冲刺NOI2024专题2:dp(20240402)
https://vjudge.net.cn/contest/620019
冲刺NOI2024联测5(20240404)
- %A 铲雪 数据结构维护带 \(\max\) 的式子,均摊分析
- [B 游戏] 根号分治(类似),线性递推,容斥 / 组合
- [C 海盗] 凸优化相关
\(50(60)+80(100)+7=137\)。T1 那 10 分本来以为能拿,现在看一下好像不能;T2 因为式子不太一样需要处理很恶心的无逆元,然后挂了;T3 没怎么想。
%T1 可以重新写一次。
一个函数 \(f(x)\) 是下凸的 \(\iff \forall x, y, \frac{f(x)+f(y)}{2}\geq f\left(\frac{x+y}{2}\right)\)。好吧这是定义。
冲刺NOI2024专题3:数论和组合数学(20240404)
*https://vjudge.net.cn/contest/620552
冲刺NOI2024联测6(20240405)
- [A star] 神秘构造,调整法
- [B rescue] 数据结构,根号重构
- [C text] Lyndon Word,生成函数计数(ln,莫反)
\(0(8)+40+8=48(56)\)。T1 只过了一个人。T2 只过了一个人。反思:T1 不会判无解,实际上无解条件非常智障;然后构造的方法可以构造出环;总结:T1 是论文题。T2 根本看不出根号重构,以为是 polylog;T3 根本不会 Lyndon Word 理论,要学。
冲刺NOI2024联测7(20240406)
- [A 排列] 数论(exgcd,同余最短路)
- [B 数据删除] 博弈论,数据结构维护函数复合
- [C 不要恐慌] dp,数据结构优化,“格路”计数
\(100(0)+100+70=270(170)\)。T1 不会同余最短路,然后学习了 Alex_Wei 老师的转圈法。T2 比较简单就不说了;T3 没想到转化,写的 \(O(m^2\log n)\) 比较麻烦,很难优化,然后 std 有另外的思路。
冲刺NOI2024专题4:代数、多项式类(20240407)
*https://vjudge.net.cn/contest/621071
冲刺NOI2024联测8(20240408)
- [A 树(toptree)] 改变重链剖分的标号
- [B 考拉爆炸 (koalabomb) ] 概率与期望,对称,\(\min-\max\) 容斥
- [C 次方数 (pow) ] 数论,(质)因数分解,神秘复杂度分析
\(20(100)+3+35=58(138)\)。T1 被卡常。T2 方向错了一点,就可能还差那么一点性质找不到吧。T3 不用看的。
冲刺NOI2024联测9(20240409)
- [A Limbo] 二分答案,期望 dp(带环,带 min),拆 min / 维护凸函数
- [B 集合] 线性基,贪心,凸包优化(强行找到答案点集的凸包,由平面上整点个数不超过 \(O(V^{2/3})\) 保证复杂度)。
- [C 比赛] 对抗 dp,dp 状态数分析和优化
\(100+40+20=160\)。T1 傻了维护了凸函数(因为之前见过维护凸包求精确值的题目),被硬控 2h 还是 2.5h 不知道。T2 没有意识到线性基这个贪心不是很对。线性基时一个拟阵,正如隔壁 Kruskal 最小生成树一样的拟阵,有两个维度的贪心的时候,必须降低一维,不能说控制某一维总和之类的会假掉,因为它是拟阵模型(话说拟阵要复习了)。T3 没想到特殊性质的用法,就是不会,或者可能是说猜错结论慌了。
高一高二恢复性杂题训练7(20240410)
http://becoder.com.cn/contest/5110
已全部完成。
高一高二恢复性杂题训练8(20240411)
http://becoder.com.cn/contest/5111
已全部完成。
多校国赛模拟赛1(20240412)
- [A 研究所] 裴蜀定理,整体二分,线段树维护单点修改和区间 gcd(的复杂度为单次 \(O(\log n+\log V)\))
- [B 游戏] 万能欧几里得
- [C sunset] 笛卡尔树上用李超线段树与闵可夫斯基和等凸技巧乱做
\(100+30(20)+20(35)=150(155)\)。T1 比较简单但是好玩,T2 卡算法了不会,T3 可能是菜导致的。
NOI2024容斥原理的简单应用「重庆八中刘洋」(20240413)
http://becoder.com.cn/contest/5119
- *AT_agc060_d [AGC060D] Same Descent Set
- *AT_arc156_e [ARC156E] Non-Adjacent Matching
- *AT_agc065_d [AGC065D] Not Intersect
多校NOI2024国赛模拟赛2 (20240415)
http://becoder.com.cn/contest/5125
完全没看。计划是不动它。
多校NOI2024国赛模拟赛3暨重庆市友谊赛(20240416)
- [A P8859 冒泡排序] 通过确定所计算的东西转化为对树计数,然后直接 dp。
- [B CF452F Permutation](上树)维护 hash 值判断回文。
- [C P9394 白鹭兰] “点双连通 耳分解 双极定向”
因为没有打,而且有可能三个题都看过(但是 T2 没想起来,T3 听的时候感冒不起 😦 ),所以没有分。
T2 的启发是:如果要多次比较两个字符串,可以考虑 hash 或者转化为回文串问题,将一些看上去不可做差卷积转化为简单形式。同时也要注意到 OI 中有很多算法能将不可做的问题转化为可做问题(……在说什么?例如最短路,不觉得能求出一个图的单源最短路是很炫酷的事情吗 qwq)
T3 就是科技题吧。这个的话就看看,也要复习。图的连通性其实还有很多没有学,一切都因为那天听 ix35 本人讲课的时候生病了。记得翻课件。有没有懂 20230804\sol2.pdf
的。
NOI2024字符串选讲1-ACAM、PAM、SA、SAM「广实黄建恒」(20240417)
http://becoder.com.cn/contest/5132
已全部完成。[AGC064C] Erase and Divide Game 是卡常的,atcoder 能过。
- *CF1393E2 Twilight and Ancient Scroll (harder version) 这个好像说不是基本字串结构题,挂在这里
NOI2024字符串选讲2-基本子串结构「广实黄建恒」 (20240417)
http://becoder.com.cn/contest/5133
资料:https://www.cnblogs.com/crashed/p/17382894.html 与 https://www.cnblogs.com/sizeof127/articles/17579027.html。
多校NOI2024国赛模拟赛4(20240419)
- [A Three] \(k-\max\) 从值域考虑的问题
- [B Robot] 差分
- C P5397 [Ynoi2018] 天降之物 根号分治 / 序列分块
\(100+100+100=300\)。T3 在洛谷上只有 40 分,调了块长喜提 50 分,原因是有个 \(\log\)。
NOI2024简单技巧杂题选讲「成外李枨夏」(20240420)
又名:树的遍历与背包问题
http://becoder.com.cn/contest/5136
因为今天要放假,所以不写。就是故意留了两个最难写的。
多校NOI2024国赛模拟赛5(20240422)
- [A 早八] 简单数据结构
- [B 派对] 性质题,题意是刻画 \(p_i<j\land p_j<i\) 的排列;矩阵快速幂优化 dp
- [C 间谍] 闵可夫斯基和;平面上凸多边形范围查询(也是查询多边形面积的方法:对每条边两个端点作垂线,改成无限长梯形(上下底平行 \(y\) 轴,一条腰是歪的,另一条腰在 \(x\) 负半轴方向无限远处)(上凸壳 - 下凸壳 = 答案),发现可以根据多边形的边的斜率分类作扫描线转化为二维数点)
\(100+55(30)+45=200(175)\)。T2 搜索搞了好多分()
多校NOI2024国赛模拟赛6(20240423)
- [A Lethe] 费用流建模
- [B P7811 [JRKSJ R2] 你的名字。] 根号分治,根号平衡
- [C Gift] Polya 原理,容斥
\(40(100)+100+95(100)=235(300)\)。T1 点数开少了。T2 不想卡洛谷那个题的常数了,不写了。T3 有启发性:
(假设 \(k\) 是无穷大,那么这是广义二项式定理;否则枚举那些多项式乘起来的时候选了超过 \(k\) 的项,减掉相应的 \(m\),然后套用 \(k\) 无穷大的情况。)
这是一个著名定理。
NOI2024简单杂题选讲「金华一中赵晟昊」(20240424)
又名:ACM 题目选讲
https://www.becoder.com.cn/contest/5154
https://www.becoder.com.cn/contest/5155
很困难,看着做。额怎么开始倒数了。
- *QOJ5445 [2022 ICPC 沈阳] Vulpecula 这个题扩展出去了 P5607
- *QOJ8047 [2023 ICPC EC Final] DFS Order 4
[QOJ5442]没讲的题P10222 [省选联考 2024] 最长待机没讲- P10219 [省选联考 2024] 虫洞 这个可以考虑学一下
该用户已在现实中的 4 月 26 日中午离开重庆市第八中学校(沙坪坝校区)。
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/18104517/contests-in-202404