Codeforces Round 958 (Div. 2)
C o d e f o r c e s R o u n d 958 ( D i v . 2 ) \Huge{Codeforces Round 958 (Div. 2)} CodeforcesRound958(Div.2)
文章目录
- Problems A. Split the Multiset
- 题意
- 思路
- 标程
- Problems B. Make Majority
- 题意
- 思路
- 标程
- Problems C. Increasing Sequence with Fixed OR
- 题意
- 思路
- 标程
- Problems D. The Omnipotent Monster Killer
- 题意
- 思路
- 标程
比赛链接:https://codeforces.com/contest/1988
Problems A. Split the Multiset
题意
给出一个数组,每次可以选择数组中的一个数,并将其拆为不超过 k k k个数。
问最少需要几次可以构造出全 1 1 1数组(数组中只包含 1 1 1)。
思路
贪心的想,我们每次可以将选出的数字x拆为1+1+1+…+(x-k+1)。
那么结果即为:
⌈ n − 1 k − 1 ⌉ \left \lceil \frac{n-1}{k-1} \right \rceil ⌈k−1n−1⌉
标程
#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr);void Solved() {int n, k; cin >> n >> k;n --;cout << (n + k - 2) / (k - 1) << endl;
}signed main(void) {IOSint ALL = 1; cin >> ALL;while(ALL -- ) Solved();return 0;
}
Problems B. Make Majority
题意
给出一个 01 01 01串,每次可以选择一个区间,若区间 s u m 0 ≥ s u m 1 sum_0\ge sum_1 sum0≥sum1,则将该区间变为一个数字 0 0 0,否则变为一个数字 1 1 1。
求是否可以令 01 01 01串最后变为一个数字 1 1 1。
思路
贪心的想,我们每次可以令全 0 0 0子串变为一个 0 0 0。
然后容易发现,对比现在子串中的 0 , 1 0,1 0,1个数即可判断是否能构造出数字 1 1 1。
标程
#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr);
#define endl '\n'void Solved() {int n; cin >> n;string s; cin >> s;int c0 = 0, c1 = 0;string s1;for(int i = 0; i < n; i ++ ) {if(s[i] == '0') {c0 ++;if(i == 0 || (i && s[i - 1] == '1')) s1 = s1 + '0'; }else {c1 ++;s1 = s1 + s[i];}}int x= 0, y = 0;for(int i = 0; i < s1.size(); i ++ ) {if(s1[i] == '0') x ++;else y ++;}if(c1 > c0) {cout << "YES\n"; return;}if(x < y) cout << "YES\n";else cout << "NO\n";
}signed main(void) {IOSint ALL = 1; cin >> ALL;while(ALL -- ) Solved();return 0;
}
Problems C. Increasing Sequence with Fixed OR
题意
给出一个正整数 n n n,要求构造出一个序列:
-
a i ≤ n ( 1 ≤ i ≤ k ) a_i\le n(1\le i\le k) ai≤n(1≤i≤k)。
-
a i > a i − 1 ( 2 ≤ i ≤ k ) a_i>a_{i-1}(2\le i\le k) ai>ai−1(2≤i≤k), a a a数组是严格递增的
-
a i ∣ a i − 1 = n ( 2 ≤ i ≤ k ) a_i\,|\,a_{i-1}=n(2\le i\le k) ai∣ai−1=n(2≤i≤k), ∣ | ∣ 表示按位异或操作。
要求构造出一个符合要求的最长的序列并输出。
思路
考察位运算。
很明显能发现,构造出的数列的最后一项一定是 n n n,因此我们考虑从后往前构造。
为了符合递增和相邻数字异或和为 n n n,我们考虑从低位到高位,依次让二进制下为 1 1 1的位变为零;对于该题,这即是最优情况。
但是需要特判一下当二进制下只有 1 1 1位 1 1 1时,能构造出来的序列只有其本身,特判即可。
标程
#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr);
#define int long long
#define endl '\n'void Solved() {int n; cin >> n;bitset<63> b(n);vector<int> a;int sum = 0, x = -1;for(int i = 0; i < 64; i ++ ) {if(b[i] == 1) {sum ++;a.push_back(i);}if(b[i] == 1 && x == -1) x = i;}x = 64 - x;if(sum == 1) {cout << "1\n" << n << endl; return;}int t = n, k = 0;vector<int> v;for(int i = a.size() - 1; i >= 0; i -- ) {k ++;t = t - (1ll << (a[i]));for(int j = i + 1; j < a.size(); j ++ ) {t |= (1ll << (a[j]));}v.push_back(t);}v.push_back(n);cout << k + 1 << endl;for(auto i : v) cout << i << ' ';cout << endl;}signed main(void) {IOSint ALL = 1; cin >> ALL;while(ALL -- ) Solved();return 0;
}
Problems D. The Omnipotent Monster Killer
题意
有一颗树,树上有若干的怪物,每个怪物有对应的攻击值;每回合都会按顺序发生下面两种情况:
- 所有存活的怪物攻击你,你的生命值将会减少其攻击值的总和。
- 选择若干怪物杀掉,选择的限制条件是:不能同时选择一条边上的两只怪物。
当杀死全部怪物后结束游戏。求最少受到的攻击值。
思路
树形DP
假设游戏进行的回合数为 L L L,怪物 i i i在第 S i S_i Si轮被杀死,并且满足同一条边上的两只怪物 i , j ( S i ! = s j ) i,j(S_i ~!=s_j) i,j(Si !=sj),那么攻击值为:
∑ i = 1 L a i × S i \sum_{i=1}^{L}{a_i\times S_i} i=1∑Lai×Si
然后我们会发现本题的求解思路和这道题相同:P4395 [BOI2003] Gem 气垫车 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 。
关于树形DP练习,可以参考这一篇博客:树形dp(学习过程+刷题总结)
对于本题,我们可以用时间复杂度为 O ( n L 2 ) O(nL^2) O(nL2)来进行树形DP,用二维数组 f x , j f_{x, j} fx,j表示 S x = j S_x=j Sx=j时,以 x x x为根的子树价值之和的最小值,则有:
f x , j = S x × a x + ∑ i ∈ s o n ( x ) min S J ! = S x ( f i , j ) f_{x,j}=S_x \times a_x+\sum_{i \in son(x)}\min_{S_J!=S_x}(f_{i,j}) fx,j=Sx×ax+i∈son(x)∑SJ!=Sxmin(fi,j)
那么答案即为:
min 1 ≤ i ≤ L ( f 1 , i ) \min_{1\le i \le L}(f_{1, i}) 1≤i≤Lmin(f1,i)
关于 L L L的范围: L ≤ ⌊ log 2 n ⌋ + 1 L \le \left \lfloor \log_2n \right \rfloor +1 L≤⌊log2n⌋+1
标程
#include<bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr);
#define int long long
#define endl '\n'const int N = 3e5 + 10; vector<int> a(N), b[N], f[N];void dfs(int x, int y) {for(int i = 1; i <= 20; i ++ ) {f[x][i] = i * a[x];}for(auto i : b[x]) {if(i == y) continue;dfs(i, x);for(int j = 1; j <= 20; j ++ ) {int mi = (j == 1 ? f[i][2] : f[i][1]);for(int k = 1; k <= 20; k ++ ) {if(j == k) continue;mi = min(mi, f[i][k]);}f[x][j] += mi;}}
}void Solved() {int n; cin >> n;for(int i = 1; i <= n; i ++ ) {cin >> a[i];f[i].clear(); f[i].resize(21);b[i].clear();}for(int i = 1; i < n; i ++ ) {int x, y; cin >> x >> y;b[x].push_back(y); b[y].push_back(x);}dfs(1, 0);int res = f[1][1];for(int i = 1; i <= 20; i ++ ) {res = min(res, f[1][i]);}cout << res << endl;
}signed main(void) {IOSint ALL = 1; cin >> ALL;while(ALL -- ) Solved();return 0;
}
相关文章:
Codeforces Round 958 (Div. 2)
C o d e f o r c e s R o u n d 958 ( D i v . 2 ) \Huge{Codeforces Round 958 (Div. 2)} CodeforcesRound958(Div.2) 文章目录 Problems A. Split the Multiset题意思路标程 Problems B. Make Majority题意思路标程 Problems C. Increasing Sequence with Fixed OR题意思路标…...

