牛客周赛 Round 78
题目目录
- A-时间表查询!
- 解题思路
- 参考代码
- B-一起做很甜的梦!
- 解题思路
- 参考代码
- C-翻之
- 解题思路
- 参考代码
- D-乘之
- 解题思路
- 参考代码
- E-在树上游玩
- 解题思路
- 参考代码
A-时间表查询!
\hspace{15pt} 今天是2025年1月25日,今年的六场牛客寒假算法基础集训营中,前两场比赛已经依次于 20250121、20250123 举行;而后四场比赛将依次于 20250126、20250206、20250208、20250211 举行。
\hspace{15pt} 小歪想知道第 x x x 场比赛是否已经举行,你能帮帮他吗?
解题思路
直接输出。
参考代码
#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 2e5 + 10;void solve(){int n;cin >> n;if(n <= 2){cout << "YES\n";}else{cout << "NO\n";}
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;
// cin >> t;while(t --){solve();}
}
B-一起做很甜的梦!
\hspace{15pt} 梦境是由我们的记忆碎片重组后再次演绎的结果。对于一个拥有 n n n 段记忆的人,我们可以使用 1 ∼ n 1 \sim n 1∼n 这 n n n 个整数来表示每一段记忆。将这 n n n 段记忆打乱后重新组合,就得到了一个梦。
\hspace{15pt} 作为牛客星球的首席梦境研究员,牛可乐在研究中发现:如果一个梦境中任意连续的 k k k 段记忆(其中 1 < k < n 1 < k < n 1<k<n)都无法完整还原出一段真实经历时(即不构成一个排列),这个梦就会特别甜美。这种恰到好处的记忆重组方式,让梦境与现实保持着微妙的距离,创造出令人陶醉的朦胧美感。
\hspace{15pt} 现在,牛可乐想请你帮忙设计一些这样的甜美梦境,来继续他的天才研究。
\hspace{15pt} 长度为 n n n 的排列是由 1 ∼ n 1 \sim n 1∼n 这 n n n 个整数、按任意顺序组成的数组,其中每个整数恰好出现一次。例如, { 2 , 3 , 1 , 5 , 4 } \{2,3,1,5,4\} {2,3,1,5,4} 是一个长度为 5 5 5 的排列,而 { 1 , 2 , 2 } \{1,2,2\} {1,2,2} 和 { 1 , 3 , 4 } \{1,3,4\} {1,3,4} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。
解题思路
要求任意连续的子区间都不能构成排列,奇数从小到大偶数从大到小输出即可。
参考代码
#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 2e5 + 10;void solve(){int n;cin >> n;vector<int> ans1,ans2;for(int i = 1;i <= n;i ++){if(i & 1){ans1.push_back(i);}else{ans2.push_back(i);}}for(auto x : ans1){cout << x << " ";}sort(ans2.begin(),ans2.end(),greater<int>());for(auto x : ans2){cout << x << " ";}
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;
// cin >> t;while(t --){solve();}
}
C-翻之
\hspace{15pt} 对于给定的 n n n 行 m m m 列的矩阵,每一个元素要么是 ‘0’ \texttt{`0'} ‘0’,要么是 ‘1’ \texttt{`1'} ‘1’。
\hspace{15pt} 每一轮,你可以进行一次以下操作:
∙ \hspace{23pt}\bullet\, ∙选择一行的元素,将其全部反置,即 ‘0’ \texttt{`0'} ‘0’ 变为 ‘1’ \texttt{`1'} ‘1’, ‘1’ \texttt{`1'} ‘1’ 变为 ‘0’ \texttt{`0'} ‘0’。
\hspace{15pt} 请你帮助小歪判断,若能进行任意多轮操作(也可以不进行操作),至多能使得多少列的元素均为 ‘1’ \texttt{`1'} ‘1’。你只需要输出这个最大值。
解题思路
每次操作将一行的元素都会进行反置,那么其实对于每一列的元素都会有影响。
所以两列如果能够同时为全1列的话,那么必然这两列初始状态就是相同的。
比如下面的一个矩阵:
0 0 1 1 1
1 0 0 0 0
1 0 1 1 1
1 0 1 1 0
取第三列为:1 0 1 1
取第五列为:1 0 1 0
无论如何进行操作都无法将第三列和第五列都变为1 1 1 1。
因为每次操作是将两列同一位置的元素进行反置,如果同一位置的两个元素不同的话无论如何反置都无法相同。只有相同才能变相同,不同必不相同。
所以答案就是取相同列的最大值。
参考代码
#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 2e5 + 10;
void solve(){int n,m;cin >> n >> m;vector<string> s(m + 1);for(int i = 1;i <= n;i ++){for(int j = 1;j <= m;j ++){char c;cin >> c;s[j] += c;}}map<string,int> mp;int ans = 1;for(int i = 1;i <= m;i ++){mp[s[i]] ++;ans = max(ans,mp[s[i]]);}cout << ans;}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;
// cin >> t;while(t --){solve();}
}
D-乘之
\hspace{15pt} 对于给定的由 n n n 个整数组成的数组 { a 1 , a 2 , … , a n } \{a_1,a_2,\dots,a_n\} {a1,a2,…,an},小龙和小蛇借助于此数组进行游戏。
\hspace{15pt} 游戏步骤如下:
1. {\hspace{20pt}}_\texttt{1.}\, 1.小龙选择一个非空区间 [ a , b ] [a, b] [a,b];
2. {\hspace{20pt}}_\texttt{2.}\, 2.小蛇选择一个非空区间 [ c , d ] [c, d] [c,d];
3. {\hspace{20pt}}_\texttt{3.}\, 3.将选中的区间中的全部元素均乘上 k k k,得到数组 a ′ a' a′;
\hspace{15pt} 游戏只进行一轮,三个步骤结束后立即停止。
\hspace{15pt} 小龙想要让数组 a ′ a' a′ 的元素之和尽可能大,小蛇想要让数组 a ′ a' a′ 的元素之和尽可能小。假设双方都采取的是最优策略,请你计算操作后得到的数组 a ′ a' a′ 的元素之和。
\hspace{15pt} 请注意,区间 [ a , b ] [a, b] [a,b] 和 [ c , d ] [c, d] [c,d] 可以相交,但只结算一次,即若某一个位置被小龙和小蛇同时选中,依旧只乘一次。
解题思路
一开始用的区间最大值、最小值去做的这题,但是好像可以通过最优策略得出结论。
先说结论:整个数组乘以k就是答案。
听起来是不是有点神秘,但其实通过最优策略确实是这么个道理。
首先第一个人选取的区间肯定是最利于他自己的,那么剩下的区间(可能是0个、1个、2个)就是不利于第一个人的,但是一定是利于第二个人的。并且题目说了两个人取得区间交集不会重复计算,那么无论在第一个人取了区间后剩下多少个区间,第二个人都可以把剩下的区间当作一个区间来取走。
所以在两个人的最优策略下整个数组的元素会刚好被使用一次。
参考代码
#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 2e5 + 10;void solve(){int n,k;cin >> n >> k;vector<i64> a(n + 1);for(int i = 1;i <= n;i ++){cin >> a[i];}i64 ans = 0;for(int i = 1;i <= n;i ++){ans += a[i] * k;}cout << ans << "\n";
}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;cin >> t; while(t --){solve();}
}
E-在树上游玩
\hspace{15pt} 对于给定的由 n n n 个节点组成的无根树,每一条边都可以被染上颜色,初始时,全部边均为白色。
\hspace{15pt} 现在,选中树上 k k k 个不同的点,并将它们标记,随后,定义,如果一条树边 ( u , v ) (u, v) (u,v) 满足节点 u u u 和 v v v 同时被标记,那么这条树边自动被染为红色,不需要花费任何代价。
\hspace{15pt} 现在,你可以额外选择一些树边,将它们染成红色,每染一条边需要花费 1 1 1 点代价。
\hspace{15pt} 请你计算最小的染色代价,使得任意一个被标记的点都可以通过被染成红色的边到达至少一个未被标记的点。并输出不同的染色方案数量。
解题思路
用dsu计算红边相连的连通块有几个,然后每个连通块的最近子节点的个数相乘就是ans。
每个红圈代表一个连通块,蓝色的字表示有几个最近子节点,黄色的是哪几个最近子节点。
参考代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
using i64 = long long;
const int N = 2e5 + 10;
const int mod = 1e9 + 7;
void solve(){int n,k;cin >> n >> k;vector<int> sig(n + 1);for(int i = 1;i <= k;i ++){int x;cin >> x;sig[x] = 1;}vector<vector<int>> g(n + 1);vector<int> fa(n + 1),cnt(n + 1);for(int i = 1;i <= n;i ++){fa[i] = i;cnt[i] = 0;}auto find = [&](auto &&find,int x)-> int{if(fa[x] != x){return fa[x] = find(find,fa[x]);}return fa[x];};for(int i = 1;i < n;i ++){int u,v;cin >> u >> v;if(sig[u] && !sig[v]){cnt[find(find,u)] ++;}if(sig[v] && !sig[u]){cnt[find(find,v)] ++;}if(sig[u] && sig[v]){int fa1 = find(find,u);int fa2 = find(find,v);if(fa1 == fa2){continue;}cnt[fa1] += cnt[fa2];fa[fa2] = fa1;}}int ans1 = 0,ans2 = 1;for(int i = 1;i <= n;i ++){if(sig[i] && fa[i] == i){ans1 ++;ans2 = ans2 * cnt[i] % mod;}}cout << ans1 << " " << ans2 << "\n";
}
signed main(){ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;
// cin >> t;while(t --){solve();}
}
相关文章:

