[luogu12541] [APIO2025] Hack! - 交互 - 构造 - 数论 - BSGS
传送门:https://www.luogu.com.cn/problem/P12541
题目大意:有一个数 n n n,你不知道是多少;你每次可以向交互库询问一个正整数集合 A A A(其中元素互不相同),交互库返回:将集合中的数对 n n n 取模后,有多少对数是相同的。也就是 ∑ 1 ≤ i < j ≤ ∣ A ∣ [ A i ≡ A j ( m o d n ) ] \sum_{1 \le i < j \le |A|}[A_i \equiv A_j \pmod n] ∑1≤i<j≤∣A∣[Ai≡Aj(modn)]。你要通过若干次询问求出 n n n。
数据范围: n ≠ 10 9 n \ne 10^9 n=109,询问的开销是集合大小,要求总开销不超过 110000 110000 110000。
前两档部分分的做法很多,我们直接跳过部分分来看正解。
首先考虑这样一件事:假设我们得到了某一对数 ( x , y ) (x,y) (x,y) 是冲突的,这意味着什么?
两数冲突意味着两数对 n n n 取模的值相同,也就是说两数之差是 n n n 的倍数,换句话说 n n n 一定是两数之差 w = ∣ x − y ∣ w=|x-y| w=∣x−y∣ 的因数。
因此我们只需要直接检查所有 w w w 的因子即可,比较聪明的检查方法是考虑质因数分解 w = ∏ i p i c i w=\prod_i p_i^{c_i} w=∏ipici,然后对每个指数 c i c_i ci 进行二分。这一部分的开销显然是很小的,所以我们只需要设法找到一对冲突的 ( x , y ) (x,y) (x,y) 即可。
现在假设我们已经得到了一个存在冲突的集合 A A A,如何从中具体找到哪两个数冲突?这里就要用到这类交互题常见的二分技巧:
- 将集合 A A A 划分为两个子集 S , T S, T S,T,分别对每个子集单独检验。如果某个子集内部已经有冲突了,就把问题规模缩小了一半;否则冲突一定发生在 S S S 和 T T T 之间。
- 再将 S , T S, T S,T 分别划分为 S 1 , S 2 , T 1 , T 2 S_1, S_2, T_1, T_2 S1,S2,T1,T2,然后先查询 S 1 ∪ T S_1\cup T S1∪T,如果有冲突就保留 S 1 S_1 S1,否则保留 S 2 S_2 S2;再查询 S ∗ ∪ T 1 S_*\cup T_1 S∗∪T1 ( S ∗ S_* S∗ 是上一步中保留的部分)如果有冲突就保留 T 1 T_1 T1,否则保留 T 2 T_2 T2。
- 这样通过两次查询就将 S S S 和 T T T 的规模都缩小了一半,开销为 ∣ S ∣ + 1.5 ∣ T ∣ |S|+1.5|T| ∣S∣+1.5∣T∣。基于等比数列求和可知,整个二分过程的总开销为 2 ∣ S ∣ + 3 ∣ T ∣ 2|S|+3|T| 2∣S∣+3∣T∣。但请注意这没有包含最开始检验 A A A 集合存在冲突,以及检验 S S S 和 T T T 内部是否有冲突的开销;如果 S S S 或 T T T 内部确实存在冲突,得到的总开销将有所减小。
总之,花费 O ( ∣ A ∣ ) O(|A|) O(∣A∣) 的开销就可以找到一对冲突的数。设 N = 10 9 N=10^9 N=109 为 n n n 的最大范围,根据题目允许的查询开销,我们需要找到一个大小约为 O ( N ) O(\sqrt{N}) O(N) 且存在冲突的初始集合 A A A。
一种容易想到的方案是基于生日悖论:随机选取 Θ ( n ) \Theta(\sqrt{n}) Θ(n) 个 1 ∼ n 1\sim n 1∼n 范围内的数,则有较大概率会出现相同的数。这里我们可以直接在 10 18 10^{18} 1018 范围内随机选取一组数,那么它们对 n n n 取模的值也大致是在 0 ∼ n − 1 0\sim n-1 0∼n−1 范围内均匀随机的,当集合足够大时就很有可能出现冲突。
但由于要精确分析总开销,需要合理估计使用的集合大小。设 ∣ A ∣ = c N |A|=c\sqrt{N} ∣A∣=cN,则可以不严谨地估计出没有发生冲突的概率大约为 ( 1 e ) c 2 2 (\frac{1}{e})^\frac{c^2}{2} (e1)2c2。考虑到评分规则看的是最坏情况,一种方案是选一个较小的 c c c,然后如果没有冲突就重新随机;或者是选一个足够大的 c c c 然后自信宣称里面一定存在冲突,直接免去检查 A A A 这一步(OI 赛制下会比较冒险)。但无论如何整个过程都比较看脸,最终得到的最大开销大约会在 4 × 10 5 4\times10^5 4×105 这个级别,只能获得不超过 50 50 50 分。
如何做到更优?我们希望免去这样的随机,直接得到一个确定性的存在冲突的集合 A A A;更进一步如果能直接给出 S S S 和 T T T,使得它们各自内部没有冲突(或很容易检验)而二者之间一定存在冲突,就可以再减少一步检验的开销,只剩下 2 ∣ S ∣ + 3 ∣ T ∣ 2|S|+3|T| 2∣S∣+3∣T∣ 的二分开销。
容易看出,我们实际上只需要让每个 i ∈ { 1 , . . . , N } i\in \{1,...,N\} i∈{1,...,N},都存在 s ∈ S , t ∈ T s\in S, t \in T s∈S,t∈T 使得 ∣ s − t ∣ = i |s-t|=i ∣s−t∣=i 即可。更进一步可以把上述 i i i 的范围改成 { N 2 + 1 , . . . , N } \{\frac{N}{2} + 1,...,N\} {2N+1,...,N} 即可,因为不超过 N 2 \frac{N}{2} 2N 的数的某个倍数一定都涵盖在内了。
熟悉数论的小伙伴可能已经想到,数论中的大步小步(BSGS)算法本质上就是在做类似的事。具体而言,构造 S = { 1 , 2 , . . . , p } , T = { N 2 + p , N 2 + 2 p , . . . , N 2 + p q } S=\{1,2,...,p\}, T=\{\frac{N}{2}+p,\frac{N}{2}+2p,...,\frac{N}{2}+pq\} S={1,2,...,p},T={2N+p,2N+2p,...,2N+pq},满足 p q > N 2 pq > \frac{N}{2} pq>2N 即可。容易验证这样的构造满足要求。
然后如何检查 S S S 和 T T T 各自内部是否有冲突?注意到 S S S 和 T T T 都是等差数列,其实就是相当于把问题转化成了“查询 n n n 是否不超过某个 N ′ N' N′”的子问题,只不过这个 N ′ N' N′ 比原问题要小得多,只有 O ( N ) O(\sqrt{N}) O(N) 级别。我们可以再套一层 BSGS 来解决:以检查 S S S 为例,直接查询 { 1 , 2 , . . . , p ′ , p 2 + p ′ , p 2 + 2 p ′ , . . . , p 2 + p ′ q ′ } \{1,2,...,p', \frac{p}{2} + p', \frac{p}{2} + 2p', ..., \frac{p}{2} + p'q'\} {1,2,...,p′,2p+p′,2p+2p′,...,2p+p′q′} 即可,至于 T T T 其实就是把检查的数整体放大 p p p 倍而已。
如果 S S S 和 T T T 内部没有冲突,按照之前的二分流程跑就行;如果有冲突,考虑到 S S S 和 T T T 都不大且呈等差数列,可以直接按类似 { 1 , 2 } , { 1 , 3 } , . . . , { 1 , p } \{1,2\}, \{1,3\}, ..., \{1,p\} {1,2},{1,3},...,{1,p} 检查过去,开销比无冲突时正常做二分的流程小得多,就不考虑了。
分析一下目前的总开销:首先是二分的主流程,需要确定 p , q p,q p,q 的大小,使得 p q > 5 × 10 8 pq>5\times 10^8 pq>5×108,开销为 2 p + 3 q 2p+3q 2p+3q;然后是对 S S S 和 T T T 内部的开销,只需要取 p ′ = q ′ = p 2 p'=q'=\sqrt\frac{p}{2} p′=q′=2p(或 q 2 \sqrt\frac{q}{2} 2q),这一步的开销是 2 p 2 + 2 q 2 2\sqrt\frac{p}{2}+2\sqrt\frac{q}{2} 22p+22q。
最后是得到一对冲突的数之后检查因子的开销:每次检查因子 w ′ w' w′ 其实就是查询 { 1 , w ′ + 1 } \{1, w'+1\} {1,w′+1} ,而 10 9 10^9 109 范围内检查因子的总开销最大的数是 901800900 = 2 2 × 3 2 × 5 2 × 7 2 × 11 2 × 13 2 901800900=2^2\times 3^2\times 5^2\times 7^2\times 11^2\times 13^2 901800900=22×32×52×72×112×132,总开销为 24 24 24。
写一个程序精确计算一下,发现当 p = 27512 , q = 18174 p=27512,q=18174 p=27512,q=18174 时,理论最大总开销……竟然刚好是精确的 110000 110000 110000!当然实际上这是在每次对于奇数的二分都恰好往大的一侧递归,且最终得到的 w w w 又刚好达到二分质因子的最大开销时才会发生,实际上不会同时达到,实测结果是在在 n = 768398400 n=768398400 n=768398400 时会达到最大值 109996 109996 109996。
当然有一个小优化可以让它变得不是那么紧:考虑二分时交换 S S S 和 T T T 集合的地位,这样开销就变成了 3 p + 2 q 3p+2q 3p+2q,这样算出来的 q q q 会比 p p p 大。再结合 S S S 和 T T T 本身的构造方式,容易发现每一个 S S S 中可能出现的两数之差,其倍数都出现在 T T T 中了。因此我们可以只对 T T T 集合进行检验。此时的精确结果为将上述 p p p 和 q q q 颠倒,理论次数上界为 109809 109809 109809,实际最大为 109805 109805 109805。
注意到上述做法实际上只利用了“集合有没有冲突”而没有利用“具体有多少对冲突”的信息,或许有办法利用这一信息进一步优化。你有更优的做法吗?欢迎讨论~
#include <bits/stdc++.h>
using namespace std;
#define li long long
#define vl vector<li>
#define pb push_back
#define pii pair<int,int>
#define vpi vector<pii>
#define mp make_pair
#define fi first
#define se second
const int N = 18174, M = 27512, Q1 = 118, Q2 = 117;
const int QQ = Q1 * Q2 * 2;
int cnt;
long long collisions(std::vector<long long> x);
bool query(vl x){cnt += x.size();return collisions(x) != 0;
}
bool chkQ(){vl A;A.clear();for(int i = 1;i <= Q1;++i) A.pb(i * N);for(int i = 1;i <= Q2;++i) A.pb((Q1 * Q2 + i * Q1 + 1) * N);return query(A);
}
bool chk2(vl A,vl B){vl x;x.clear();for(int i = 0;i < A.size();++i) x.pb(A[i]);for(int i = 0;i < B.size();++i) x.pb(B[i]);return query(x);
}
int work(vl A,vl B){if(A.size() == 1 && B.size() == 1) return abs(A[0] - B[0]);if(A.size() < B.size()) swap(A,B);vl A1,A2;A1.clear();A2.clear();int nn = A.size() >> 1;for(int i = 0;i < A.size();++i){if(i < nn) A1.pb(A[i]);else A2.pb(A[i]);}if(chk2(A1,B)) return work(A1,B);return work(A2,B);
}
bool chk_vpi(vpi x){int a = 1;for(int i = 0;i < x.size();++i){for(int j = 1;j <= x[i].se;++j) a *= x[i].fi;}return query({1,a + 1});
}
int final_chk(int x){int y = x;vpi pi;pi.clear();for(int i = 2;i * i <= y;++i) if(y % i == 0){pi.pb(mp(i,0));while(y % i == 0){++pi[pi.size() - 1].se;y /= i;}}if(y > 1) pi.pb(mp(y,1));for(int i = 0;i < pi.size();++i){int l = 0,r = pi[i].se - 1,mid,ans = pi[i].se;while(l <= r){mid = (l + r) >> 1;pi[i].se = mid;if(chk_vpi(pi)){ans = mid;r = mid - 1;}else l = mid + 1;}pi[i].se = ans;}int a = 1;for(int i = 0;i < pi.size();++i){for(int j = 1;j <= pi[i].se;++j) a *= pi[i].fi;}return a;
}
int hack(){cnt = 0;if(chkQ()){for(int i = 1;i <= QQ;++i){if(query({1,i * N + 1})) return final_chk(i * N);}return -1; // unreachable}vl A,B;A.clear();B.clear();for(int i = 1;i <= N;++i) A.pb(i);for(int i = 1;i <= M;++i) B.pb(N * M + i * N + 1);return work(A,B);
}
相关文章:
[luogu12541] [APIO2025] Hack! - 交互 - 构造 - 数论 - BSGS
传送门:https://www.luogu.com.cn/problem/P12541 题目大意:有一个数 n n n,你不知道是多少;你每次可以向交互库询问一个正整数集合 A A A(其中元素互不相同),交互库返回:将集合中…...
openjdk底层(hotspot)汇编指令调用(五)——内存访问
根据前面关于aarch64架构下的编码解释可知,在src\hotspot\cpu\架构文件夹下, assembler_xx.hpp assembler_xx.cpp register_xx.hpp register_xx.cpp register_definitions_xx.cpp这些文件是有关寄存器定义以及汇编编码函数实现的文件。 对于前述的ope…...
几款常用的虚拟串口模拟器
几款常用的虚拟串口模拟器(Virtual Serial Port Emulator),适用于 Windows 系统,可用于开发和调试串口通信应用: 1. com0com (开源免费) 特点: 完全开源免费,无功能限制。 可创建多个虚拟串口…...
ChimeraX介绍
UCSF ChimeraX 是一款由美国加州大学旧金山分校(UCSF)开发的下一代分子可视化软件,是经典的 UCSF Chimera 的继任者。它集成了强大的分子结构可视化、分析、建模和动画功能,广泛应用于结构生物学、药物设计、分子建模等领域。 1. 下载安装: Download UCSF ChimeraX 2. …...
【Linux】初见,基础指令
前言 本文将讲解Linux中最基础的东西-----指令,带大家了解一下Linux中有哪些基础指令,分别有什么作用。 本文中的指令和选项并不全,只介绍较为常用的 pwd指令 语法:pwd 功能:显示当前所在位置(路径…...
链表的面试题8之环形链表
许久不见,那么这是最后倒数第三题了,这道题我们来看一下环形链表。 老规矩贴链接:141. 环形链表 - 力扣(LeetCode) 目录 倒数第k个元素 获取中间元素的问题。 双指针 来,大致看一下题目,这…...
OBS Studio:windows免费开源的直播与录屏软件
OBS Studio是一款免费、开源且跨平台的直播与录屏软件。其支持 Windows、macOS 和 Linux。OBS适用于,有直播需求的人群或录屏需求的人群。 Stars 数64,323Forks 数8413 主要特点 推流:OBS Studio 支持将视频实时推流至多个平台,如 YouTube、…...
邂逅Node.js
首先先要来学习一下nodejs的基础(和后端开发有联系的) 再然后的学习路线是学习npm,yarn,cnpm,npx,pnpm等包管理工具 然后进行模块化的使用,再去学习webpack和git(版本控制工具&…...
React 常见的陷阱之(如异步访问事件对象)
文章目录 前言1. 异步访问事件对象问题解决方案 2. 事件传播的误解**问题**解决方案 **3. 事件监听器未正确卸载****问题****解决方案** **4. 动态列表中的事件绑定****问题****解决方案** **5. 第三方库与 React 事件冲突****问题****解决方案** **6. 表单输入与受控组件****问…...
【LinkedList demo 内部类讲说】
LinkedList demo 内部类讲说 1. Node节点2.MyLinkedList3. LinkedListTest 测试类 1. Node节点 public class Node<T> {private Node<T> pre;private Node<T> next;private T data;public Node() {}public Node getPre() {return pre;}public void setPre(N…...
Sql刷题日志(day9)
一、笔试 1、limit offset:分页查询 SELECT column1, column2, ... FROM table_name LIMIT number_of_rows OFFSET start_row; --跳过前 start_row 行,返回接下来的 number_of_rows 行。 2、lag、lead:查询前后行数据 --lag函数用于访问当…...
46 python pandas
Pandas是Python数据分析的利器,也是各种数据建模的标准工具 一、什么是pandas pandas 是 Python 中用于数据处理和分析的核心库,提供了高效的数据结构(如Series和DataFrame)和数据操作工具,广泛应用于数据清洗、分析、可视化等场景。 最常用的是用来处理excel数据。 二…...
告别延迟!Ethernetip转modbustcp网关在熔炼车间监控的极速时代
熔炼车间热火朝天,巨大的热风炉发出隆隆的轰鸣声,我作为一名技术操控工,正密切关注着监控系统上跳动的各项参数。这套基于EtherNET/ip的监控系统,是我们车间数字化改造的核心,它将原本分散的控制单元整合在一起&#x…...
Prompt Tuning:高效微调大模型的新利器
Prompt Tuning(提示调优)是什么 Prompt Tuning(提示调优) 是大模型参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)的重要技术之一,其核心思想是通过优化 连续的提示向量(而非整个模型参数)来适配特定任务。以下是关于 Prompt Tuning 的详细解析: 一、核心概念…...
⼆叉搜索树详解
1. ⼆叉搜索树的概念 ⼆叉搜索树⼜称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树: • 若它的左⼦树不为空,则左⼦树上所有结点的值都⼩于等于根结点的值 • 若它的右⼦树不为空,则右⼦树上所有结点的值都⼤于等于根结…...
CompleteableFuture的异步任务编排
为什么会有CompleteableFuture Java 的 1.5 版本引入了 Future,可以把它简单的理解为运算结果的占位符, 它提供了两个方法来获取运算结果。 get():调用该方法线程将会无限期等待运算结果。get(longmeout, TimeUnit unit):调用该…...
珈和科技贺李德仁院士荣膺国际数字地球学会会士:以时空智能赋能可持续发展目标 绘就数字地球未来蓝图
4月22日,第十四届国际数字地球会议在重庆盛大启幕。在这场在全球范围内数字地球领域具有国际影响力的学术盛会上,国际数字地球学会向珈和科技的企业顾问,2023年度国家最高科学技术奖得主李德仁院士授予了“国际数字地球学会会士”最高荣誉称号…...
【CodeBuddy 】从0到1,打造一个“牛马打鸡血仪”
【CodeBuddy 】从0到1,打造一个“牛马打鸡血仪” 我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 🌟嗨,我是LucianaiB&#…...
BI是什么意思?一文讲清BI的概念与应用!
目录 一、BI 是什么意思 1. BI 的定义 2. BI 的发展历程 3. BI 的核心组件 二、BI 的应用场景 1. 销售与市场营销 2. 财务管理 编辑3. 人力资源管理 4. 生产与运营管理 编辑三、选择合适的 BI 工具 1. 考虑企业的需求和规模 2. 评估工具的功能和性能 3. 关注工…...
可编辑PPT | 华为安全架构设计方法指南华为数字化转型架构解决方案
这份文档是华为的安全架构设计方法指南,它详细介绍了安全架构设计的重要性、方法和流程。文档强调安全架构是软件研发技术体系中的关键DFX能力,与可靠性、性能等并列,尤其在云计算和复杂网络环境下,安全性设计显得尤为重要。华为的…...
1.6 提示词工程(二)
目录 3.2 提供参考文本 3.2.1 使用参考文本来构建答案 3.2.2 指导模型用引用的文本回答问题 3.3 把复杂的任务拆分成简单的子任务 3.3.1 利用意图分类确定与用户查询最相关的指令 3.3.2 针对需要长时间对话的应用程序,应概括或过滤之前的对话内容 …...
WIFI信号状态信息 CSI 深度学习之数据集
Building occupant activity sensing dataset based on WIFI CSI(WiSA) 所有的数据以及实验参数都上传到了figshare中并配备详细说明,供参考。 论文链接:WiSA: Privacy-enhanced WiFi-based activity intensity recognition in …...
基于服务器的 DPI 深度分析解决方案
一、传统网络流量分析的瓶颈与挑战 在企业网络管理体系中,传统流量分析模式高度依赖网络设备作为数据采集核心节点,无论是基于 NetFlow/IPFIX 等流协议的流量分析,还是通过端口镜像技术实现的流量监控,均以交换机、路由器等网络设…...
动态规划(5):线性动态规划
引言 所谓线性动态规划,通常指状态定义和转移具有线性结构的动态规划问题,其状态通常可以用一维数组表示,状态转移主要依赖于相邻或前面有限个状态。这类问题的特点是状态空间呈线性排列,每个状态只与有限个前置状态相关,使得问题结构相对简单,更容易理解和掌握。 一维…...
c语言- 如何构建CMake项目(Linux/VSCode)
目录 linux(vscode)构建C语言CMake项目 1. 检查linux是否下载cmake,否则执行下列代码 2. 在vscode下载cmake的插件CMake Tools 3. 构建项目(项目结构) 4. 进行cmake配置 1. 在VS Code中按下ctrl shift p键&…...
HJ17 坐标移动【牛客网】
文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 HJ17 坐标移动 一、题目描述 二、测试用例 三、解题思路 基本思路: 这题的难点在于理解题目和如何处理各种情况。题目是给定一串指令,首先要判断指令是否合法…...
HGHAC集群滚动扩展或更换硬盘设备
文章目录 环境文档用途详细信息 环境 系统平台:N/A 版本:4.5.8 文档用途 集群版本:hghac4.2.1 数据库版本:hgdb-see-4.5.8 此步骤适用于所有hac架构的hgdb集群。 主要用途:HAC集群服务器滚动扩展或更换硬盘 本文…...
虚拟环境中VSCode运行jupyter文件
用VS Code打开jupyter文件,点击右上角 Select Kernel 在正上方会出现这个选择框,选择 Python Environment 会出来所有的虚拟环境,选择要用的环境行...
【蓝桥杯嵌入式】【模块】六、PWM相关配置及代码模板
1. 前言 最近在准备16届的蓝桥杯嵌入式赛道的国赛,打算出一个系列的博客,记录STM32G431RBT6这块比赛用板上所有模块可能涉及到的所有考点,如果有错误或者遗漏欢迎各位大佬斧正。 本系列博客会分为以下两大类: 1.1. 单独模块的讲…...
力扣-盛最多水的容器
1.题目描述 2.题目链接 11. 盛最多水的容器 - 力扣(LeetCode) 3.题目解析 题目中的储水量两边差*短边高度。也就是说,两条边中,决定储水量的是短边的高度。 我们可以定义两个指针,一个在最左边,一个在…...
数据实时同步:inotify + rsync 实现数据实时同步
1 数据实时同步 在生产环境中,某些场景下,要将数据或文件进行实时同步,保证数据更新后其它节点能立即获得最新的数据。 数据同步的两种方式 PULL:拉,使用定时任务的方式配合同步命令或脚本等,从指定服务…...
C#学习第24天:程序集和部署
程序集知识点 1.程序集的基本概念 程序集是部署和版本控制的最小单位。它可以是可执行文件(.exe)或动态链接库(.dll)。包含元数据和清单(Manifest),描述程序集的内容和依赖关系。 2.程序集清单…...
mac .zshrc:1: command not found: 0 解决方案
nano ~/.zshrc 使用自带的nano命令打开文件,修改后 Ctrl X 然后输入y 然后回车即可保存成功 一般情况下,不是常用这个命令,除非是遇到有问题的文件,才用, 例如 遇到下面的问题 /Users/xxli/.zshrc:1: command no…...
学习设计模式《十》——代理模式
一、基础概念 代理模式的本质【控制对象访问】; 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问; 代理模式的功能:代理模式是通过创建一个代理对象,用这个代理对象去代表真实的对象;客户端得…...
RestFul操作ElasticSearch:索引与文档全攻略
RestFul方式操作ES 索引库操作 创建索引库 PUT /索引库名称 {"mappings":{"properties":{"字段名":{"type":"字段类型","analyzer":"分词器","index":"是否参与搜索(布尔值)"},…...
OpenCV 图像读取与显示
一、知识点: 1、读取图像 (1)、Mat imread( const String & filename, int flags IMREAD_COLOR_BGR ); (2)、返回值: Mat,返回读取的图像。 若读取图像失败,则返回一个空的对象,对象.empty()为true。 (3)、参数filename: String是…...
Django快速入门篇
Django官网 https://docs.djangoproject.com/zh-hans/4.2/ 官方介绍 官方版本 推荐LTS版本,python3.9/3.10 djongo 每两年会出一个LTS版本 关于环节djongo,conda直接安装即可 conda create -n myenv python3.9 conda activate myenv pip install dj…...
C++23 新增扁平化关联容器详解
文章目录 一、引言已有关联容器回顾新容器的引入原因 二、std::flat_set定义与特性代码示例适用场景 三、std::flat_multiset定义与特性代码示例适用场景 四、std::flat_map定义与特性代码示例适用场景 五、std::flat_multimap定义与特性代码示例适用场景 六、与其他容器的比较…...
当PLC遇上电焊机器人:EtherCAT转CANopen上演工业级“语言翻译官”
在汽车自动化产线中,PLC与电焊机器人的高效协同是提升生产效率的关键。但PLC常用的EtherCAT协议与电焊机器人采用的CANopen协议存在通信壁垒,JH-ECT009疆鸿智能EtherCAT转CANopen技术成为打破这一障碍的核心方案。 应用拓扑图 EtherCAT是高速工业以太网协…...
LeetCode 1345. 跳跃游戏 IV(困难)
题目描述 给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0)。 每一步,你可以从下标 i 跳到下标 i 1 、i - 1 或者 j : i 1 需满足:i 1 < arr.lengthi - 1 需满足:i - 1 …...
Linux bash shell的循环命令for、while和until
1、for命令 for命令,允许你创建一个遍历一系列值的循环,每次迭代都使用其中一个 值来执行已定义好的一组命令。 for var in list do commands done # 在list参数中,你需要提供迭代中要用到的一系列值。 # 可以通过几种不同的方法指定列表中的…...
三、【数据建模篇】:用 Django Models 构建测试平台核心数据
【数据建模篇】:用 Django Models 构建测试平台核心数据 前言我们要设计哪些核心数据?准备工作:创建 Django App开始设计数据模型 (Models)1. 通用基础模型 (可选但推荐)2. 项目模型 (Project)3. 模块模型 (Module)4. 测试用例模型 (TestCase…...
Mac如何允许安装任何来源软件?
打开系统偏好设置-安全性与隐私,点击右下角的解锁按钮,选择允许从任何来源。 如果没有这一选项,请到打开终端,输入命令行:sudo spctl --master-disable, 输入命令后回车,输入电脑的开机密码后回车。 返回“…...
云原生主要架构模式
云原生(Cloud Native)是一种利用云计算的优势来构建和运行可扩展、弹性和高效应用程序的方法。它不仅仅是技术的集合,更是一种架构和设计理念。本文将围绕你提出的几部分,深入探讨云原生主要的架构模式,帮助你理解如何利用这些模式构建现代化的应用。 1. 服务化架构模式(…...
Neon数据库:让Postgres更智能的选择!
Neon:革新的Serverless PostgreSQL解决方案 在当今快速发展的技术世界,数据库的效率和灵活性成为众多开发者关注的重中之重。Neon,以其独特的serverless架构,正引领着这一变革。本文将深入探讨Neon的独特构架、应用场景以及具体的…...
《Metasploit框架核心模块解析与安全防护实践》
目录 一、框架模块化设计与安全验证价值 1. 漏洞验证模块(Exploit Modules) 2. 安全评估模块(Auxiliary Modules) 3. 安全响应模块(Post-Exploitation) 4. 载荷安全…...
C#:多线程Task使用
一.Task与Thread Task是架构在Thread之上的,也就是说任务最终还是要抛给线程去执行。Task跟Thread不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务有点类似线程池,但是任务相比线程池有很小的开销和精确的控制。…...
Nginx笔记
一、概述 Nginx一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个电子邮件代理服务器。正向代理服务的是客户端(比如VPN),反向代理服务的是服务端。Nginx是多进程的,有一个Master进程控制多个Worke…...
小米便签源码部署流程
一、准备环境 1. 安装必要工具 Android Studio:最新稳定版(需支持 Kotlin 和 Jetpack Compose)。 JDK:建议 JDK 11 或更高(通过 sdkman 或 brew 安装)。 Git:用于克隆源码。 2. 配置国内镜像源&…...
DAY 30 超大力王爱学Python
知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 步骤 1:创建项目结构 …...