vp Educational Codeforces Round 168 (Rated for Div. 2) A - E

news/2024/10/24 7:34:36/文章来源:https://www.cnblogs.com/wenzieee/p/18498512

link

A C D,怎么没过 B?我靠,崩溃了牢弟 qwq


A - Strong Password

B - Make Three Regions

这题。。。我居然用 a[2][j] 然后还真只开了 a[2][N] 的大小,结果 cf test 1 多测只输出一个结果,没见过啊,这直接给我干蒙了啊,又是没有调出来,数组空间开小了这种低级错误也能犯

C - Even Positions

一开始以为很不可做,之前是看到字符串匹配之类的就头疼,

不过最后十分钟又看了一下,发现就是简单贪心,总是选择较近的空位配对,两个方向扫一遍,最后三分钟 A 掉了

D - Maximize the Root

树上贪心,(dp?倒是不至于,就是简单的 dfs 加分讨

一种很显然的贪心是,对于一个子树(根节点非叶节点),总是让它的所有点权趋于平均,但是保证子树的根节点比子树中的其他节点的最小值严格不小,这样在向上回溯时能保证非直接儿子不会非法(即点权减小为负数)

对子树跟节点点权 \(a_u\),直接儿子中点权最小值 \(a_v\) 分类讨论

  • \(a_u\geq a_v\),只能直接 \(a_u = a_v\)

  • \(a_u = a_v - 1\),这种平均状态是标准的,不用改变

  • \(a_u < a_v\),要使之趋于平均,\(a_u = a_u + \lfloor \frac{a_v - a_u}{2}\rfloor\),这样就达到要么 \(a_u = a_v\),要么 \(a_u = a_v - 1\) 的效果

当然,根节点是特殊情况,因为它不需要考虑父节点,所以直接 \(a_u = a_u + a_v\)

复杂度 \(O(n)\)

code
#include <bits/stdc++.h>
#define re register int 
#define int long longusing namespace std;
const int N = 2e5 + 10, inf = 1e9 + 10;struct Edge
{int to, next;
}e[N << 1];
int idx, h[N];
int T, n, a[N], in[N];inline void add(int x, int y)
{e[++ idx] = (Edge){y, h[x]};h[x] = idx;
}void dfs(int u, int fa)
{int sum = 0, min_son = inf;for (re i = h[u]; i; i = e[i].next){int v = e[i].to;if (v == fa) continue;dfs(v, u);min_son = min(min_son, a[v]); // 注意是比较更新过后的权值 
//		sum += a[v];}if (u == 1){
//		cout << "check " << min_son << '\n';a[u] += min_son;return; }else if (in[u] > 1){if (a[u] >= min_son) a[u] = min_son;else if (a[u] == min_son - 1) a[u] = a[u];else a[u] += floor((double)((min_son - a[u]) / 2));}else return;
}signed main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> T;while (T --){memset(h, 0, sizeof(h)); idx = 0;memset(in, 0, sizeof(in));cin >> n;for (re i = 1; i <= n; i ++) cin >> a[i];for (re i = 2; i <= n; i ++){int x; cin >> x;add(x, i), add(i, x);in[x] ++, in[i] ++;}dfs(1, 0);//		cout << a[3] << '\n';cout << a[1] << '\n';}return 0;
}

E - Level Up

一开始我以为是个 dp?但是不会推

发现题目已经将一个求解问题转化为判定问题,那考虑往判定方向思考

对于 \(k=x\),发现 \(x\) 越小,对于第 \(i\) 个怪兽而言,它越容易逃跑,因为 \(k\) 越小,玩家期望升级越快,期望等级越比怪物等级高,反之则越不容易逃跑。。。似乎存在二分性

考虑 二分 \(k\)

那我们可以二分一个 \(k\),满足在这个 \(k\) 下,第 \(i\) 个怪物 刚好不逃跑,这样询问时就转化为简单的判定了

考虑一个怪物刚好不逃跑的充要条件就是玩家等级不大于怪物等级,最小化 \(k\)

那么玩家到达第 \(i\) 个位置,至少之前要打过 \(a_i\cdot k\) 个怪兽,即升了 \(a_i\) 级变为 \(a_i + 1>a_i\),这样怪兽就刚好逃跑(似乎刚好逃跑更自然想到,反正也一样二分,反过来就可以了

所以,如果之前打过的怪兽数量 \(query\geq a_i\cdot k\),那么就可以判定怪兽会逃跑

而如何求 \(query\) 呢?注意到我们每次二分出来的值的含义是 刚好使该怪兽不会逃跑的 \(k\),即会打该怪兽

那么就很显然了,每次二分完对 \(k\) 值域加贡献 1,判定时求个前缀即可,考虑 线段树 简单维护

时间复杂度 \(O(n\log^2 n)\)

code
#include <bits/stdc++.h>
#define re register int 
#define lp p << 1
#define rp p << 1 | 1using namespace std;
typedef long long LL;
const int N = 2e5 + 10;struct Tree
{int l, r, sum;
}t[N << 2];
int n, q, a[N], not_run[N];inline void build(int p, int l, int r)
{t[p].l = l, t[p].r = r;if (l == r) return;int mid = (l + r) >> 1;build(lp, l, mid);build(rp, mid + 1, r); 
}inline void update(int p, int x, int k)
{if (t[p].l == x && t[p].r == x) {t[p].sum += k;return;}int mid = (t[p].l + t[p].r) >> 1;if (x <= mid) update(lp, x, k);if (x > mid) update(rp, x, k);t[p].sum = t[lp].sum + t[rp].sum;
}inline LL query(int p, int l, int r)
{if (l <= t[p].l && t[p].r <= r) return t[p].sum;LL res = 0;int mid = (t[p].l + t[p].r) >> 1;if (l <= mid) res += query(lp, l, r);if (r > mid) res += query(rp, l, r);return res;
}inline bool check(int x, int k)
{return (LL)a[x] * k <= query(1, 1, k);
}int main()
{ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> n >> q;build(1, 1, n);for (re i = 1; i <= n; i ++) cin >> a[i];for (re i = 1; i <= n; i ++){int l = 1, r = n;while (l < r){int mid = (l + r) >> 1;if (check(i, mid)) l = mid + 1;else r = mid;}update(1, l, 1);not_run[i] = l;}while (q --){int x, k; cin >> x >> k;cout << (k < not_run[x] ? "No" : "Yes") << '\n';}return 0;
}

F - Chips on a Line

*2700 的 dp?感觉很不可做,溜了溜了 ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/820988.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日志篇:模组日志总体介绍

​ 今天我们学习合宙模组日志总体介绍,以下进入正文。 一、本文讨论的边界 本文是对合宙 4G 模组, 以及 4G+GNSS 模组的日志功能的总体介绍。通过日志,可以对研发过程中,以及模组运行过程中的各种故障进行分析。 二、4G模组日志的几种类型界 4G 模组的日志有两种类型: 业务…

一篇讲透:模组典型上网业务的AT上网流程

​ 今天我们学习合宙模组典型上网业务的AT上网流程。 文末阅读原文,下载最新教程/固件。 一、简介 本文介绍了合宙4G模组的常用的AT指令和服务器交互的流程。 进一步详细的流程,参见各个模组的AT命令资料。 如果没有顺手的串口工具,推荐 [LLCOM | 能跑Lua代码的串口调试工具…

WPF 使用快捷键方式制作简易的 Word 上的 Latex 输入法

本文将告诉大家如何在 WPF 里面编写一个简易输入法软件,让这个输入法软件支持插入 Latex 格式的公式到 Word 内。核心原理是使用 Word 的快捷键插入公式编辑器,再通过剪贴板输入 Latex 格式的公式内容,再输入回车作为 Word 公式软件的界面效果如下:运行效果如下:本文以下为…

读数据工程之道:设计和构建健壮的数据系统18数据存储系统(上)

数据存储系统(上)1. 单机存储和分布式存储 1.1. 存储系统是存在于原材料之上的抽象层次 1.2. 磁盘是一种原始存储材料,而主要的云对象存储平台和HDFS是利用磁盘的存储系统 1.3. 随着数据存储和访问模式变得越来越复杂,并超出了单一服务器能做到的支持,将数据分布到一个以上…

2024.10.24 鲜花

多次查询给定集合是否存在任一给定子集多次查询给定集合是否存在任一给定子集Re:End of a Dream先考虑经典例题 DZY Loves Chinese II 考虑其做法:随机赋值非树边,用返祖边来平衡使其权值为 \(0\),线性基维护。 考虑扩展,发现集合中并不存在一个唯一元素用来平衡,考虑在每…

指令

带v-的特殊属性即为指令,常见的指令有v-if,v-show,v-html,v-text,v-slot,v-bind,v-on,v-model等等,也可自定义指令。一个指令的任务是在其表达式的值变化时响应式地更新 DOM。除了name为必须外,其他的都可以没有,也可以有,修饰符可以有多个; v-focus v-aa.bb v-aa:aa.b…

温故知新,基于播客形式学习英语之EnglishPod 365, Elementary初级C集合(音频、原文、讲解)

简介 Enishpod是一家公司叫做Praxis Language推出的收费讲座,相比较ESLPod, EnishPod为常速。Enishpod极具趣味性,两位主持人Marco和Amira的讲解很生动幽默,完全有别于新概念类型听力的乏味。同时,Enishpod分了不同的难度级别,基础较差可以先选择B级和C级。 Elementary - …

网课视频课程下载神器,学无止下载器,快过期的课程有救了!

有多少小伙伴像我一样,准备在假期好好学点兴趣以内的东西,结果发现花费好几百块买的课居然过期了打开之后课程已经过期,无法观看了(网易云课堂购买的课程过期后无法观看了。。。)又想学习,又不想再浪费钱,该怎么办呢?一顿操作猛如虎,费了半天功夫装了X猴,装了各种插件…

手把手教你如何下载智慧职教(职教云)视频课程课件资料

前言:很多同学都想知道智慧职教(职教云)中课程视频资料怎么下载,但是智慧职教中某个课程的目录中展示的视频和资料是不提供直接下载方式的,所以下面就教大家如何用学无止下载器下载目录中展示的视频资料,包括MP4,PPT和PDF。 一、电脑登录智慧职教网页版 网页版智智慧职教…

手把手教你如何下载知到智慧树视频课程课件资料

前言:很多同学都想知道知到智慧树课程中的课件资料怎么下载,但是知到智慧树中某个课程的目录中展示的课件有时候是不提供直接下载方式的,所以下面就教大家如何下载知到智慧树目录中展示的视频和课件资料,包括PPT和PDF。 提示:操作需要用到Windows电脑,Mac还不支持 一、电…

手把手教你如何下载超星学习通视频课程课件资料

前言:很多同学都想知道超星学习通中课程资料怎么下载,但是超星学习通中某个课程的目录中展示的资料是不提供直接下载方式的,所以下面就教大家如何下载超星学习通目录中展示的视频课件资料,包括PPT和PDF。 一、电脑登录超星学习通网页版,复制课程链接【https://i.chaoxing.…

学堂在线视频课件课程下载工具,如何在电脑端下载学堂在线视频课程课件资料PDF,PPT到本地?

一. 安装学堂在线课程下载器 1.获取学无止下载器 https://www.xuewuzhi.cn/xuetangx_downloader 2.下载安装后,然后点击桌面快捷方式运行即可。 注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。 二. 使用说明 1.学无…