当前位置: 首页 > news >正文

牛客周赛 Round 77 题解

文章目录

    • A-时间表
    • B-数独数组
    • D-隐匿社交网络
    • E-1or0

A-时间表

签到题

#include <bits/stdc++.h>
using namespace std;int main()
{int a[6] = {20250121,20250123,20250126,20250206,20250208,20250211};int n; cin >> n;cout << a[n - 1];return 0;
}

B-数独数组

想法:1~9每个数字的个数都在 [ n / 9 , ( n + 8 ) / 9 ] [n / 9, (n + 8) /9] [n/9,(n+8)/9]这个区间范围内,因为满足这个条件,通过排序肯定可以生成一个数独数组。

#include <bits/stdc++.h>
using namespace std;const int N = 1e5 + 10;int a[10];int main()
{int n; cin >> n;for(int i = 0; i < n; i ++ ){int x; cin >> x;a[x] ++;}for(int i = 1; i <= 9; i ++ )if(a[i] < n / 9 || a[i] > (n + 8) / 9){cout << "NO";return 0;}cout << "YES";return 0;
}

C-小红走网格

想法:a, b, c, d分别表示上下左右四个方向的移动距离,目标是从(0, 0)到(x, y),我们可以把他们抽象到两个方程去求解,分别是 k 1 ∗ a + k 2 ∗ b = y k1*a + k2*b=y k1a+k2b=y k 3 ∗ c + k 4 ∗ d = x k3*c+k4*d=x k3c+k4d=x,这就是线性同余算法,也就是若y可以被a和b的最大公约数整除,那么y就一定通过a和b两个数字构造出来,x也是同理。

#include <bits/stdc++.h>
using namespace std;const int N = 1e5 + 10;int x, y, a[4];void solve(){cin >> x >> y;for(int i = 0; i < 4; i ++ )cin >> a[i];int g1 = __gcd(a[0], a[1]), g3 = __gcd(a[2], a[3]);if(x % g3 == 0 && y % g1 == 0)cout << "YES";else cout << "NO";cout << endl;return ;
}int main()
{int _; cin >> _;while(_ --){solve();}return 0;
}

D-隐匿社交网络

想法:将每个表示权重的数看成二进制表示形式,如果i和j在同一个社交网络即 ( w i and ⁡ w j ) ≧ 1 (w_i \operatorname{and} w_j) \geqq 1 (wiandwj)1,那么这个权重一定在二进制的某一个位上有着相同的1(与运算全1出1,有0出0),因此可以使用并查集来维护这个有着二进制位同为1的集合,就是如果这个两个数可以在同一个社交网络,那么这个两个数所在的两个集合也可在同一个社交网络。

#include <bits/stdc++.h>
#define ll long long
using namespace std;const int N =  100100;ll n, w[N], p[N];int find(ll x){if(p[x] != x)return p[x] = find(p[x]);return x;
}void solve(){cin >> n;for(int i = 0; i <= n + 64; i ++ ) p[i] = i;for(int i = 1; i <= n; i ++ ){cin >> w[i];for(int j = 0; j <= 61; j ++ )if(w[i] >> j & 1){int wf = find(i);int jf = find(n + j + 1);if(wf != jf)p[wf] = jf;}}map<int, int> cnt;int ans = 0;for(int i = 1; i <= n; i ++ ){int f = find(p[i]);cnt[f] ++;ans = max(ans, cnt[f]);}cout << ans << endl;return ;
}int main(){int _;cin >> _;while(_ -- ){solve();}return 0;
}

E-1or0

核心思路:区间 [ l , r ] [l, r] [l,r],用子串的总个数 - 连续都是0的子串个数。

想法:首先或运算的性质是有1出1,全0出0。我们假设字符串为0010010,子串的自审值为0的情况只有一种可能,那就是这个子串全是0,故此我们可以用【核心思路】来快速求自审值的和,因为自审值只可能是0或1,所以有字符1的子串的个数即为答案。

快速计算连续都是0的子串个数的方法有两种:

  • 线段树,维护四个值分别是:0子串的个数(sum), 前缀0的个数(left), 后缀0的个数(right), 当前区间的长度(len)。合并区间时会有四种情况。
    1. 左:0011, 右:1100,正常情况
    2. 左:0000, 右:0100,left, sum要特殊处理
    3. 左:0010, 右:0000,right, sum要特殊处理
    4. 左:0010: 右:0100,sum要特殊处理
  • 前缀和, 例如00110010011000这是要求的区间,原字符串为00000110010011000000,要注意前缀0和后缀0的处理,去除前缀0和后缀0的中间部分,可以用前缀和来直接计算。
