Codeforces Round 917 (Div. 2)更新中...

A.Least Product(思维)

题意:

给出一个数组 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an,你可以进行若干次以下操作:

  • 选择数组中的一个元素 a i a_i ai,将这个数字修改为 0 ∼ a i 0 \sim a_i 0ai之间的任意数字。

问,最少需要多少次操作可以使得 ∏ i = 1 n a i \prod\limits_{i = 1}^{n}a_i i=1nai的结果最小,并输出对应的操作。

分析:

可以将问题分成两种情况:

  • 存在 a i = 0 a_i = 0 ai=0或负数的出现次数为奇数,此时无论进行任何操作都无法使结果变得更小,输出0

  • 其他情况,由于数字只能被修改到 0 ∼ a i 0 \sim a_i 0ai之间,那么正负数是无法互相转换的,因此,当结果为正数时,任选一个 a i a_i ai,将其修改为 0 0 0,就能获得最小的结果

代码:

#include<bits/stdc++.h>using namespace std;
typedef long long LL;
const int MAXN = 3e5 + 5e2;void solve() {int n;cin >> n;int zero = 0, sign = 0;for (int i = 1; i <= n; i++) {int a;cin >> a;if (a == 0) {zero = 1;} else if (a < 0) {sign++;}}if (zero || sign % 2 == 1) cout << 0 << endl;else {cout << 1 << endl;cout << "1 0" << endl;}
}int main() {int Case;cin >> Case;while (Case--) {solve();}return 0;
}

B.Erase First or Second Letter(思维)

题意:

给出一个长度为 n n n的字符串 s s s,你可以进行若干次以下操作:

  • 移除第一个字符

  • 移除第二个字符

问:经过若干次操作后,可以获得多少种不同的非空字符串?

分析:

将字符串划分为前后两部分,枚举两部分的分界点,每次枚举完分界点后,将后半部分视为不进行修改的部分,仅会对前半部分进行操作,那么由于每次枚举的后半部分均不同,为了保证方案的独立性,前半部分仅保留一个字符,那么此时的方案数就是前半部分中包含的不同字母的数量。

使用计数数组或set动态记录不同字符数量,每次枚举分界点后更新前半部分字符种类并记录到答案中即可。

代码:

#include<bits/stdc++.h>using namespace std;
typedef long long LL;
const int MAXN = 3e5 + 5e2;int vis[30];void solve() {memset(vis, 0, sizeof (vis));int n;string s;cin >> n >> s;int cnt = 0, ans = 0;for (int i = 0; i < n; i++) {vis[s[i] - 'a']++;if (vis[s[i] - 'a'] == 1) cnt++;ans += cnt;}cout << ans << endl;
}int main() {int Case;cin >> Case;while (Case--) {solve();}return 0;
}

C.Watering an Array(枚举)

题意:

给出一个长度为 n n n的数组 a a a,你将在接下来的 d d d天里每天选择执行以下两个操作之一:

  • 给所有的 a 1 , a 2 , . . . , a b i a_1, a_2, ..., a_{b_i} a1,a2,...,abi加上一,其中 b i b_i bi为题目给出的第 i i i天的操作数。

  • 数组 a a a a i = i a_i = i ai=i的数量就是你本轮获得的得分,然后将 a a a数组所有元素修改为 0 0 0

问:最多可以获得多少得分?

Tips:由于天数较多,因此 b b b数组采用 b = [ v 1 , v 2 , . . . , v k , v 1 , v 2 , . . . , v k , . . . ] b = [v_1, v_2, ..., v_k, v_1, v_2, ..., v_k, ...] b=[v1,v2,...,vk,v1,v2,...,vk,...]的形式给出。

分析:

