【题解】Codeforces Round 975 (Div. 2) A~E
A. Max Plus Size
分别假设答案为取第偶数位的最大值和取第奇数位的最大值两种情况, 取更优解.
取偶数位的最大值时, 把所有其他都偶数位都取上. 奇数同理.
code:
int solve(int _) {int n;cin >> n;vector<int>a(n + 1);int Maxj = 0, Maxo = 0;for (int i = 1; i <= n; ++i) {cin >> a[i];if (i % 2)Maxj = max(Maxj, a[i]);else Maxo = max(Maxo, a[i]);}int ans2 = n / 2;int ans1 = n / 2 + n % 2;return max(ans1 + Maxj, ans2 + Maxo);
}
 
 
B. All Pairs Segments
先把输入的 a 数组 sort 一下.
对于每个 a i a_i ai 分别由有 a i + 1 a_{i+1} ai+1 ~ a n a_n an, 共 n − i n-i n−i 个区间有贡献, 只用从前往后遍历每个 a a a, 实时更新当前有多少个区间在做贡献.
当前的总有效区间为 n o w now now 个, 加入第 i i i 个节点时.
- 新增了以他为左端点的  n − i n-i n−i 个区间,  n o w + = n − i now+=n-i now+=n−i.
所以 a [ i ] a[i] a[i] 这个点被 n o w now now 个区间覆盖. - 减少了以他为右端点的  i − 1 i-1 i−1 个区间,  n o w − = i − 1 now-=i-1 now−=i−1.
所以 a [ i ] + 1 a[i]+1 a[i]+1 ~ a [ i + 1 ] − 1 a[i+1]-1 a[i+1]−1 被 n o w now now 个区间覆盖. 
注意, a[n] 是一个特例.
code:
#define int long long
void solve(int _) {int n, q;cin >> n >> q;vector<int>a(n + 1);for (int i = 1; i <= n; ++i) {cin >> a[i];}map<int, int>ma;sort(1 + a.begin(), a.end());int now = 0;for (int i = 1; i <= n; ++i) {now += n - i;ma[now]++;now -= i - 1;if (i != n)ma[now] += a[i + 1] - a[i] - 1;}while (q--) {cin >> n;cout << ma[n] << " ";}cout << endl;
}
 
 
C. Cards Partition
** 答案没有二分性**, fk, 赛时写了一个小时的二分.
答案的范围为 [ 1 − n ] [1-n] [1−n], 只用枚举每个答案, 然后 O ( 1 ) O(1) O(1) 做 check.
check:
对于答案 x x x, 也就是这些牌要排成 x x x 行.
先求至少要多少列 c l m clm clm;
- c l m > 最多元素的个数 clm > 最多元素的个数 clm>最多元素的个数, 因为这些不能在同一列.
 - 如果  M a x e l e m e n t ∗ X > s u m o f a l l e l e m e n t Max_element * X > sum_of_all_element Maxelement∗X>sumofallelement, 那就是所有牌摆  M a x e l e m e n t Maxelement Maxelement 列用不完, 还要加新列, 此时 
i128 clm = max(Max, sum / i + !!(sum % i)); 
c l m clm clm 求出来了, 检查空的位置是否小于 k k k 就好, 只要有解且 k k k 够用, 就一定能填出来.
code:
#define int long long
#define i128 __int128
int solve(int _) {int n, k;cin >> n >> k;vector<int>a(n + 1);i128 sum = 0;int Max = 0;for (int i = 1; i <= n; ++i) {cin >> a[i];Max = max(Max, a[i]);sum += a[i];}sort(1 + a.begin(), a.end());int ans = 0;for (int i = 1; i <= n; ++i) {i128 clm = max(Max, sum / i + !!(sum % i));if (clm * i - sum <= k)ans = i;}return ans;
}
 
 
D. Speedbreaker
注意到: 所有小于 t t t 的数都包含在一个长度不大于 t t t 的区间内时, 对于这个区间, 一定有解 ( 可以从这个区间的最小值开始往两边扩散, 哪边吉往哪边去).
那么对于所有的 t = i t=i t=i 都可以维护一个上述区间. 遍历每一个区间: 此时对于这个区间 [ l , r ] [l,r] [l,r], 可行的答案是 [ m a x ( 1 , r − t + 1 ) , m i n ( n , l + t − 1 ) ] [max(1,r-t+1),min(n,l+t-1)] [max(1,r−t+1),min(n,l+t−1)]( 分别从区间两头往另一头走长度为 t t t 的区间).
对于所有区间求并集即可. 注意到如果数组中没有小于等于 t 的数, 那它对应的区间就是全部.
code:
int n, a[200010];
int solve(int _) {cin >> n;for (int i = 1; i <= n; ++i) {cin >> a[i];}vector<pair<int, int>>tle(n + 1);tle[n] = {1, n};for (int i = n - 1; i >= 1; --i) {auto [l, r] = tle[i + 1];while (l <= r && a[l] > i)l++;while (r >= l && a[r] > i)r--;tle[i] = {l, r};if (r - l + 1 > i)return 0;}vector<int>pre(n + 2, 0);int cnt = 0;for (int i = 1; i <= n; ++i) {auto [l, r] = tle[i];if (l <= r) {cnt++;int ll = min(l, max(1, r - i + 1));int rr = max(r, min(n, l + i - 1));pre[ll]++;pre[rr + 1]--;}}int ans = 0;for (int i = 1; i <= n; ++i) {pre[i] += pre[i - 1];if (pre[i] == cnt)ans++;}return ans;
}
 
 
E. Tree Pruning
所有叶子与根的距离 <=> 保留所有 d e e p deep deep 相同的节点. 于是可以对这个树跑一个层次 bfs, 对每层的答案取 m i n min min.
在每层:
- 维护去除高于它的点, 要删除多少边:
即对每一个高于它的点 x,从 x 往上回溯, 直到到 x 的某个祖先, 且这个祖先有一个深于 x 的孙子, 停止. 同时个每个边打个 id, 回溯到已删除的 边也要停止. - 低于它要删除多少边: 就是这层所有节点的 son 的数量.
 