牛客周赛 Round 78
题目目录 A-时间表查询!解题思路参考代码 B-一起做很甜的梦!解题思路参考代码 C-翻之解题思路参考代码 D-乘之解题思路参考代码 E-在树上游玩解题思路参考代码 A-时间表查询! \hspace{15pt} 今天是2025年1月25日,今年的六场牛客寒…...
【机器学习】自定义数据集 ,使用朴素贝叶斯对其进行分类
一、贝叶斯原理 贝叶斯算法是基于贝叶斯公式的,其公式为: 其中叫做先验概率,叫做条件概率,叫做观察概率,叫做后验概率,也是我们求解的结果,通过比较后验概率的大小,将后验概率最大的…...

02.01 生产者消费者
请使用条件变量实现2生产者2消费者模型,注意1个生产者在生产的时候,另外一个生产者不能生产。 1>程序代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h>…...

mac 手工安装OpenSSL 3.4.0
如果你希望继续安装 openssl-3.4.0 而不是降级到 3.1.1,可以尝试以下解决方案。根据你提供的错误信息,问题可能出在测试阶段(make test),我们可以尝试跳过测试或修复测试失败的原因。 --- ### **解决方案:…...

kamailio-ACC_JSON模块详解【后端语言go】
要确认 ACC_JSON 模块是否已经成功将计费信息推送到消息队列(MQueue),以及如何从队列中取值,可以按照以下步骤进行操作: 1. 确认 ACC_JSON 已推送到队列 1.1 配置 ACC_JSON 确保 ACC_JSON 模块已正确配置并启用。以下…...