// 线段树解法
#include <bits/stdc++.h>
#define int long long
using namespace std;const int N =  200010;int n, q;
string s;struct Info{int l, r;int sum, left, right, len;
}tr[4*N];void merge(Info& res, Info l, Info r){
//     res.l = l.l; res.r = r.r;res.sum = l.sum + r.sum + l.right * r.left;res.len = l.len + r.len;res.left = l.left;res.right = r.right;if(l.left == l.len) res.left += r.left;if(r.right == r.len) res.right += l.right;
}// 合并操作
void pushUp(int u)
{merge(tr[u], tr[u << 1], tr[u << 1 | 1]);
}// 线段树初始化
void build(int u, int l, int r)
{tr[u].l=l, tr[u].r=r, tr[u].len = 1;if(l==r) return ;int mid=l+r>>1;build(u<<1, l, mid); build(u<<1|1, mid+1, r);
}// 查询
Info query(int u, int l, int r)
{if(tr[u].l>=l&&tr[u].r<=r) return tr[u];int mid=tr[u].l+tr[u].r>>1;Info lson, rson;lson = rson = {0, 0, 0, 0, 0, 0};if(l <= mid){lson = query(u << 1, l, r);}if(r > mid){rson = query(u << 1 | 1, l, r);}Info res;merge(res, lson, rson);res.l = lson.l; res.r = rson.r;if(lson.l == 0) res.l = rson.l;if(rson.r == 0) res.r = lson.r;return res;
}// 修改
void modify(int u, int x, int v)
{if(tr[u].l==x&&tr[u].r==x) tr[u].sum=v, tr[u].left = v, tr[u].right = v;else{int mid=tr[u].l+tr[u].r>>1;if(x<=mid) modify(u<<1, x, v);else modify(u<<1|1, x, v);pushUp(u);}
}signed main(){cin >> n >> s;s = " " + s;build(1, 1, n);for(int i = 1; i <= n; i ++ )modify(1, i, (s[i] == '0'?1:0));/*l r累加(r - l + 1)公式就是(1 + r - l + 1) * (r - l + 1) / 2;计算出子串的个数连续子串0的个数子串的个数 - 连续子串0的个数 = 答案*/cin >> q;while(q -- ){int l, r;cin >> l >> r;int ans = (1LL + r - l + 1) * (r - l + 1LL) / 2;Info t = query(1, l, r);ans -= t.sum;cout << ans << endl;}return 0;
}
// 前缀和做法
#include <bits/stdc++.h>
#define ll long long
using namespace std;const int N =  200010;int n;
string s;
ll l[N], r[N];
ll p1[N], p2[N], p3[N];int main(){cin >> n >> s;s = " " + s;p1[0] = p2[n + 1] = p3[0] = 0;int t = 0;for(int i = 1; i <= n; i ++ ){p3[i] = (s[i] == '0') + p3[i - 1];if(s[i] == '0')l[i] = l[i - 1] + 1;else l[i] = 0;}for(int i = n; i >= 1; i -- ){p2[i] = l[i] + p2[i + 1];if(s[i] == '0')r[i] = r[i + 1] + 1;else r[i] = 0;}for(int i = 1; i <= n; i ++ )p1[i] = r[i] + p1[i - 1];int q; cin >> q;while(q -- ){int x, y;cin >> x >> y;ll len = y - x + 1;ll ans = (1 + len) * len / 2;int _x = x + r[x];int _y = y - l[y];if(_x <= _y){ans -= (1 + r[x]) * r[x] / 2;ans -= (1 + l[y]) * l[y] / 2;ans -= p1[_y] - p1[_x - 1];}else{ans = 0;}cout << ans << endl;}return 0;
}

F-计树

核心思路:启发式合并算法。

想法:分类讨论,有序的组合数量等于无序组合数量的两倍。

  1. 当前点是集合中的点时,它要为LCA,当且仅当另个点在它的子树中或者两个点分别在它的两个不同的子树中。
  2. 当前点不是集合中的点时,它要为LCA,当且仅当两个点分别在它的两个不同的子树中。
