牛客周赛 Round 82

news/2025/2/23 21:08:25/文章来源:https://www.cnblogs.com/maburb/p/18732863

A. 夹心饼干

点击查看代码
void solve() {std::string s;std::cin >> s;if (s[0] == s.back()) {std::cout << "YES\n";} else {std::cout << "NO\n";}
}

B. 食堂大作战1.0 && C. 食堂大作战2.0

题意:有\(n\)个队伍,每个队伍有\(a_i\)人,你要到每个队伍前面各去一次,每时刻每个队伍人数都减\(1\),当你在这个队伍且队伍只有你一个人时你就到了这个队伍前面,然后你可以瞬移到另一个队伍后面。问能否可行以及给出方案。

不算自己的情况,如果一个队伍人数为\(0\)了,那么我们应该在之前排到了这个队伍后面。那么显然如果有两个队伍同时为\(0\),我们无法兼顾这两个队伍。于是每个\(a_i\)只能出现一次。如果每个\(a_i\)只出现一次,那么我们显然可以按从小到大的顺序操作。

点击查看代码
void solve() {int n;std::cin >> n;std::vector<std::pair<int, int>> a(n);for (int i = 0; i < n; ++ i) {int x;std::cin >> x;a[i] = {x, i};}std::sort(a.begin(), a.end());for (int i = 0; i + 1 < n; ++ i) {if (a[i].first == a[i + 1].first) {std::cout << "NO\n";return;}}std::cout << "YES\n";for (int i = 0; i < n; ++ i) {std::cout << a[i].second + 1 << " \n"[i == n - 1];}
}

D. 小苯的排列计数

题意:给出一个排列的前缀\(min\)数组,求有多少排列满足要求。

发现每次数字变化就代表这个数在这个位置上,那么我们从前往后遍历,找每一段相同的,这一段只有一个是固定的,其他只需要填大于这个数的数就可以了,假设\([i, j]\)都是相同的,那么\(p_i = a_i\)\([i + 1, j]\)的位置选比\(a_i\)大的数就行,不过之前以及填过了\(i-1\)个大于\(a_i\)的数,那么我们总共有\(n - a_i - (i - 1)\)个数可以选,总共有\(j - i\)个位置,用组合数求即可,注意每个数可以任意排列,于是还要乘上一个\(j-i\)的排列。
(代码使用了jiangly的取模类以及组合数板子)

点击查看代码
void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}for (int i = 1; i < n; ++ i) {if (a[i] > a[i - 1]) {std::cout << 0 << "\n";return;}}Z ans = 1;for (int i = 0; i < n; ++ i) {int j = i;while (j + 1 < n && a[i] == a[j + 1]) {++ j;}int tot = n - a[i] - i;ans *= comb.binom(tot, j - i) * comb.fac(j - i);i = j;}std::cout << ans << "\n";
}

E. 和+和

题意:给你两个数组\(a, b\),你要在\(a\)里选\(m\)个数,在\(b\)里选\(m\)个数,满足\(a\)里选的数的下标都小于\(b\)里选的数的下标,使得选出数的总和最小。

用优先队列预处理出\([1, i]\)中从\(a\)里选\(m\)个元素的最小值,和\([i, n]\)\(b\)里选\(m\)个数的最小值。那么就可以枚举\(i\),取两边的值相加。

点击查看代码
void solve() {int n, m;std::cin >> n >> m;std::vector<int> a(n), b(n);for (int i = 0; i < n; ++ i) {std::cin >> a[i];}for (int i = 0; i < n; ++ i) {std::cin >> b[i];}const i64 inf = 1e18;std::priority_queue<int> heap;i64 sum = 0;std::vector<i64> pre(n, inf), suf(n, inf);for (int i = 0; i < n; ++ i) {if (heap.size() == m) {if (a[i] < heap.top()) {sum -= heap.top();heap.pop();sum += a[i];heap.push(a[i]);}} else {heap.push(a[i]);sum += a[i];}if (heap.size() == m) {pre[i] = sum;}}while (heap.size()) {heap.pop();}sum = 0;for (int i = n - 1; i >= 0; -- i) {if (heap.size() == m) {if (b[i] < heap.top()) {sum -= heap.top();heap.pop();sum += b[i];heap.push(b[i]);}} else {heap.push(b[i]);sum += b[i];}if (heap.size() == m) {suf[i] = sum;}}i64 ans = inf;for (int i = 0; i + 1 < n; ++ i) {ans = std::min(ans, pre[i] + suf[i + 1]);}std::cout << ans << "\n";
}

F. 怎么写线性SPJ

题意:构造一个长度为\(n\)的数组,满足值域都在\([1, n]\)里,且任意一个子数组都至少有一个数在这个子数组里只出现过一次。求不同数字最少的方案。

手搓一下,长度为\(7\)的答案为\(1,2,1,3,1,2,1\),长度为\(15\)的答案为\(1,2,1,3,1,2,1,4,1,2,1,3,1,2,1\)。发现是一个很对称的数组,并且不同数字只有\(log_{2} n + 1\)个,然后大胆猜这就是最小的种类数,于是就过了。
关于代码实现,可以用递归。也可以发现每个相同数之间的距离是固定了,两个\(x\)之间隔了\(2^x\)的距离。

