牛客周赛 Round 82(思维、差分、树状数组、大根堆、前后缀、递归)
文章目录
- 牛客周赛 Round 82(思维、差分、树状数组、大根堆、前后缀、递归)
- A. 夹心饼干
- B. C. 食堂大作战(思维)
- D. 小苯的排列计数(差分、树状数组)
- E. 和+和(大根堆,前缀和)
- F. 怎么写线性SPJ (思维、递归)
牛客周赛 Round 82(思维、差分、树状数组、大根堆、前后缀、递归)
A. 夹心饼干
语法基础题
#include<bits/stdc++.h>
using namespace std;int main(){string s;cin >> s;cout << (s[0] == s[2] ? "YES" : "NO") << endl;return 0;
}
B. C. 食堂大作战(思维)
显然,只要没有两个窗口同时关门,即合法方案。
对于方案,按照关门时间排序,依次输出即可。
#include<bits/stdc++.h>
using namespace std;const int maxn = 1e5 + 5;pair<int, int> a[maxn];int main(){int n;cin >> n;for(int i = 1; i <= n; i++){cin >> a[i].first;a[i].second = i;} sort(a+1, a+1+n);int flag = 1;for(int i = 1; i <= n; i++){if(a[i].first == a[i-1].first){flag = 0;break;}}if(flag){cout << "YES" << endl;}else cout << "NO" << endl;return 0;
}
D. 小苯的排列计数(差分、树状数组)
对于样例:
10
7 7 7 5 5 1 1 1 1 1 1
首先,标黄色的元素的值是确定的。
其次,我们依次来看:
- 72,在此处,可以选择 8,9,10。即,有三种选择。(这里表示第二个 7,其他相同形式同理)
- 73,在此处,可以选择 8,9,10。但是,这时已经在 72处使用过一个元素,还有两种选择可用。
- 52,在此处,可以选择 6,8,9,10。但是,这时已经在 72 和 73 处使用过两个元素,还有两种选择可用。
- 依次类推…
对于一个方案,在某元素 x:
- 如果第一次出现时,该元素在只能在此处,在此处贡献一种组合的可能。
- 如果元素 x 不是第一次出现时:
- 如有大于该元素的选择,可选择元素的个数等于此处贡献的组合。
- 如没有大于该元素的选择,则方案不合法。
使用差分和树状数组配合,即可实现,求[x, n] 中的可用元素个数。
#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxn = 1e6 + 5;
const ll mod = 998244353;ll a[maxn], tree[maxn];int lowbit(int x){return x & (-x);
}void add(int i, int value){while(i < maxn){tree[i] += value;i += lowbit(i);}
}int sum(int i){int res = 0;while(i > 0){res += tree[i];i -= lowbit(i);}return res;
}int main(){int ncase;cin >> ncase;while(ncase--){int n;cin >> n;for(int i = 1; i <= n; i++) cin >> a[i];for(int i = 1; i <= n; i++) tree[i] = 0;for(int i = 1; i <= n; i++) add(i, 1);ll res = 1;for(int i = 1; i <= n; i++){if(a[i] != a[i-1]){if(a[i] > a[i-1] && i != 1){res = 0;break;}add(a[i], -1);}else{int cnt = sum(n) - sum(a[i]); // 差分if(cnt == 0){res = 0;break;}else{res = res * cnt % mod;add(a[i]+1, -1);}}}cout << res << endl;}return 0;
}
E. 和+和(大根堆,前缀和)
题意等价于:选一个 x,在 a[1,x] 中选 m 个最小的数,在 b[x+1, n] 中选 m 个最小的数,使得选出的数sum最小。
枚举所有可能的 x,只要能 O(1) 或者 O(log(n)) 求出 a[1,x] 中 m 个最小的数的和,即可。
对于a数组,维护一个大小为 m 的大根堆,即前 i 个元素中最小的 m 个元素。
依次遍历a数组,插入新值a[i],删除最大的元素,维护sum,维护前缀min即可。
对于 b 数组,逆序遍历,操作同上。
#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxn = 2e5 + 5;ll a[maxn], b[maxn];
ll pre[maxn], suf[maxn];priority_queue<int> qu;int main(){int n, m;cin >> n >> m;for(int i = 1; i <= n; i++) cin >> a[i];for(int i = 1; i <= n; i++) cin >> b[i];ll sum = 0;for(int i = 1; i <= n; i++){sum += a[i];qu.push(a[i]);if(i > m){sum -= qu.top();qu.pop(); }pre[i] = sum;} sum = 0;while(!qu.empty()) qu.pop();for(int i = 1; i <= n; i++){sum += b[n-i+1];qu.push(b[n-i+1]);if(i > m){sum -= qu.top();qu.pop(); }suf[n-i+1] = sum;}ll res = 2e9;for(int i = m; i+m-1 < n; i++){res = min(res, pre[i] + suf[i+1]);}cout << res << endl;return 0;
}
F. 怎么写线性SPJ (思维、递归)
手搓几个样例后,容易想到一个事实:
令 mid = ( l + r ) / 2,如果 a[mid] 是一个 “唯一元素”,接下来,只需要考虑 (l, mid-1) 和 (mid+1, r) 即可。
用相同的思路处理(l, mid-1) 和 (mid+1, r),直到区间大小为 1。(递归)
#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxn = 2e5 + 5;int a[maxn];void dfs(int l, int r, int num){if(l > r) return; int mid = l + r >> 1;a[mid] = num;dfs(l, mid-1, num+1);dfs(mid+1, r, num+1);
}int main(){int n;cin >> n;dfs(1, n, 1); set<int> s;for(int i = 1; i <= n; i++) s.insert(a[i]);cout << s.size() << endl;for(int i = 1; i <= n; i++) cout << a[i] << " ";return 0;
}
相关文章:
牛客周赛 Round 82(思维、差分、树状数组、大根堆、前后缀、递归)
文章目录 牛客周赛 Round 82(思维、差分、树状数组、大根堆、前后缀、递归)A. 夹心饼干B. C. 食堂大作战(思维)D. 小苯的排列计数(差分、树状数组)E. 和和(大根堆,前缀和)F. 怎么写线性SPJ &…...
MQTT实现智能家居------2、写MQTT程序的思路
举个最简单的例子: 手机------服务器-------家具 我们这里只看手机和家具的客户端: 手机:1)需要连接服务器 2)需要发布指令给服务器到家里的家具 3)接受来自于家里家具的异常状况 4)保持心…...
大模型面试问题准备
1. BERT的多头注意力为什么需要多头? 为了捕捉不同子空间的语义信息,每个头关注不同的方面,增强模型的表达能力 2. 什么是softmax上下溢出问题? 问题描述: 上溢出:ye^x中,如果x取非常大的正数…...
C语言:二维数组在内存中是怎么存储的
目录 1. 二维数组的定义: 2. 行主序存储: 具体内存排列: 3. 如何通过指针访问数据: 4. 总结: 在 C 语言中,二维数组是按 行主序(row-major order) 存储的。也就是说,…...
AI时代前端开发技能变革与ScriptEcho:拥抱AI,提升效率
在飞速发展的科技浪潮中,人工智能(AI)正以前所未有的速度改变着各个行业,前端开发领域也不例外。曾经被认为是核心竞争力的传统前端技能,例如精通HTML、CSS和JavaScript,其价值正在发生微妙的变化。 得益于…...
计算机毕业设计SpringBoot+Vue.js美容院管理系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【LeetCodehHot100_0x01】
LeetCodeHot100_0x01 1. 两数之和 解题思路: 暴力枚举法、哈希法 【暴力枚举】 class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length;for(int i0;i<n;i) {for(int ji1;j<n;j) {if(nums[i] nums[j] target) {return new in…...
Qt::MouseButtons解析
一 问题 今天想自定定义一个QMouseEvent变量,变量的的初始化参数有Qt::MouseButtons,这是个啥?查看类型为QFlags<Qt::MouseButton>。 二 Qt::MouseButton Qt::MouseButton 是 Qt 框架中定义的一个枚举类型(enum),用于表示鼠标事件中的物理按钮。它是 Qt 事件处理…...
跨域问题解释及前后端解决方案(SpringBoot)
一、问题引出 有时,控制台出现如下问题。 二、为什么会有跨域 2.1浏览器同源策略 浏览器的同源策略 ( Same-origin policy )是一种重要的安全机制,用于限制一个源( origin )的文档或 脚本如何与另一个源的资源进行…...
4-知识图谱的抽取与构建-4_2实体识别与分类
🌟 知识图谱的实体识别与分类🔥 🔍 什么是实体识别与分类? 实体识别(Entity Recognition)是从文本中提取出具体的事物,如人名、地名、组织名等。分类(Entity Classification&#x…...
腾讯云大模型知识引擎×DeepSeek赋能文旅
腾讯云大模型知识引擎DeepSeek赋能文旅 ——以合肥文旅为例的技术革新与实践路径 一、技术底座:知识引擎与DeepSeek的融合逻辑 腾讯云大模型知识引擎与DeepSeek模型的结合,本质上是**“知识库检索增强生成(RAG)实时联网能力”**…...
TMDS视频编解码算法
因为使用的是DDR进行传输,即双倍频率采样,故时钟只用是并行数据数据的5倍,而不是10倍。 TMDS算法流程: 视频编码TMDS算法流程实现: timescale 1 ps / 1ps //DVI编码通常用于视频传输,将并行数据转换为适合…...
C++程序员内功修炼——Linux C/C++编程技术汇总
在软件开发的宏大版图中,C 语言宛如一座巍峨的高山,吸引着无数开发者攀登探索。而 Linux 操作系统,以其开源、稳定、高效的特性,成为了众多开发者钟爱的开发平台。将 C 与 Linux 相结合,就如同为开发者配备了一把无坚不…...
【数据结构】链表中快指针和慢指针
目录 一、找出并返回链表的中间结点 二、输出链表中倒数第k个结点 三、判断链表中是否有环 四、两个单链表相交 一、找出并返回链表的中间结点 给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。 要求:只遍历…...
6_zookeeper集群配置
配置 一、配置myid文件 # 进入解压好的文件夹下面 touch myid vim myid # master节点写0,slave1节点写1,slave2节点写2二、配置zoo.cfg文件 1.在master节点编辑zookeeper配置文件 # 进入解压好的文件夹下面 cd conf/ cp zoo_sample.cfg zoo.cfg vim …...
Docker核心概念
容器介绍 Docker 是世界领先的软件容器平台,所以想要搞懂 Docker 的概念我们必须先从容器开始说起。 什么是容器? 先来看看容器较为官方的解释 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量…...
LD_PRELOAD 绕过 disable_function 学习
借助这位师傅的文章来学习通过LD_PRELOAD来绕过disable_function的原理 【PHP绕过】LD_PRELOAD bypass disable_functions_phpid绕过-CSDN博客 感谢这位师傅的贡献 介绍 静态链接: (1)举个情景来帮助理解: 假设你要搬家&#x…...
如何用JAVA实现布隆过滤器?
目录 引言 布隆过滤器的原理 1. 核心思想 2. 优缺点 布隆过滤器的使用场景 Java 实现布隆过滤器 1. 实现步骤 2. 代码实现 3. 代码说明 4. 测试结果 布隆过滤器的优化 总结 引言 布隆过滤器(Bloom Filter)是一种高效的概率数据结构࿰…...
游戏开发 游戏开始界面
目录 前言 一 游戏初始化界面的分析 二 游戏的大概框架 三 显示界面的开发 四 完整代码 总结 我们可以来看看游戏初始界面是什么样的 勇士游戏样例 前言 这里是开发游戏的初始界面 一 游戏初始化界面的分析 我们需要一个背景图,开始游戏图标࿰…...
Python解析 Flink Job 依赖的checkpoint 路径
引言 Apache Flink 是一个强大的分布式处理框架,广泛用于批处理和流处理任务。其 checkpoint 机制是确保容错的关键功能,允许在计算过程中保存状态,以便在故障时从最近的 checkpoint 恢复。本文详细探讨了一个 Python 脚本,该脚本…...
实时代码演化追踪系统搭建实录:从零部署可审计的生成-变更-归因链路(含开源工具链v2.3配置清单)
第一章:智能代码生成与代码演化分析 2026奇点智能技术大会(https://ml-summit.org) 现代软件开发正经历从“人工编写主导”向“人机协同演进”的范式迁移。智能代码生成不再局限于补全单行语句,而是深度融入代码生命周期——从初始原型生成、API契约推…...
MPU6050 DMP库移植踩坑全记录:从I2C通信失败到欧拉角飘移的解决方案
MPU6050 DMP库移植实战:从硬件调试到数据优化的完整解决方案 1. 硬件连接与I2C通信问题排查 移植MPU6050 DMP库时,硬件连接问题往往是最先遇到的障碍。许多开发者习惯直接复制原理图,却忽略了几个关键细节: 上拉电阻配置误区 I…...
B站字幕下载终极指南:3分钟学会免费提取CC字幕的完整方法
B站字幕下载终极指南:3分钟学会免费提取CC字幕的完整方法 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 还在为无法保存B站视频字幕而烦恼吗…...
Hermes Agent + RAG知识库:5分钟搭建AI智能问答系统(教程)
前言:为什么你的AI总在"胡说八道"? 你有没有遇到过这种情况: “问AI我们公司年假有几天,它瞎编一个答案” “问AI产品退换货流程,它说的和官网完全不一样” 这不是AI的错,是AI不知道你的企业内…...
Smithbox深度解析:从游戏修改新手到资深创作者的蜕变之路
Smithbox深度解析:从游戏修改新手到资深创作者的蜕变之路 【免费下载链接】Smithbox Smithbox is a modding tool for Elden Ring, Armored Core VI, Sekiro, Dark Souls 3, Dark Souls 2, Dark Souls, Bloodborne and Demons Souls. 项目地址: https://gitcode.c…...
3步快速上手:Unlock Music 让你轻松解密任何加密音乐文件
3步快速上手:Unlock Music 让你轻松解密任何加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: ht…...
5分钟学会音频解锁:如何快速解密任何加密音乐文件
5分钟学会音频解锁:如何快速解密任何加密音乐文件 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://g…...
从SD卡分区到上电启动:详解Exynos 4412开发板的完整启动流程与手动烧写
从SD卡分区到上电启动:详解Exynos 4412开发板的完整启动流程与手动烧写 当一块搭载Exynos 4412的开发板首次通电时,芯片内部会执行一系列精密编排的启动流程。这个看似瞬间完成的过程,实际上包含了从硬件初始化到操作系统加载的多个关键阶段。…...
从杂乱到洞察:手把手教你用Gephi的‘统计’与‘过滤’功能深挖网络数据
从杂乱到洞察:手把手教你用Gephi的‘统计’与‘过滤’功能深挖网络数据 当你第一次打开Gephi,面对密密麻麻的节点和连线,是否感到无从下手?网络数据可视化不仅仅是绘制漂亮的图形,更重要的是从中提取有价值的业务洞察。…...
Android系统开发深度解析:从驱动到优化与物联网应用
引言 在移动操作系统领域,Android凭借其开源性和灵活性,已成为全球主流平台。随着技术发展,Android开发衍生出多个专业角色,包括驱动开发、性能优化、BSP开发和物联网应用开发等。这些职位共同支撑着Android生态系统的稳定性和高效性。本文将从技术角度,系统解析Android驱…...