#include <bits/stdc++.h>
#define int long long
using namespace std;const int N = 100010, M = N * 2;int n;
int e[M], ne[M], h[N], idx;
int k, vis[N];
int cnt[N];void add(int a, int b){e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}int dfs(int u, int f){if(vis[u]) cnt[u] = 1;int s = 0, t = 0;for(int i = h[u]; ~i; i = ne[i]){int j = e[i];if(j == f) continue;int sons = dfs(j, u);t += sons * s; // 计算总的组合数量s += sons; // 计算有多少个集合中的点}cnt[u] += t * 2; // 有序的组合数量等于无序组合数量的两倍if(vis[u]){// 情况1,反之情况2cnt[u] += s * 2;s ++;}return s;
}signed main(){memset(h, -1, sizeof h);cin >> n;for(int i = 0; i < n - 1; i ++ ){int u, v;cin >> u >> v;add(u, v); add(v, u);}cin >> k;for(int i = 0; i < k; i ++ ){int x; cin >> x;vis[x] = 1;}dfs(1, 1);for(int i = 1; i <= n; i ++ )cout << cnt[i] << ' ';return 0;
}

相关文章:

牛客周赛 Round 77 题解

文章目录 A-时间表B-数独数组D-隐匿社交网络E-1or0 A-时间表 签到题 #include <bits/stdc.h> using namespace std;int main() {int a[6] {20250121,20250123,20250126,20250206,20250208,20250211};int n; cin >> n;cout << a[n - 1];return 0; }B-数独数…...

Mybatis配置文件详解

MyBatis通过XML或注解的方式将Java对象与数据库中的记录进行映射&#xff0c;极大地简化了数据访问层的开发。而在MyBatis的核心组成部分中&#xff0c;配置文件扮演着举足轻重的角色。它不仅定义了MyBatis的运行环境&#xff0c;还配置了数据源、事务管理、映射器等关键元素&a…...

《深度揭秘:TPU张量计算架构如何重塑深度学习运算》

在深度学习领域&#xff0c;计算性能始终是推动技术发展的关键因素。从传统CPU到GPU&#xff0c;再到如今大放异彩的TPU&#xff08;张量处理单元&#xff09;&#xff0c;每一次硬件架构的革新都为深度学习带来了质的飞跃。今天&#xff0c;就让我们深入探讨TPU的张量计算架构…...

Java基础知识总结(二十二)--List接口

List本身是Collection接口的子接口&#xff0c;具备了Collection的所有方法。现在学习List体系特有的共性方法&#xff0c;查阅方法发现List的特有方法都有索引&#xff0c;这是该集合最大的特点。 List&#xff1a;有序(元素存入集合的顺序和取出的顺序一致)&#xff0c;元素都…...

[STM32 - 野火] - - - 固件库学习笔记 - - -十二.基本定时器

一、定时器简介 STM32 中的定时器&#xff08;TIM&#xff0c;Timer&#xff09;是其最重要的外设之一&#xff0c;广泛用于时间管理、事件计数和控制等应用。 1.1 基本功能 定时功能&#xff1a;TIM定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中…...

算法随笔_27:最大宽度坡

上一篇:算法随笔_26: 按奇偶排序数组-CSDN博客 题目描述如下: 给定一个整数数组 nums&#xff0c;坡是元组 (i, j)&#xff0c;其中 i < j 且 nums[i] < nums[j]。这样的坡的宽度为 j - i。 找出 nums 中的坡的最大宽度&#xff0c;如果不存在&#xff0c;返回 0 。 …...

无公网IP 外网访问本地部署 llamafile 大语言模型

llamafile 是一种AI大模型部署&#xff08;或者说运行&#xff09;的方案&#xff0c;它的特点就是可以将模型和运行环境打包成一个独立的可执行文件&#xff0c;这样就简化了部署流程。用户只需要下载并执行该文件&#xff0c;无需安装运行环境或依赖库&#xff0c;这大大提高…...

使用PC版本剪映制作照片MV

目录 制作MV模板时长调整拖动边缘缩短法分割删除法变速法整体调整法 制作MV 导入音乐 导入歌词 点击歌词 和片头可以修改字体&#xff1a; 还可以给字幕添加动画效果&#xff1a; 导入照片&#xff0c;自动创建照片轨&#xff1a; 修改片头字幕&#xff1a;增加两条字幕轨&…...

搭建 docxify 静态博客教程

首先&#xff0c;安装 node 环境安装 docxify &#xff0c;参考官网&#xff1a;https://docsify.js.org/#/zh-cn/ npm i docsify-cli -g新建docs文件夹专门用来放文章&#xff0c;初始化命令 docsify init ./docs就会生成如下两个文件&#xff0c;index.html 入口文件&#…...

汽车OEMs一般出于什么目的来自定义Autosar CP一些内容

汽车OEMs在使用AUTOSAR CP(Classic Platform)协议时,可能会根据自身的特定需求对标准协议进行修改,形成自己的企业标准(企标)。这种修改通常是为了满足特定的硬件平台、功能需求、安全要求或优化性能。以下是一些常见的修改场景和例子: 1. 硬件平台适配 企业可能会根据…...

Vue.js Vuex 模块化管理

Vue.js Vuex 模块化管理 今天咱们来聊聊如何在 Vuex 中进行模块化管理。当你的 Vue.js 应用变得越来越庞大时&#xff0c;单一的状态管理可能会让人头疼。这时候&#xff0c;Vuex 的模块化功能就派上用场了。 为什么需要模块化&#xff1f; 想象一下&#xff0c;如果把所有的…...

分布式光纤应变监测是一种高精度、分布式的监测技术

一、土木工程领域 桥梁结构健康监测 主跨应变监测&#xff1a;在大跨度桥梁的主跨部分&#xff0c;如悬索桥的主缆、斜拉桥的斜拉索和主梁&#xff0c;分布式光纤应变传感器可以沿着这些关键结构部件进行铺设。通过实时监测应变情况&#xff0c;能够精确捕捉到车辆荷载、风荷…...

用Devc++与easyx一步一步做游戏[启动界面部分]-解决hover闪烁问题及优化

在之前的博文中《用Devc与easyx一步一步做游戏[启动界面部分]-之按钮制作》&#xff0c;我们利用Devc和easyx完成了游戏启动界面按钮的基本制作&#xff0c;实现了按钮的绘制以及鼠标悬停时的信息提示功能。然而&#xff0c;目前还存在一个问题&#xff0c;即鼠标移动时&#x…...

mysql 学习3 SQL语句--整体概述。SQL通用语法;DDL创建数据库,查看当前数据库是那个,删除数据库,使用数据库;查看当前数据库有哪些表

SQL通用语法 SQL语句分类 DDL data definition language : 用来创建数据库&#xff0c;创建表&#xff0c;创建表中的字段&#xff0c;创建索引。因此成为 数据定义语言 DML data manipulation language 有了数据库和表以及字段后&#xff0c;那么我们就需要给这个表中 添加数…...

【数据结构】_链表经典算法OJ:分割链表(力扣—中等)

目录 1. 题目描述及链接 2. 解题思路 2.1 思路1 2.2 思路2 2.3 思路3&#xff08;本题采取该解法&#xff09; 3. 题解程序 1. 题目描述及链接 题目链接&#xff1a;面试题 02.04. 分割链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你一个链表…...

k8s支持自定义field-selector spec.hostNetwork过滤

好久没写博客啦&#xff0c;年前写一个博客就算混过去啦&#x1f602; 写一个小功能&#xff0c;对于 Pod&#xff0c;在没有 label 的情况下&#xff0c;支持 --field-selector spec.hostNetwork 查询 Pod 是否为 hostNetwork 类型&#xff0c;只为了熟悉 APIServer 是如何构…...

ICSE‘25 LLM Assistance for Memory Safety

不知道从什么时候开始&#xff0c;各大技术社区&#xff0c;技术群聊流行着 “用Rust重写!” &#xff0c;放一张图(笑死… 这不, 随着大模型技术的流行&#xff0c;大家都在探索如何让大模型自动完成仓库级别(全程序)的代码重构&#xff0c;代码变换&#xff08;Refactor&…...

《十七》浏览器基础

浏览器&#xff1a;是安装在电脑里面的一个软件&#xff0c;能够将页面内容渲染出来呈现给用户查看&#xff0c;并让用户与网页进行交互。 常见的主流浏览器&#xff1a; 常见的主流浏览器有&#xff1a;Chrome、Safari、Firefox、Opera、Edge 等。 输入 URL&#xff0c;浏览…...

TikTok 推出了一款 IDE,用于快速构建 AI 应用

字节跳动(TikTok 的母公司)刚刚推出了一款名为 Trae 的新集成开发环境(IDE)。 Trae 基于 Visual Studio Code(VS Code)构建,继承了这个熟悉的平台,并加入了 AI 工具,帮助开发者更快、更轻松地构建应用——有时甚至无需编写任何代码。 如果你之前使用过 Cursor AI,T…...

阅读springboot源码 记录

关于 :: 双冒号 用stream的map简洁提取id&#xff0c;类似代码1 // 代码1 List<String> Ids list.stream().map(Student::getId).collect(Collectors.toList())// 代码2 List<String> Ids list.stream().map(use->{return use.getId(); }).collect(Collector…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...