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 k1n1

标程

#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 sum0sum1,则将该区间变为一个数字 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) ain(1ik)

  • a i > a i − 1 ( 2 ≤ i ≤ k ) a_i>a_{i-1}(2\le i\le k) ai>ai1(2ik) a a a数组是严格递增的

  • a i ∣ a i − 1 = n ( 2 ≤ i ≤ k ) a_i\,|\,a_{i-1}=n(2\le i\le k) aiai1=n(2ik) ∣ | 表示按位异或操作。

要求构造出一个符合要求的最长的序列并输出。

思路

考察位运算。

很明显能发现,构造出的数列的最后一项一定是 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

题意

有一颗树,树上有若干的怪物,每个怪物有对应的攻击值;每回合都会按顺序发生下面两种情况:

  1. 所有存活的怪物攻击你,你的生命值将会减少其攻击值的总和。
  2. 选择若干怪物杀掉,选择的限制条件是:不能同时选择一条边上的两只怪物。

当杀死全部怪物后结束游戏。求最少受到的攻击值。

思路

树形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=1Lai×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+ison(x)SJ!=Sxmin(fi,j)
那么答案即为:
min ⁡ 1 ≤ i ≤ L ( f 1 , i ) \min_{1\le i \le L}(f_{1, i}) 1iLmin(f1,i)
关于 L L L的范围: L ≤ ⌊ log ⁡ 2 n ⌋ + 1 L \le \left \lfloor \log_2n \right \rfloor +1 Llog2n+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;
}

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

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

相关文章

MySQL 进阶(四)【锁】

1、锁 1.1、锁的概述 锁就不需要多介绍了&#xff0c;多个用户访问共享数据资源&#xff0c;如何保证数据并发访问的一致性、有效性是数据库最重要的问题。同时&#xff0c;锁冲突也是影响一个数据库并发性能最重要的因素。 MySQL 中锁的划分有三类&#xff1a; 全局锁&…

2024-07-12升级问题:Android SDK升级导致 Canvas.FULL_COLOR_LAYER_SAVE_FLAG 等标志位无法使用

Canvas.FULL_COLOR_LAYER_SAVE_FLAG 是一个标志位&#xff0c;用于在 Android 的 Canvas 类中保存画布的颜色层。当使用 saveLayer() 方法时&#xff0c;可以传递这个标志位来指示保存整个颜色层。这样&#xff0c;在恢复画布状态时&#xff0c;颜色层也会被恢复。 工程从Andr…

力扣---46.全排列

给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#xff1a;nums …

前后端工作重点小结

前端和后端的区分 前端&#xff08;Frontend&#xff09; 和 后端&#xff08;Backend&#xff09; 是 Web 开发中的两个主要部分&#xff0c;它们有不同的职责和技术栈。 前端&#xff08;Frontend&#xff09; 职责&#xff1a;负责用户界面的呈现和用户交互。主要语言&am…

Qt中While循环等待

QEventLoop的方法&#xff1a; .h文件 #ifndef CONTROLLER_H #define CONTROLLER_H#include <QWidget> #include <QPushButton> #include <QVBoxLayout> #include <QEventLoop> #include <QTimer> #include <QDebug>class Controller : …

如何通过网络快速搜寻到自己的STM32设备

目录 一、问题概述 二、解决思路 三、代码实现 1.创建任务 2.UDP广播接收 一、问题概述 以前一直用RS232串口修改设备配置信息&#xff0c;但是现场施工人员的232线太细&#xff0c;经常容易断掉&#xff0c;这次准备用网口去修改&#xff0c;遇到了一个问题&#xff0c;…

C语言学习笔记[24]:循环语句while②