ArkTS语言介绍
文章目录 一、基本知识声明类型运算符语句函数函数声明可选参数Rest参数返回类型函数的作用域函数调用函数类型箭头函数(又名Lambda函数)闭包函数重载类字段方法构造函数可见性修饰符对象字面量抽象类接口接口属性接口继承抽象类和接口泛型类型和函数泛型类和接口泛型约束泛型…...

海外问卷调查之渠道查,企业经营的指南针
海外问卷调查,是企业调研最常用到的方法,有目的、有计划、有系统地收集研究对象的现实状况或历史状况的一种有效手段,是指导企业经营的有效手段。 海外问卷调查充分运用历史法、观察法等方法,同时使用谈话、问卷、个案研究、测试…...

spring和Mybatis的逆向工程
在现代企业级开发中,使用Spring和MyBatis进行快速、高效的数据库操作是非常常见的。本文将深入探讨如何使用Spring和MyBatis进行逆向工程,帮助开发者自动生成数据库相关的代码,提高开发效率和代码质量。 一、什么是逆向工程 逆向工程是指从…...

【Android】问deepseek存储访问
这些天deepseek爆火,我们来问问android问题看看,如果问android中的应用怎么访问外部存储,回答的很清楚,但是如果问的深入一些,比如Android中是怎么控制让应用不能读取其他应用的外部存储文件的,回答的比较抽…...