<数据集>猫狗识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:3686张 标注数量(xml文件个数):3686 标注数量(txt文件个数):3686 标注类别数:2 标注类别名称:[cat, dog] 序号类别名称图片数框数1cat118811892dog24982498 使用标…...

Figma 中文版指南:获取和安装汉化插件
Figma是一种主流的在线团队合作设计工具,也是一种基于 Web 端的设计工具。在当今的设计时代,Figma 的使用满足了每个人的设计需求,不仅可以实现在线编辑,还可以方便日常管理,有效提高工作效率。然而,相信很…...
用c语言写一个贪吃蛇游戏
贪吃蛇游戏通常涉及到终端图形编程和简单的游戏逻辑。以下是一个基本的实现示例,包括贪吃蛇的移动、食物生成、碰撞检测等功能。 1. 贪吃蛇游戏的基本结构 贪吃蛇游戏可以分为以下几个部分: 游戏地图和终端绘制:使用二维数组表示游戏地图&am…...
计算机网络入门 --网络模型
计算机网络入门 --网络模型 1.OSI七层模型 1.1 模型概念 OSI七层模型是将计算机网络通信协议划分为七个不同层次的标准化框架,每一层都负责不同功能,并从物理连接层开始处理。OSI七层网络模型如下分别为:物理层、数据链路层、网络层、传输…...