getchar()的使用场景 int main() {char password[20] {0};printf("请输入密码&#xff1a;");//输入 123456 后回车scanf("%s", passwoed);//数组名本身就是数组地址printf("请确认密码&#xff1a;Y/N");int ch getchar();if(Y ch)printf(&…

区块链学习05-web3中solidity和move语言

Solidity 和 Move 语言的比较&#xff1a;Web3 开发中的两种选择 Solidity 和 Move 都是用于开发区块链平台智能合约的编程语言。它们具有一些相似之处&#xff0c;但也存在一些关键差异。 相似之处: Solidity 和 Move 都是图灵完备语言&#xff0c;这意味着它们可以表达计算…

搜维尔科技:Xsens DOT 可穿戴传感器介绍及示例应用演示

Xsens DOT可穿戴传感器介绍及示例应用演示 搜维尔科技&#xff1a;Xsens DOT 可穿戴传感器介绍及示例应用演示

JavaEE:Spring Web简单小项目实践二(用户登录实现)

学习目的&#xff1a; 1、理解前后端交互过程 2、学习接口传参&#xff0c;数据返回以及页面展示 1、准备工作 创建SpringBoot项目&#xff0c;引入Spring Web依赖&#xff0c;添加前端页面到项目中。 前端代码&#xff1a; login.html <!DOCTYPE html> <html lang&…

关于window配置gitlab和gitee平台共存

今天使用gitlab拉取代码突然提示 gitgitlab.xxx.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 以为是ssh公钥没有配置好&#xff0c;遂又进行了一番配置&#xff0c;实际上并不是这个问题造成的&#xff0c;但还是想记录一下步骤&#xff0c;以…

<Rust><GUI>rust语言GUI库tauri体验:前、后端结合创建一个窗口并修改其样式

前言 本文是rust语言下的GUI库&#xff1a;tauri来创建一个窗口的简单演示&#xff0c;主要说明一下&#xff0c;使用tauri这个库如何创建GUI以及如何添加部件、如何编写逻辑、如何修改风格等&#xff0c;所以&#xff0c;这也是一个专栏&#xff0c;将包括tauri库的多个方面。…

【前端】原生实现图片的放大与缩放

需求 点击图片&#xff0c;出现一个蒙版和图片&#xff0c;双指捏合可以使图片放大或缩小。 使用前端框架是svelte&#xff0c;但是不影响&#xff0c;功能都是JS实现。 代码 相关定义&#xff1a; import { onMount, afterUpdate, onDestroy } from svelte;let imgDetailRef…

搜维尔科技:Varjo XR-4开箱测评,里面都有啥?

Varjo XR-4开箱测评&#xff0c;里面都有啥&#xff1f; 搜维尔科技&#xff1a;Varjo XR-4开箱测评&#xff0c;里面都有啥&#xff1f;

mysql数据库转PostgreSQL,批量处理xml中的sql,字段加上双引号脚本。

最近在当机器人给大写字段加上双引号,人都麻木了…这么多怎么加,这应该是机器人该干的事,不行动手写脚本,本来用python写的脚本,为了方便同事用,就用js改写了一下,样式不好看,能用就行。 全部代码如下: <!DOCTYPE html> <html lang="zh-CN"> &…

小阿轩yx-zookeeper+kafka群集

小阿轩yx-zookeeperkafka群集 消息队列(Message Queue) 是分布式系统中重要的组件 通用的使用场景可以简单地描述为 当不需要立即获得结果&#xff0c;但是并发量又需要进行控制的时候&#xff0c;差不多就是需要使用消息队列的时候。 消息队列 什么是消息队列 消息(Mes…

【HarmonyOS开发】弹窗交互(promptAction )

实现效果 点击按钮实现不同方式的弹窗showToast showDialog showActionMenu 代码实现 1.引入’ohos.promptAction’ import promptAction from ohos.promptAction;2.通过promptAction 实现系统既定的弹窗 import promptAction from ohos.promptAction;Entry Component st…

鸿蒙语言基础类库:【@system.geolocation (地理位置)】

地理位置 说明&#xff1a; 从API Version 7 开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.geolocation]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import geolocation from …

C++客户端Qt开发——常用控件QWidget

四、常用控件 属性 作用 enabled 设置控件是否可使用.true 表⽰可用&#xff0c;false 表示禁用 geometry 位置和尺寸&#xff0c;包含x,y,width,height四个部分 其中坐标是以⽗元素为参考进行设置的. windowTitle 设置widget标题 windowIcon 设置widget图标 windowO…

【STM32 IDE】使用STM32CubeIDE创建一个工程

关于IDE的下载安装和环境配置这里暂且不介绍&#xff0c;我们直接使用STM32F407ZGT6创建工程。 这里需要注意两点&#xff1a; 创建工程时&#xff0c;默认使用最新版本的固件包&#xff08;HAL库&#xff09;&#xff0c;好像还不让更改。如果本地电脑位置没有该版本的包&…