Android记事本App设计开发项目实战教程2025最新版Android Studio
平时上课录了个视频,从新建工程到打包Apk,从头做到尾,没有遗漏任何实现细节,欢迎学过Android基础的同学参加,如果你做过其他终端软件开发,也可以学习,快速上手Android基础开发。 Android记事本课…...

python学习——函数的返回值
在 Python 中,函数的返回值决定了调用该函数后得到的结果。默认情况下,如果函数没有使用 return 语句或没有明确返回一个值,函数将返回 None。为了实现更复杂的逻辑,可以通过 return 语句返回多个值、错误信息或其他数据类型。 返…...

【竞技宝】裂变天地S1:BB0-2PARI淘汰出局
北京时间2月1日,DOTA2裂变天地S1继续进行,昨日共进行三场比赛,第三场比赛迎来败者组第二轮PARI对阵BB。以下是本场比赛的详细战报。 第一局: 首局比赛,BB在天辉方,PARI在夜魇方。阵容方面,BB点出了圣堂、卡尔、玛尔斯、奶绿、亚巴顿,PARI则是拿到小娜迦、凤凰、大圣、玛西、萨…...

数据分析系列--⑨RapidMiner训练集、测试集、验证集划分
一、数据集获取 二、划分数据集 1.导入和加载数据 2.数据集划分 2.1 划分说明 2.2 方法一 2.3 方法二 一、数据集获取 点击下载数据集 此数据集包含538312条数据. 二、划分数据集 1.导入和加载数据 2.数据集划分 2.1 划分说明 2.2 方法一 使用Filter Example Range算子. …...

实践Rust:编写一个猜数字游戏
如果你正在学习Rust,并且想通过一个有趣的小项目来巩固所学知识,那么“猜数字游戏”是一个绝佳的选择!这个游戏的逻辑非常简单:程序会随机生成一个数字,玩家需要猜测这个数字是多少,程序会告诉玩家猜大了还…...

JavaFX - 3D 形状
在前面的章节中,我们已经了解了如何在 JavaFX 应用程序中的 XY 平面上绘制 2D 形状。除了这些 2D 形状之外,我们还可以使用 JavaFX 绘制其他几个 3D 形状。 通常,3D 形状是可以在 XYZ 平面上绘制的几何图形。它们由两个或多个维度定义&#…...

阿里新发的大模型Qwen2.5-max如何?
阿里新发布的大模型Qwen2.5-Max是一款性能卓越、技术先进的大型语言模型,其在多个方面展现了突出的表现。以下是基于我搜索到的资料对Qwen2.5-Max的详细评价: 技术特点 超大规模预训练数据:Qwen2.5-Max采用了超过20万亿tokens的超大规模预训…...

文本复制兼容方案最佳实现落地。
文章目录 一、navigator.clipboard.writeText二、方案落地总结 一、navigator.clipboard.writeText navigator.clipboard.writeText 是一个Web API,它允许网页脚本将文本数据写入用户的系统剪贴板。这个API是异步的,并且设计用于提高安全性和用户体验&a…...

x86-64数据传输指令
关于汇编语言一些基础概念的更详细的介绍,可移步MIPS指令集(一)基本操作_mips指令 sw-CSDN博客 该指令集中一个字2字节。 该架构有16个64位寄存器,名字都以%r开头,每个寄存器的最低位字节,低1~2位字节&…...