点击查看代码
void solve() {int n;std::cin >> n;std::vector<int> ans(n);int x = 0;for (int i = 0; i < n; ++ i) {if (ans[i] == 0) {++ x;for (int j = i; j < n; j += 1 << x) {ans[j] = x;}}}std::cout << x << "\n";for (int i = 0; i < n; ++ i) {std::cout << ans[i] << " \n"[i == n - 1];}
}

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

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

相关文章

空气流量和空气压力参数解耦系统simulink建模与仿真

1.课题概述空气流量和空气压力参数解耦系统simulink建模与仿真,在许多系统中,空气流量(Q)和压力(P)之间存在耦合关系,这意味着改变一个参数会影响到另一个参数。通过解耦系统解决这种问题,从而提高系统的控制稳定性。2.系统仿真结果 (完整程序运行后无水印)3.核心程序…

【库】Coravel Cache缓存

Coravel 通过使高级应用程序功能(如任务/作业调度、排队、缓存、邮件(以及更多!))易于访问且易于使用,帮助开发人员快速启动并运行 .NET 应用程序。具有简单、富有表现力和直接的语法。Coravel非常简单,通过Rember来保存缓存数据,同时可以设定缓存的时长,然后通过Get来…

4.优化器 - 模型评估

优化器 - optimizer优化器就是在深度学习反向传播过程中,指引损失函数(目标函数)的各个参数往正确的方向更新合适的大小,使得更新后的各个参数损失函数(目标函数)值不断逼近全局最小优化器不计算梯度,他只是梯度的更新者,它决定了以什么样的形式更新参数如果损失函数是…

【软件开发】CMake学习笔记

【软件开发】CMake 学习笔记 CMake 是什么? 是构建系统(如 Visual Studio)的文件(如 .vcxproj .sln)的创建器,具体要生成的构建系统可以通过 CMakePresets 文件中的 generator 指定。 构建系统一般不是跨平台的,但 CMake 支持在不同的操作系统上生成不同的构建系统文件,…

Python糖尿病数据分析:深度学习、逻辑回归、K近邻、决策树、随机森林、支持向量机及模型优化训练评估选择

全文链接:https://tecdat.cn/?p=39864 原文出处:拓端数据部落公众号 分析师:Weilong Zhang 本研究旨在利用机器学习和深度学习模型对糖尿病数据进行分析和预测。通过对糖尿病数据集的读取、预处理、特征分析,运用多种机器学习算法如逻辑回归、K近邻、决策树、随机森林、支…

使用MyBatis框架时Mapper传参是否需要使用@Param注解

在使用MyBatis作为Java项目的ORM框架时,在Mapper接口中传递参数需要通过@Param注解指定参数名称,这样才能在Mapper接口对应的xml文件中引用到对应名称的参数。如果不在Mapper接口中明确使用@Param注解时将会报错:找不到指定名称的参数。 追根溯源,这要从MyBatis获取Mapper接…

关于在阿里云服务器上搭建简单的keepalived主备服务器时出现的问题

问题:在进行keepalived主备服务器配置时,仅配置了RID,状态,通讯端口,VRID,优先级,通告报文发送时间,密码认证部分,VIP。在启动服务时,发现两台设备均跳转状态为MASTER。原因:出现这问题的场景是在阿里VPS云服务器网络环境中,因为路由交换层禁用了ARP的广播限制,造…

子串分值

‌输入和初始化‌: 读取字符串 str,并从索引 1 开始存储(C++ 中字符串索引从 0 开始,但这里为了简化计算,从 1 开始)。 n 存储字符串的长度。 数组 l[i] 存储字符 str[i] 上一次出现的位置。 数组 r[i] 存储字符 str[i] 下一次出现的位置。 数组 p 用于临时存储每个字符最…

【专题】2024年新能源汽车市场年度竞争报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p=39740 在当下快速变革的时代,新能源汽车市场正处于关键的发展十字路口。过去几年间,市场经历了一系列深刻的结构性调整,从市场份额的重新分配到消费者行为模式的显著转变,每一个变化都蕴含着巨大的市场信号。深入分析这些变化背后的数据逻…

pikachu靶场搭建教程

详细介绍了pikachu靶场的搭建,并且附有安装包需要的东西phpStudy: 链接: https://pan.baidu.com/s/1fJ-5TNtdDZGUf5FhTm245g 提取码:0278 pikachu-master: Github链接:Github 链接 链接: https://pan.baidu.com/s/1lDdlxNaa3YjhIEj-WWB3qw 提取码:0278打开 phpstudy ,…

2.17周报

一、本周内容总结本周主要进行了蓝桥和天梯的训练,训练了3场蓝桥、2场天梯,剩余时间的就是赛后补题 补题的过程也重新理清了很多知识,包括gcd和lcm的应用,多项式除法的过程等等 对于蓝桥和天梯的赛制,还重新背了下很多算法的板子,包括求最短路的多种方法,不同范围求组合…

来点树链剖分

树链剖分树链剖分学习笔记 引入 给你一棵树,先单点加,再路径求和,你觉得很简单,用树上差分解决了这个问题。 再给你一棵树,先路径加,再单点查询,你觉得很简单,用树上差分解决了这个问题。 又给你一棵树,上述操作都有,而且顺序不分先后,你发现树上差分不能解决这个问…