code:
#define int long long
#define id(a,b) ((a)*1000000+(b))
const int Maxn = 5e5 + 10;int n, v, u;
int dep[Maxn], son[Maxn], ans[Maxn], fa[Maxn], Maxdep[Maxn];
vector<int>eg[Maxn];
set<int>se;
void getdep(int x, int deep) {dep[x] = deep;Maxdep[x] = deep;for (auto c : eg[x]) {if (c == fa[x])continue;fa[c] = x;getdep(c, deep + 1);Maxdep[x] = max(Maxdep[x], Maxdep[c]);}
}
int getson(int x) {son[x] = 0;for (auto c : eg[x]) {if (c == fa[x])continue;son[x] += getson(c);}return son[x] + 1;
}
int done(int x, int fromdep) {if (x == 1)return 0;if (fromdep < Maxdep[x])return 0;if (se.count(id(x, fa[x])))return 0;se.emplace(id(x, fa[x]));return done(fa[x], fromdep) + 1;
}
int solve(int _) {cin >> n;se.clear();for (int i = 1; i <= n; ++i) {eg[i].clear();Maxdep[i] = 0;}for (int i = 1; i < n; ++i) {cin >> v >> u;eg[u].emplace_back(v);eg[v].emplace_back(u);}int ans = n - 1;getdep(1, 1);getson(1);for (int i = 1; i <= n; ++i) {debug(i, fa[i], son[i])}int last = 1, now = 0, ended = 0, pre_ended = 0;deque<int>q;q.emplace_back(1);while (!q.empty()) {int tis = q.front();q.pop_front();if (dep[tis] != last) { // 上一层删除完了,ans = min(ans, ended + now);debug(last, ended, now)now = 0;ended += pre_ended;pre_ended = 0;last = dep[tis];}now += son[tis];if (eg[tis].size() == 1) {int tp = done(tis, dep[tis]);debug(tis, tp);pre_ended += tp;}for (auto c : eg[tis]) {if (fa[tis] == c)continue;q.emplace_back(c);}}ans = min(ans, ended + now);return ans;
}
相关文章:
【题解】Codeforces Round 975 (Div. 2) A~E
A. Max Plus Size 分别假设答案为取第偶数位的最大值和取第奇数位的最大值两种情况, 取更优解. 取偶数位的最大值时, 把所有其他都偶数位都取上. 奇数同理. code: int solve(int _) {int n;cin >> n;vector<int>a(n 1);int Maxj 0, Maxo 0;for (int i 1; i …...
如何搞定视频裁剪?新手小白零基础剪辑,分享5个实用工具!
现在是一个短视频盛行的时代,几乎每个人都掌握了视频剪辑技能。 不管是因为工作也好,生活也罢,只要有视频,那么就一定会用到视频剪辑软件。视频裁剪已经难不倒普通人了,借助专业的视频裁剪工具,任何人都可…...
HttpClientHandler 详解及使用
在现代网络编程中,HttpClientHandler 是一个至关重要的组件,它提供了对 HTTP 请求的底层配置和控制。本文将详细介绍 HttpClientHandler 的核心概念、配置选项以及如何在实际应用中使用它。 1. 什么是 HttpClientHandler? HttpClientHandle…...
基于两分支卷积和 Transformer 的轻量级多尺度特征融合超分辨率网络 !
当前的单图像超分辨率(SISR)算法有两种主要的深度学习模型,一种是基于卷积神经网络(CNN)的模型,另一种是基于Transformer的模型。前者利用不同卷积核大小的卷积层堆叠来设计模型,使得模型能够更…...
Font Awesome 手势图标
Font Awesome 手势图标 Font Awesome 是一个广泛使用的图标库,它为网页设计师和开发者提供了一系列高质量的图标。这些图标涵盖了从基本的网页元素到复杂的符号和手势,可以轻松地集成到各种网页和应用中。在本文中,我们将重点介绍 Font Awesome 中的手势图标,探讨它们的应…...
基于Hive和Hadoop的哔哩哔哩网站分析系统
本项目是一个基于大数据技术的哔哩哔哩平台分析系统,旨在为用户提供全面的哔哩哔哩视频数据和深入的用户行为分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出…...
Augular 学习步骤建议
Angular 是一个由 Google 维护的开源 Web 应用框架,用于开发单页面客户端应用程序。以下是学习 Angular 的建议步骤: 1. 了解基础: 熟悉 HTML、CSS 和 JavaScript 的基础知识。 了解 TypeScript,因为 Angular 应用程序主要使用…...
突破自闭症治疗进展报道:改变孩子和家庭的未来
在这个充满挑战与希望的时代,自闭症这一复杂的神经发育障碍,长久以来一直是无数家庭心中的痛。然而,在星贝育园这片充满爱与科学的土地上,一场关于自闭症治疗的深刻变革正在悄然发生,它不仅为孩子们点亮了未来的希望之…...
我想注册一批账号做矩阵,需要每次注册都切换一个ip吗
在注册一批账号以建立矩阵时,切换IP地址是一个重要的考虑因素,尤其是为了避免被平台识别为同一用户或多重账户,从而减少账号被封的风险。以下是一些建议,帮助你有效管理IP地址和账号注册过程: 1. 切换IP地址的必要性 …...
linux系统的常用命令
微服务Linux解析部署使用全流程 Linux安装vim超详细教程 Linux安装JDK及配置环境变量超详细教程 Linux安装tomcat及配置环境变量超详细教程 目录 1、ls:列出目录内容。 2、cd:改变当前目录。 3、pwd:打印当前工作目录的路径 4、mkdir…...
无锡卓瓷X哲讯智能科技,SAP项目正式启动!
在数字化浪潮的推动下,高精密陶瓷行业的领军企业—无锡卓瓷科技有限公司,携手哲讯智能科技有限公司近期启动SAP&BI项目,以打造行业领先的数字化管理平台。这一战略举措标志着无锡卓瓷在数字化转型的道路上迈出了坚实的一步。 无锡卓瓷—…...
Python从入门到精通-基础篇
1.Python的起源 1989年,为了打发圣诞节假期,Gudio van Rossum(吉多范罗苏姆(龟叔))决心开发一个新的解释程序(Python雏形) 1991年,第一个Python解释器诞生 Python这个…...
系统架构设计师-知识产权与标准化
目录 一、保护范围与对象 二、保护期限 三、知识产权人确定 四、侵权判断 五、标准化 一、保护范围与对象 知识产权是权利人依法就下列课题享有的专有权利: (一)作品(著作) (二)发明、实用…...
Python安装流程(Windows + MAC)
目录 Windows 版 1.下载Python 2.开始安装 3.配置环境变量 4.测试python是否成功安装 MAC版 1.下载Python 2.开始安装 Windows 版 1.下载Python 进入Python官网下载:(Python更新频繁,下载最新版即可,安装流程一致&#x…...
在 Qt 项目中使用 spdlog 的全攻略
目录 1. 准备工作:安装 spdlog 方法一:使用 CMake 的 FetchContent(推荐) 方法二:手动下载并添加到项目中 2. 在 Qt 项目中集成 spdlog a. 初始化 spdlog b. 在 Qt 的各个部分使用 spdlog 3. 基本使用示例 4. …...
vue的el-button防止重复点击
这样效果仅生效在按钮上...
消息中间件 Kafka 快速入门与实战
1、概述 最近感觉上班实在是太无聊,打算给大家分享一下Kafka的使用,本篇文章首先给大家分享三种方式搭建Kafka环境,接着给大家介绍kafka核心的基础概念以及Java API的使用,最后分享一个SpringBoot的集成案例,希望对大…...
【Unity服务】如何使用Unity Version Control
Unity上的线上服务有很多,我们接触到的第一个一般就是Version Control,用于对项目资源的版本管理。 本文介绍如何为项目添加Version Control,并如何使用,以及如何将项目与Version Control断开链接。 其实如果仅仅是对项目资源进…...
C++ --- 静态多态和动态多态
静态多态和动态多态 静态多态动态多态总结 静态多态和动态多态是面向对象编程中多态性的两种主要形式,它们在实现方式、绑定时机以及应用场景上存在一些显著的区别。 静态多态 静态多态,也被称为编译时多态,是指在编译阶段就已经确定了对象调…...
华为vxlan
VXLAN是什么?VXLAN与VLAN之间有何不同? - 华为...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