如果数组 a a a开始全部为 0 0 0,那么最优策略就是操作 1 , 2 1,2 1,2轮流进行,可以获得 ⌊ d 2 ⌋ \lfloor\frac{d}{2}\rfloor 2d点得分(注意:开始时若 a 1 ≥ 1 a_1 \ge 1 a11,则需要使用一次操作 2 2 2 a 1 a_1 a1修改为 0 0 0,此时得分为 ( ⌊ d − 1 2 ⌋ + 开始时数组元素可以产生的得分 (\lfloor\frac{d - 1}{2}\rfloor + \text{开始时数组元素可以产生的得分} (⌊2d1+开始时数组元素可以产生的得分)。

而由于初始的数组是包含初始数字的,且长度为 n n n的数组最多可以产生 n n n点得分,因此,只需要在 2 × n 2 \times n 2×n的操作次数内均有可能超过循环操作获取的 n n n点固定得分。

枚举第一次进行操作 2 2 2前会进行多少次操作 1 1 1,每次遍历数组统计得分,剩余的操作次数使用最优策略进行。记录过程中最大的得分即可。

坑点

既然获取的长度为 n n n的数字最高可以产生 n n n点得分,那么只枚举 n n n次操作是否就够了?

反例:

原数组为 2 , 1 , 2 , . . . , n − 1 2, 1, 2, ..., n - 1 2,1,2,...,n1,给出的 b b b数组为 [ 1 , 1 , . . . , 1 , n ] [1, 1, ..., 1, n] [1,1,...,1,n],其中 b i = n b_i = n bi=n前有 ( 2 × n ) − 4 (2 \times n) - 4 (2×n)4个1,此时 d = 2 × n d = 2 \times n d=2×n

可以发现,枚举 0 ∼ n 0 \sim n 0n次操作 1 1 1,均无法产生额外得分,此时获得的最高总分为 ⌊ d − 1 2 ⌋ = n − 1 \lfloor \frac{d - 1}{2} \rfloor = n - 1 2d1=n1,而依次使用 ( 2 × n ) − 3 (2 \times n) - 3 (2×n)3次操作 1 1 1,再进行操作 2 2 2,可以获得 n − 1 n - 1 n1点得分,此时还剩下两次操作,还可以继续一次最优策略,最后得分为 n n n

代码:

#include<bits/stdc++.h>using namespace std;
typedef long long LL;
const int MAXN = 3e5 + 5e2;LL a[MAXN], b[MAXN];void solve() {LL n, k, d;cin >> n >> k >> d;LL ans = 0;for (int i = 1; i <= n; i++) cin >> a[i];for (int i = 0; i < k; i++) cin >> b[i];for (int i = 0; i <= 2 * n && i < d; i++) {LL cnt = 0;for (int j = 1; j <= n; j++) if (a[j] == j) cnt++;ans = max(ans, cnt + (d - i - 1) / 2);for (int j = 1; j <= b[i % k]; j++) {if (a[j] == j) cnt--;a[j]++;if (a[j] == j) cnt++;}}cout << ans << endl;
}int main() {int Case;cin >> Case;while (Case--) {solve();}return 0;
}

学习交流

以下为学习交流QQ群,群号: 546235402,每周题解完成后都会转发到群中,大家可以加群一起交流做题思路,分享做题技巧,欢迎大家的加入。

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

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

相关文章

Stream流的简单使用

stream流的三类方法 获取Stream流 ○ 创建一条流水线,并把数据放到流水线上准备进行操作中间方法 ○ 流水线上的操作 ○ 一次操作完毕之后,还可以继续进行其他操作终结方法 ○ 一个Stream流只能有一个终结方法 ○ 是流水线上的最后一个操作 其实Stream流非常简单&#xff0c;只…

Unity3D 安装和下载指南及汉化

Unity3D是一款强大的游戏开发引擎&#xff0c;为开发者提供了丰富的工具和资源&#xff0c;使得游戏制作变得更加简单和高效。本文将介绍Unity3D的安装和下载步骤&#xff0c;以帮助初学者迅速入门。 步骤一&#xff1a;访问Unity官网 首先&#xff0c;打开浏览器&#xff0c…

记录为 uni-app的扩展组件(uni-ui)和 微信小程序标签 添加行内样式的正确做法

如题&#xff0c;首先&#xff0c;正确为微信小程序标签添加行内样式&#xff0c;其做法是&#xff1a;&#xff08;以view为例&#xff09; <view style"width: 400rpx; height: 400rpx; background-color: green;">goods_list</view>也就是说&#xf…

Qt 中使用 MySQL 数据库保姆级教程(上)

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 在 Qt 中默认只搭载了 QSqlLite 数据库驱动&#xff0c;若要使用其他数据库需要自己下载数据库&#xff0c;并将数据库驱动加载到…

vite定制需求打包

技术栈&#xff1a;vue3vite 开发的管理系统需要应用在多个医院。产品提了一个需求&#xff0c;针对某一家医院&#xff0c;需要将登录页的logo去掉&#xff0c;其它的医院保留。由于未登录状态无法获取医院信息&#xff0c;因此采用定制打包的方案。 解决方案&#xff1a; 添…

虚拟机Windows Server 2012 与ubuntu的安装与布置

介绍虚拟机 虚拟机&#xff08;Virtual Machine&#xff0c;简称VM&#xff09;是一种通过软件模拟的计算机系统&#xff0c;可以在一台物理计算机上同时运行多个独立的操作系统和应用软件。虚拟机将物理计算机的硬件资源&#xff08;如处理器、内存、硬盘等&#xff09;虚拟化…

【git设置代理】

git设置代理 设置https代理全局设置&#xff08;不推荐&#xff09;只对GitHub代理&#xff08;推荐&#xff09;取消代理 配置ssh的代理配置ssh的configLinux、MacOSWindows config 内容测试是否设置成功 设置https代理 全局设置&#xff08;不推荐&#xff09; #使用http代…

2023年12月30日(星期六)骑行太平

2023年12月30日 (星期六) 骑行太平&#xff0c;早8:30到9:00&#xff0c; 大观公园门囗集合&#xff0c;9:30准时出发 【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点:大观公园门囗集合 &#xff0c;家住东&#xff0c;南&#xff0c;北的骑友在…

Nginx快速入门:return、rewrite重定向、重写详解(六)

0. 引言 我们在日常的生产过程中&#xff0c;常常有需要重定向转发的需求&#xff0c;比如企业更换了域名&#xff0c;但又要保证之前的域名能访问&#xff0c;这就需要做重定向的跳转。 我们在之前的章节中学习了Nginx的负载均衡、各类转发代理配置&#xff0c;今天继续来补…

《LIO-SAM阅读笔记》2.ImageProjectionfeatureExtraction

前言&#xff1a; LIO-SAM中ImageProjection类和featureExtraction类的内容比较简单&#xff0c;这里就放在一起记录&#xff0c;这两部分属于点云的预处理前端&#xff0c;ImageProjection用来点云的运动去畸变和为每帧点云位姿进行粗略初始化&#xff0c;featureExtraction类…

Camtasia2024中文最新免授权版下载

TechSmith Camtasia2024免费版是一款非常专业且功能强大的屏幕录制工具&#xff01;使用集屏幕录像机、视频编辑器的功能于一身&#xff0c;能够轻松的录制和创建具有专业外观的视频。这套非常强大的专业录屏与视频创作大型软件套装包含捕获屏幕录制、视频剪辑和编辑、视频录音…

c++学习笔记-提高篇-STL标准模板库4(set容器、map容器)

set容器 一、set的基本概念 1.简介&#xff1a;所有元素都会在插入时自动被排序 2.本质&#xff1a;set/multiset属于关联式容器&#xff0c;底层结构是用二叉树实现 3.set和multiset区别 set不允许容器中有重复元素 multiset允许容器中有重复元素 二、set构造和赋值 1…

MySQL日期查询 今天、明天、本月、下月、星期、本周第一天、本周最后一天、本周七天日期

文章目录 今天日期明天日期本月第一天本月最后一天下个月第一天当前月已过几天当前月天数当前月所有日期获取星期本周第一天本周最后一天获取本周的七天日期 今天日期 select curdate()明天日期 select DATE_SUB(curdate(),INTERVAL -1 DAY) AS tomorrow本月第一天 select d…

嵌入式——RTC内置实时时钟

学习目标 理解原理图RTC设计部分掌握初始化RTC掌握设置时间掌握读取时间学习内容 RTC原理图 RTC结构框图 RTC时钟 开发流程 加载依赖。gd32f4xx_rtc.c,gd32f4xx_pmu.c初始化RTC。时钟配置。获取时钟。RTC初始化 // 电池管理加载 rcu_periph_clock_enable(RCU_PMU); pmu_back…

C#调用(python通过excel坐标生成的曲面地形图)案例

效果图: 文件图: 详解一:环境和python库问题 1.python 中只需要下载 matplotlib3.8.2和scipy1.11.4 2.我安装的python版本 详解二:解释器问题 python解释器这里有两种形式 第一种形式 1.调用 pycharm项目下的解释器,需要安装python必须的包(命令安装或者搜索安装)。 2.修改…

“一键批量翻译与重命名,轻松将西班牙文件名转换为中文名“

你是否遇到过需要将大量的西班牙文件名翻译成中文名&#xff0c;却无从下手的情况&#xff1f;现在&#xff0c;我们为你带来了一款强大的文件名批量翻译与重命名软件&#xff0c;让你能够轻松完成这项任务&#xff0c;提高工作效率。 首先&#xff0c;进入文件批量改名高手的主…

【数据库】postgressql设置数据库执行超时时间

在这篇文章中&#xff0c;我们将深入探讨PostgreSQL数据库中的一个关键设置&#xff1a;SET statement_timeout。这个设置对于管理数据库性能和优化查询执行时间非常重要。让我们一起来了解它的工作原理以及如何有效地使用它。 什么是statement_timeout&#xff1f; statemen…

第9章-用户分群方法-聚类评估指标

目录 简单例子 轮廓系数 均方根标准差 R-Square ARI 聚类是一种无监督分类算法,通常给定的样本没有类别或标签,聚类结果的好坏难以使用有监督模型的评估方法衡量。聚类评估指标思想在于类簇内的差异尽可能小,也就是紧密度高,而类簇间差异尽可能大,也就是分离…

MEMS麦克风具备哪些优势? MP34DT05TR-A 一款MEMS音频传感器全向数字麦克风

MP34DT05TR-A是一款超紧凑、低功耗、全向数字式 MEMS 麦克风&#xff0c;内置电容式感应元件和 IC 接口。 传感元件能够检测声波&#xff0c;采用专门用来生产音频传感器的硅微加工工艺制造。IC 接口采用 CMOS 工艺制造&#xff0c;允许专用电路设计以 PDM 格式从外部提供数字…

Java自动化测试系列[v1.0.0][常见页面操作处理附源码]

[控制滚动] package util; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement;public class ScrollBarUtil {/*** 控制滚动条向下拉到底* param driver 浏览器驱动*/public static void toBottom…