yxy小蒟蒻的201116总结

博主分享了11月16日遭遇的考试困境,包括睡眠不足导致的分数损失,以及比赛成绩下滑的沮丧经历,期待新的一天带来转机。文章还提及了几个数学问题的背景,如名字相似的朋友问题、树形结构下的期望值计算和树上路径查询。

2020.11.16 周一

今天的体验感极差 希望明天可以改运

上午考试太困了就睡了一个小时 到九点才开始看题

于是导致最后一道题拍出差异来了都没时间修锅 几分钟修好不敢说 但是一个小时怎么都能修好了

分数-100

郁闷

下午 cspcspcsp 出数据了 PYBPYBPYB 上周说这是我考 OIOIOI 以来考得最差的一次

额 虽然真的考炸了 但是我觉得没有什么比赛可以比上次 NOINOINOI 考得更栽了

死猪不怕开水烫了 希望人没事

A

T1-幻影之啸

露娜想找一些好朋友,于是她来到了兰德索尔,而且她发现这里居然有人和她同名 (xcw),露娜认为, 和她名字相同或者高度相似的人都能成为她的朋友,现在她想知道,她最多能和几个人成为朋友呢? 我们认为,两个人的名字高度相似当且仅当他们的长度差为 ,并且较长的名字删除一个字符后会变成 较短的名字。

怎么做都可以 跳过

B

T2-宇宙蓝色闪光

万圣节到了,镜华和她的小伙伴在一起做准备,想吓唬一下骑士君。已知兰德索尔有 nnn 个建筑,由 n−1n - 1n1 条边连接起来,也就是说他形成了一棵树的形状。骑士君的公会在编号为 AAA 的房子,镜华初始在编号为 BBB 的房子,有一个储存室 XXX,她们有 10114514191981010^{114514^{1919810}}101145141919810 个炸弹,每次镜华会把炸弹丢在一个随机的建筑里,然后引爆,每一次引爆炸弹会对 XXX 到炸弹所在位置上所有建筑造成一次损伤,现在镜华想知道,有多少个位置满足把储存室丢在该处可以使骑士君所在位置 AAA 受到损伤的期望次数最多的情况下满足她们所在位置 BBB 受到损伤的期望次数最小?。(XXX 不能与 AAA, BBB 重合。)

在本题中,你可以将期望理解为在一种方案下可能的各种情况的概率乘损伤次数之和。

算出每个点为根时 AAABBB 子树的大小

遍历一遍求出满足 AAA 最大时 BBB 最小的点的个数

C

T3-魔镜啊魔镜

nnk 给定一棵树,有 nnn 个节点, 其中有 mmm 条为标记路径。

进行 qqq 次询问,每次询问包含 (u,v)(u, v)(u,v),表示询问 (u,v)(u, v)(u,v) 简单路径上有多少完整的标记路径。

先求出 dfsdfsdfs

一个标记路径 (u,v)(u,v)(u,v) 对询问点对有贡献时满足

  1. u,vu,vu,v 不是父子关系 要求点对在 uuu 子树中和在 vvv 子树中
  2. u,vu,vu,v 是父子关系 要求点对在子儿子子树中和不在父亲子节点的子树中

dfsdfsdfs 序中子树是一个区间

把询问点对放入二维平面中

那么标记路径可以贡献的是一个或两个二维区间

标准的二维偏序 cdqcdqcdq 分治

考场上想到了一大半 但是最后把询问点对放入二维平面这里没想到 还是对 cdqcdqcdq 的拓展理解不够

D

T4-新年炸裂

求无向带权图中 包括节点 111 的最小环

对向 111 有边的结点二进制分组

对两边的点跑 djdjdj 最短路

因为总有一次答案的两个点分在了不同组

这个问题要求我们对多个区间查询判断其对应的“愉悦值”是否不小于给定的 $k$。根据题意,愉悦值的定义是:在一段连续的雪糕类型中,如果当前雪糕类型与前一个不同,则愉悦值 +1;否则不增加。 ### 解题思路 我们可以通过预处理一个**前缀和数组**来快速回答每个查询: 1. **构建差分数组 `diff`**: - 对于数组 `a`,从第 2 个元素开始,比较当前元素与前一个是否不同。 - 如果不同,则 `diff[i] = 1`,否则 `diff[i] = 0`。 - 第一个元素总是贡献 1 的愉悦值(特别说明)。 2. **构建前缀和数组 `prefix`**: - 前缀和数组 `prefix[i]` 表示从第一个元素到第 i 个元素的总愉悦值。 - 例如,`prefix[1] = 1`(第一个元素),`prefix[2] = prefix[1] + (a[2] != a[1])`,依此类推。 3. **对于每个查询 `[x, y]`**: - 区间内的愉悦值为 `prefix[y] - prefix[x - 1]`。 - 如果这个值 ≥ k,输出 `Yes`,否则输出 `No`。 --- ### C++98 兼容代码如下: ```cpp #include <cstdio> #include <cstdlib> #include <iostream> using namespace std; const int MAXN = 100005; int a[MAXN]; int prefix[MAXN]; int main() { int n, k, q; scanf("%d %d %d", &n, &k, &q); for (int i = 1; i <= n; ++i) { scanf("%d", &a[i]); } // 构建 prefix 数组 prefix[1] = 1; for (int i = 2; i <= n; ++i) { if (a[i] != a[i - 1]) { prefix[i] = prefix[i - 1] + 1; } else { prefix[i] = prefix[i - 1]; } } // 处理每个查询 for (int i = 0; i < q; ++i) { int x, y; scanf("%d %d", &x, &y); int score = prefix[y] - prefix[x - 1]; if (score >= k) { printf("Yes\n"); } else { printf("No\n"); } } return 0; } ``` --- ### 问题解释 - **前缀和思想**:用于快速计算区间内“不同连续段”的数量。 - **时间复杂度**: - 预处理前缀和是 $O(n)$。 - 每个查询是 $O(1)$,总时间复杂度为 $O(n + q)$,满足题目要求。 - **空间复杂度**:使用了 $O(n)$ 的额外空间,可以接受。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值