陪玩系统小程序模式APP小程序H5系统搭建开发
随着移动互联网的营及和游戏行业的蓬轨发展,陪玩服务应远而生并迅速唱起,陪玩系统小程序作为连接游戏玩家与陪玩师的桥梁,其模式系统的搭建与开发是得尤为重要,本文将洋细凰述陪玩系统小程宗模式系统的搭建开发流程,包…...
算法训练营day72
题目:117. 软件构建 (kamacoder.com) #include<iostream> #include<unordered_map> #include<vector> #include<queue>using namespace std;int main() {int n, m;cin >> n >> m;vector<int> indegree(n, 0);unordered_…...

C语言------指针讲解(2)
目录 一、数组名的理解 二、使用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组模拟二维数组 一、数组名的理解 通过学习,我们知道:数组名和数组首元素的地址打印出来的结果一模一样,数组…...

大数据技术基础
一、大数据平台 1.大数据平台方案步骤: ①市场上有哪些大数据平台 ②硬件、系统、业务增长等方面 ③方案是否通过 通过后:按照一期目标投入 先虚拟环境部署联系,再实际部署 《大数据架构介绍》《Hadoop架构解析》《Hadoop集群规划》 《H…...

【文心智能体】前几天百度热搜有一条非常有趣的话题《00后疯感工牌》,看看如何通过低代码工作流方式实现图片显示
00后疯感工牌体验:https://mbd.baidu.com/ma/s/6yA90qtM 目录 前言比赛推荐工作流创建工作流入口创建工作流界面工作流界面HTTP工具卡点地方 总结推荐文章 前言 前几天百度热搜有一条非常有有趣《00后疯感工牌》。 想着通过文心智能体去一键生成00后疯感工牌是不是…...

C++20中的constinit说明符
constinit说明符断言(assert)变量具有静态初始化,即零初始化和常量初始化(zero initialization and constant initialization),否则程序格式不正确(program is ill-formed)。 constinit说明符声明具有静态或线程存储持续时间(thread storage duration)的…...

Java 中的正则表达式
转义字符由反斜杠\x组成,用于实现特殊功能当想取消这些特殊功能时可以在前面加上反斜杠\ 例如在Java中当\出现时是转义字符的一部分,具有特殊意义,前面加一个反斜可以取消其特殊意义,表示1个普通的反斜杠\,\\\\表示2个…...

华为配置蓝牙终端定位实验
个人主页:知孤云出岫 目录 配置蓝牙终端定位示例 业务需求 组网需求 数据规划 配置思路 配置注意事项 操作步骤 配置文件 配置蓝牙终端定位示例 组网图形 图1 配置蓝牙终端定位示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业…...

搭建hadoop+spark完全分布式集群环境
目录 一、集群规划 二、更改主机名 三、建立主机名和ip的映射 四、关闭防火墙(master,slave1,slave2) 五、配置ssh免密码登录 六、安装JDK 七、hadoop之hdfs安装与配置 1)解压Hadoop 2)修改hadoop-env.sh 3)修改 core-site.xml 4)修改hdfs-site.xml 5) 修改s…...

pytorch-pytorch之LSTM
目录 1. nn.LSTM2. nn.LSTMCell 1. nn.LSTM 初始化函数输入参数与RNN相同,分别是input_size,hidden_size和num_layer foward函数也与RNN类似,只不过返回值除了out外,ht变为(ht,ct) 代码见下图: 2. nn.LSTMCell 初…...

jvm优化
1.jvm组成 什么是jvm,java是跨平台语言,对不同的平台(windos,linux),有不同的jvm版本。jvm屏蔽了平台的不同,提供了统一的运行环境,让java代码无需考虑平台的差异。 jdk包含jre包含…...

网络安全——防御课实验二
在实验一的基础上,完成7-11题 拓扑图 7、办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换) 首先,按照之前的操作,创建新的安全区(电信和移动)分别表示两个外网…...

朴素模式匹配算法与KMP算法(非重点)
目录 一. 朴素模式匹配算法1.1 什么是字符串的匹配模式1.2 朴素模式匹配算法1.3 通过数组下标实现朴素模式匹配算法 二. KMP算法2.1 算法分析2.2 用代码实现(只会出现在选择题,考察代码的概率不大) 三. 手算next数组四. KMP算法的进一步优化4…...
[k8s源码]2.CURD deployment
加载kubernetes配置 使用 clientcmd方法,是通过"k8s.io/client-go/tools/clientcmd"包加载的。这个函数返回的是config和error两个值。可以看到返回的config是一个指针变量。 func clientcmd.BuildConfigFromFlags(masterUrl string, kubeconfigPath str…...

使用base64通用文件上传
编写一个上传文件的组件 tuku,点击图片上传后使用FileReader异步读取文件的内容,读取完成后获得文件名和base64码,调用后端uploadApi,传入姓名和base64文件信息,后端存入nginx中,用于访问 tuku.ts组件代码: <templa…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...