LigerUI在MVC模式下的响应原则
LigerUI是基于jQuery的UI框架,故他也是遵守jQuery的开发模式,但是也具有其特色的侦听函数,那么当LigerUI作为View层的时候,他所发送后端的必然是表单的数据,在此我们以俩个div为例: {Layout "~/View…...

java CountDownLatch和CyclicBarrier
专栏系列文章地址:https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标: 理解CountDownLatch和CyclicBarrier的使用,主要是复习Aqs 另外工作中用到CountDownLatch的地方还很多,一般是完成某些事情才能继续某…...

力扣动态规划-17【算法学习day.111】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?建议灵神的题单和代码随想录)和记录自己的学习过程,我的解析也不会做的非常详细,只会提供思路和一些关…...

读书笔记-《你的灯亮着吗?》
这是一本短篇且有趣的书,通过一些小故事讨论了下解决问题时会遇到的困难。 01 为什么难以定义问题 常言道,办法总比问题多,但往往我们在一开始就没有定义好问题: 在学校时,校园教育使得我们会紧紧抓住看起来像是“问题…...

MATLAB实现多种群遗传算法
多种群遗传算法(MPGA, Multi-Population Genetic Algorithm)是一种改进的遗传算法,它通过将种群分成多个子种群并在不同的子种群之间进行交叉和交换,旨在提高全局搜索能力并避免早期收敛。下面是多种群遗传算法的主要步骤和流程&a…...

tf.Keras (tf-1.15)使用记录3-model.compile方法
model.compile 是 TensorFlow Keras 中用于配置训练模型的方法。在开始训练之前,需要通过这个方法来指定模型的优化器、损失函数和评估指标等。 注意事项: 在开始训练(调用 model.fit)之前,必须先调用 model.compile()。 1 基本…...

Prometheus 中的 Exporter
在 Prometheus 生态系统中,Exporter 扮演着至关重要的角色,它们负责从不同的服务或系统中收集和暴露度量数据。本文将详细介绍 Exporter 的概念、类型以及如何有效使用它们将 Prometheus 集成到各种系统中进行监控。 什么是 Exporter? Exporter 是一段软件,它从应用程序或…...

网工_HDLC协议
2025.01.25:网工老姜学习笔记 第9节 HDLC协议 9.1 HDLC高级数据链路控制9.2 HDLC帧格式(*控制字段)9.2.1 信息帧(承载用户数据,0开头)9.2.2 监督帧(帮助信息可靠传输,10开头…...

leetcode 2563. 统计公平数对的数目
题目如下 数据范围 显然数组长度最大可以到10的5次方n方的复杂度必然超时,阅读题目实际上就是寻找两个位置不同的数满足不等式即可(实际上i j无所谓是哪个 我们只要把位置小的想成i就行)。 按照上面的思路我们只需要排序数组然后从前往后遍历数组然后利用二分查找…...

Debian 10 中 Linux 4.19 内核在 x86_64 架构上对中断嵌套的支持情况
一、中断嵌套的定义与原理 中断嵌套是指在一个中断处理程序(ISR)正在执行的过程中,另一个更高优先级的中断请求到来,系统暂停当前中断处理程序,转而处理新的高优先级中断。处理完高优先级中断后,系统返回到原来的中断处理程序继续执行。这种机制允许系统更高效地响应紧急…...

FLTK - FLTK1.4.1 - demo - bitmap
文章目录 FLTK - FLTK1.4.1 - demo - bitmap概述笔记END FLTK - FLTK1.4.1 - demo - bitmap 概述 // 功能 : 演示位图数据在按钮上的显示 // * 以按钮为范围或者以窗口为范围移动 // * 上下左右, 文字和图像的相对位置 // 失能按钮,使能按钮 // 知识点 // FLTK可…...

数据结构 树1
目录 前言 一,树的引论 二,二叉树 三,二叉树的详细理解 四,二叉搜索树 五,二分法与二叉搜索树的效率 六,二叉搜索树的实现 七,查找最大值和最小值 指针传递 vs 传引用 为什么指针按值传递不会修…...