Codeforces Round 959 (Div. 1 + Div. 2 ABCDEFG 题) 文字讲解+视频讲解
Problem A. Diverse Game
Statement
给定 n × m n\times m n×m 的矩形 a a a, a a a 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互不相同。求出 n × m n\times m n×m 的矩形 b b b, b b b 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互不相同,同时 a i , j ≠ b i , j a_{i,j}\ne b_{i,j} ai,j=bi,j。
Solution
注意到 a a a 如果拉长为一个序列,则是一个长为 n m nm nm 的排列。故,如果直接翻转 a a a,则长度为偶数的时候是可行的;长度为奇数的时候,中间的位置没变,只需将第一个位置与中间的位置交换即可。
Code
void solve() {int n, m, x;cin >> n >> m;std::vector<int> opt;for (int i = 1; i <= n * m; i ++) cin >> x, opt.push_back(x);if (n * m == 1) {cout << -1 << endl;return;}reverse(opt.begin(), opt.end());if (opt.size() & 1) swap(opt[0], opt[opt.size() / 2]);for (int i = 1; i <= n * m; i ++) {cout << opt[i - 1] << " ";if (i % m == 0) cout << endl;}
}
Problem B. Fun Game
Statement
给定一个长为 n n n 的二进制序列,接下来可以进行无限次操作:
- 选择 l , r l,r l,r,将 s i s_i si 变为 s i − l + 1 ⊕ s i s_{i-l+1}\oplus s_i si−l+1⊕si。
确定是否能从 s s s 序列变为 t t t 序列。
Solution
考察 s s s 中第一个出现 1 1 1 的位置,那么后面需要翻转的位置一定可以通过这个 1 1 1 来翻转状态。形式化的,若需要变换的位置为 i i i,第一次出现的位置为 j j j,则选择区间 l = i − j + 1 , r = i l=i-j+1,r=i l=i−j+1,r=i 即可在不改变其他位置的前提下(因为 j j j 前面全为 0 0 0),翻转 i i i 位置。最后 j j j 位置自己异或自己即可。
但是如果前面存在 i i i,使得 s i = 0 , t i = 1 s_i=0,t_i=1 si=0,ti=1,则必然不存在方案,输出 NO;反之输出 YES。
Code
void solve() {int n;string s, t;cin >> n >> s >> t;bool ok = 0;for (int i = 0; i < n; i ++) {if (s[i] == '0' && t[i] == '1') {cout << "NO" << endl;return;}if (s[i] == '1') {cout << "YES" << endl;return;}}cout << "YES" << endl;
}
Problem C. Hungry Games
Statement
给定长为 n n n 的序列 a a a 以及变量 g g g(初始为 0 0 0),选择 l , r l,r l,r,依次遍历 l ∼ r l\sim r l∼r 中的每一个数, g = g + a i g=g+a_i g=g+ai,若 g > x g>x g>x,则令 g = 0 g=0 g=0。问存在多少个 l , r l,r l,r 使得最终 g g g 的值不为 0 0 0。
Solution
考虑枚举每一个 l l l,那么第一个使得 g g g 变 0 0 0 的位置可以轻松通过二分得出(令其为 k k k),则 l ∼ k − 1 l\sim k-1 l∼k−1 的位置均可以作为右端点。那么 k + 1 ∼ n k+1\sim n k+1∼n 有哪些位置可以作为右端点呢?注意到 k k k 位置 g g g 变 0 0 0,即和 l ′ = k l'=k l′=k 时初始状态时相同的,也就是 l ′ = k l'=k l′=k 的所有可行的右端点, l l l 位置均可以。
故,列出转移方程: f l = f k + ( k − l ) f_l=f_k+(k-l) fl=fk+(k−l)。时间复杂度 O ( n log n ) O(n\log n) O(nlogn), log \log log 来源于找 k k k。
Code
void solve() {cin >> n >> x;for (int i = 1; i <= n; i ++)cin >> a[i], a[i] += a[i - 1];for (int i = n; i >= 1; i -- ) {int l = i, r = n, res = -1;while (l <= r) {int mid = l + r >> 1;if (a[mid] - a[i - 1] > x) r = mid - 1, res = mid;else l = mid + 1;}if (res == -1) dp[i] = n - i + 1;else dp[i] = dp[res + 1] + res - i;}int res = 0;for (int i = 1; i <= n; i ++) res += dp[i];cout << res << endl;for (int i = 1; i <= n; i ++) dp[i] = 0;
}
Problem D. Funny Game
Statement
给定 n n n 个点以及序列 a a a,接下来有若干次操作:
- 选择 u , v u,v u,v,其中 ∣ a u − a v ∣ |a_u-a_v| ∣au−av∣ 是 x x x 的倍数,连接 u , v u,v u,v。
通过进行 n − 1 n-1 n−1 次操作,是否能将 n n n 个点连接成为一棵树,是则输出方案。
Solution
观察 Observation
观察样例发现全部均是 YES,回想抽屉原理的一个应用即为证明存在性。
深入探究 Investigate Deeply
∣ a u − a v ∣ |a_u-a_v| ∣au−av∣ 是 x x x 的倍数等价于 a u ≡ a v ( m o d x ) a_u\equiv a_v\pmod x au≡av(modx),考虑倒序操作,则进行第 x x x 次操作前有 x + 1 x+1 x+1 个连通块,即可选的数有 x + 1 x+1 x+1 个,而对 x x x 取模后可行的数只有 x x x 个,通过抽屉原理,不管前面如何操作,此时必然有至少 1 1 1 组 a u ≡ a v ( m o d x ) a_u\equiv a_v\pmod x au≡av(modx),通过并查集找出即可。
综上所述,答案永远都是存在的!
Code
int find(int x) {if (par[x] != x) par[x] = find(par[x]);return par[x];
}
void solve() {cin >> n;for (int i = 1; i <= n; i ++ ) cin >> a[i];for (int i = 1; i <= n; i ++) par[i] = i;for (int i = n - 1; i >= 1; i --) {for (int j = 1; j <= n; j ++) pos[a[j] % i].push_back(j);for (int j = 0; j < n; j ++) {sort(pos[j].begin(), pos[j].end(), [&](int a, int b) { return find(a) < find(b); });if (pos[j].size() <= 1) continue;if (find(pos[j][0]) != find(pos[j].back())) {par[find(pos[j][0])] = find(pos[j].back());res.emplace_back(pos[j][0], pos[j].back());break;}}for (int j = 0; j < n; j ++) pos[j].clear();}reverse(res.begin(), res.end());cout << "YES" << endl;for (auto v : res) cout << v.fi << " " << v.se << endl;res.clear();
}
Problem E. Wooden Game
Statement
给定 k k k 棵树,第 i i i 棵树有 n i n_i ni 个节点,每次可以将任意一棵树的一个子树删除,最终的权值即为删除的子树的大小按位或和。
Solution
观察 Observation
简化:如果只有 1 1 1 棵树,则答案必为这棵树的大小。
证明:对于 x 1 + x 2 + ⋯ + x k = n x_1+x_2+\dots +x_k = n x1+x2+⋯+xk=n,则 x 1 ∣ x 2 ∣ … ∣ x k ≤ n x_1|x_2|\dots |x_k\le n x1∣x2∣…∣xk≤n。所以这说明对于一棵树,至多只存在一个子树给答案是有贡献的,而一棵树便是特殊情况,必然是这棵树的大小
深入探究 Investigate Deeply
从观察中得出,一棵树只有一个子树给答案是有贡献的,考察这棵子树的大小取值范围,由于可以不断地删除叶子节点取剩余部分,所以大小地取值范围为 [ 1 , n i ] [1,n_i] [1,ni]。
问题转化为给定 k k k 个变量 x x x,第 i i i 个变量的取值范围为 [ 1 , n i ] [1,n_i] [1,ni],求 max ( x 1 ∣ x 2 ∣ … ∣ x k ) \max(x_1|x_2|\dots |x_k) max(x1∣x2∣…∣xk)。故变为了二进制的问题,使用经典方式拆位,对于第 i i i 位:
-
如果存在大于等于 2 2 2 个 n j n_j nj 使得第 i i i 位为 1 1 1,则一个 n i n_i ni 将这一位变为 1 1 1,其余的只需这一位取 0 0 0,后面所有位取 1 1 1 即可。
-
如果存在恰好 1 1 1 个 n j n_j nj 使得第 i i i 位为 1 1 1,则只需将第 i i i 位变为 1 1 1 即可。
Code
void solve() {cin >> n;for (int i = 1; i <= n; i ++) {cin >> a[i];int x;for (int j = 2; j <= a[i]; j ++) cin >> x;}for (int i = 1; i <= n; i ++)for (int j = 0; j < 30; j ++) cnt[j] += (a[i] >> j & 1);int res = 0;for (int i = 30; i >= 0; i --) {if (cnt[i] >= 2) res |= ((1ll << i) - 1) | (1ll << i);else if (cnt[i] == 1) {res |= (1ll << i);}}cout << res << endl;for (int i = 0; i <= 30; i ++) cnt[i] = 0;
}
Problem F. Stardew Valley
Statement
给定 n n n 个点 m m m 条边的无向图,边权为 1 1 1 的边必须选,边权为 0 0 0 的边可选可不选。求该图上的一条欧拉回路(经过选过的边恰好 1 1 1 次)
Solution
观察 Observation
由于欧拉回路的判定方式为所有点的度数均为偶数,故问题转化为在选择边权为 1 1 1 的边,每个点的度数的奇偶性组成 01 01 01 序列。现在可以加入若干条边,使得两个端点的奇偶性可以异或 1 1 1。给出 1 1 1 种选择方案,将选出的边加入后跑欧拉回路即可解决问题。
深入探究 Investigate Deeply
上述问题与 ABC155F - Perils in Parallel 化为 1 1 1 道题,具体过程此处不再赘述。
聪明的人能看到事物之间的联系,更聪明的人能看到联系之间的联系。
Code
void add(int a, int b) {e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}
void dfs(int u) {st[u] = d[u], vis[u] = true;for (auto v : g[u]) {if (vis[v]) continue;dfs(v);st[u] ^= st[v];if (st[v]) add(u, v), add(v, u);}
}
void Euler_Path(int u) {for (int &i = h[u]; ~i;) {if (has[i]) { i = ne[i]; continue; }int j = e[i];has[i ^ 1] = true, i = ne[i], Euler_Path(j);}res.push(u);
}void solve() {cin >> n >> m;for (int i = 1; i <= n; i ++) h[i] = -1, vis[i] = 0, st[i] = 0, d[i] = 0, g[i].clear();while (m -- ) {int u, v, c;cin >> u >> v >> c;if (!c) g[u].emplace_back(v), g[v].emplace_back(u);else add(u, v), add(v, u), d[u] ^= 1, d[v] ^= 1;}for (int i = 1; i <= n; i ++)if (!vis[i]) {dfs(i);if (st[i]) {cout << "NO" << endl;return;}}Euler_Path(1);cout << "YES" << endl;cout << res.size() - 1 << endl;while (res.size()) cout << res.top() << " ", res.pop();cout << endl;
}
Problem G. Minecraft
Statement
给定目标 01 01 01 串 s s s 和 n n n 个 01 01 01 串 a i a_i ai,求出 01 01 01 串 x x x 使得 ∑ a i ⊕ x = s \sum a_i\oplus x=s ∑ai⊕x=s。 01 01 01 串的长度均为 k k k。
1 ≤ n , k ≤ 2 × 1 0 6 1\le n,k\le 2\times 10^6 1≤n,k≤2×106, 1 ≤ n ⋅ k ≤ 2 × 1 0 6 1\le n\cdot k\le 2\times 10^6 1≤n⋅k≤2×106
Solution
观察 Observation
二进制问题——拆位,考虑对于每一位与 s s s 匹配的方案,不过注意到存在加法,所以需要同时处理进位问题。对于第 i i i 位,这一位上填的 1 1 1 的个数不会超过 2 n 2n 2n,所以可以直接存储( 1 ≤ n ⋅ k ≤ 2 × 1 0 6 1\le n\cdot k\le 2\times 10^6 1≤n⋅k≤2×106)
深入探究 Investigate Deeply
令 f i , j f_{i,j} fi,j 表示前 i i i 位,第 i i i 位填了 j j j 个 1 1 1 是否可行。考虑转移:
{ f i , ⌊ j 2 ⌋ + c n t i ← f i + 1 , j ⌊ j 2 ⌋ + c n t i m o d 2 = s i f i , ⌊ j 2 ⌋ + n − c n t i ← f i + 1 , j ⌊ j 2 ⌋ + n − c n t i m o d 2 = s i \begin{cases} &f_{i,\lfloor\frac{j}{2}\rfloor+\mathrm{cnt}_i}\leftarrow f_{i+1,j} \qquad \lfloor\frac{j}{2}\rfloor+\mathrm{cnt}_i\bmod 2 = s_i\\ &f_{i,\lfloor\frac{j}{2}\rfloor+n-\mathrm{cnt}_i}\leftarrow f_{i+1,j}\qquad \lfloor\frac{j}{2}\rfloor+n-\mathrm{cnt}_i\bmod 2 = s_i \end{cases} {fi,⌊2j⌋+cnti←fi+1,j⌊2j⌋+cntimod2=sifi,⌊2j⌋+n−cnti←fi+1,j⌊2j⌋+n−cntimod2=si
第一种情况即为当前位 x x x 为 0 0 0,第二种情况为当前位 x x x 为 1 1 1。从 i + 1 i+1 i+1 转移过来的原因主要是要从低位向高位做(因为进位是从低位向高位的)。
Code
void solve() {int n, k;cin >> n >> k;char x;std::vector<int> s(k), cnt(k, 0);std::vector<vector<int>> a(n + 1, vector<int>(k)), dp(k, vector<int>(2 * n + 1, 0));std::vector<vector<array<int, 3>>> pre(k, vector<array<int, 3>>(2 * n + 1));for (int i = 0; i < k; i ++) cin >> x, s[i] = x & 1;for (int i = 1; i <= n; i ++) for (int j = 0; j < k; j ++) cin >> x, a[i][j] = x & 1, cnt[j] += a[i][j];if ((cnt[k - 1] & 1) == s[k - 1]) dp[k - 1][cnt[k - 1]] = 1;if ((n - cnt[k - 1] & 1) == s[k - 1]) dp[k - 1][n - cnt[k - 1]] = 1;for (int i = k - 2; i >= 0; i --)for (int j = 0; j <= 2 * n; j ++) {if (!dp[i + 1][j]) continue;int put1 = ((j >> 1) + cnt[i] & 1), put2 = ((j >> 1) + n - cnt[i] & 1);if (put1 == s[i]) dp[i][(j >> 1) + cnt[i]] |= dp[i + 1][j], pre[i][(j >> 1) + cnt[i]] = {i + 1, j, 0};if (put2 == s[i]) dp[i][(j >> 1) + n - cnt[i]] |= dp[i + 1][j], pre[i][(j >> 1) + n - cnt[i]] = {i + 1, j, 1};}if (!dp[0][s[0]]) cout << -1 << endl;else {PII lst = {0, s[0]};std::vector<int> res;while (lst.fi != k - 1) {res.push_back(pre[lst.fi][lst.se][2]);lst = {pre[lst.fi][lst.se][0], pre[lst.fi][lst.se][1]};}if (lst.se == cnt[k - 1]) res.push_back(0);else res.push_back(1);for (auto v : res) cout << v;cout << endl;}
}
视频讲解 Video Tutorial
Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2)(A ~ G 题讲解)
相关文章:
Codeforces Round 959 (Div. 1 + Div. 2 ABCDEFG 题) 文字讲解+视频讲解
Problem A. Diverse Game Statement 给定 n m n\times m nm 的矩形 a a a, a a a 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互不相同。求出 n m n\times m nm 的矩形 b b b, b b b 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互…...
WSL2 Centos7 Docker服务启动失败怎么办?
wsl 安装的CentOS7镜像,安装了Docker之后,发现用systemctl start docker 无法将docker启动起来。 解决办法 1、编辑文件 vim /usr/lib/systemd/system/docker.service将13行注释掉,然后在下面新增14行的内容。然后保存退出。 2、再次验证 可以发现,我们已经可以正常通过s…...
分布式锁-redisson锁重试和WatchDog机制
抢锁过程中,获得当前线程,通过tryAcquire进行抢锁,该抢锁逻辑和之前逻辑相同。 1、先判断当前这把锁是否存在,如果不存在,插入一把锁,返回null 2、判断当前这把锁是否是属于当前线程,如果是&a…...
ESP8266模块(2)
实例1 查看附近的WiFi 步骤1:进入AT指令模式 使用USB转串口适配器将ESP8266模块连接到电脑。打开串口终端软件,并设置正确的串口和波特率(通常为115200)。输入以下命令并按回车确认: AT如果模块响应OK,…...
Docker安装笔记
1. Mac安装Docker 1.1 Docker安装包下载 1.1.1 阿里云 对于10.10.3以下的用户 推荐使用 对于10.10.3以上的用户 推荐使用 1.1.2 官网下载 系统和芯片选择适合自己的安装包 1.2 镜像加速 【推荐】阿里镜像 登陆后,左侧菜单选中镜像加速器就可以看到你的专属地…...
《昇思25天学习打卡营第21天|Pix2Pix实现图像转换》
Pix2Pix 是一种图像转换模型,使用条件生成对抗网络(Conditional Generative Adversarial Networks,cGANs)实现图像到图像的转换。它主要由生成器(Generator)和判别器(Discriminator)…...
Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法
🎯要点 🎯算法随机图模型数学概率 | 🎯图预期度序列数学定义 | 🎯生成具有任意指数的大型幂律网络,数学计算幂律指数和平均度 | 🎯随机图分析中巨型连接分量数学理论和推论 | 🎯生成式多层网络…...
在jsPsych中使用Vue
jspsych 介绍 jsPsych是一个非常好用的心理学实验插件,可以用来构建心理学实验。具体的就不多介绍了,大家可以去看官网:https://www.jspsych.org/latest/ 但是大家在使用时就会发现,这个插件只能使用js绘制界面,或者…...
机器学习·概率论基础
概率论 概率基础 这部分太简单,直接略过 条件概率 独立性 独立事件A和B的交集如下 非独立事件 非独立事件A和B的交集如下 贝叶斯定理 先验 事件 后验 在概率论和统计学中,先验概率和后验概率是贝叶斯统计的核心概念 简单来说后验概率就是结合了先验概…...
c生万物系列(面向对象:封装)
本系列博客主要介绍c语言的一些屠龙技,里面包含了笔者本人的一些奇思妙想。 该系列博客笔者只是用作记录。如果你偶然找到了这篇博客,但是发现不知所云,请不要过多投入时间,可能笔者本人那时候也看不懂了。 笔者决定用c语言模仿…...
当当网数据采集:Scrapy框架的异步处理能力
在互联网数据采集领域,Scrapy框架以其强大的异步处理能力而著称。Scrapy利用了Python的异步网络请求库,如twisted,来实现高效的并发数据采集。本文将深入探讨Scrapy框架的异步处理能力,并展示如何在当当网数据采集项目中应用这一能…...
React——useEffect和自定义useUpdateEffect
useEffect 是React的一个内置Hook,用于在组件渲染后执行副作用(例如数据获取、订阅或手动更改DOM)。它将在第一次渲染后和每次更新后都会执行。 useEffect(() > {// 这里的代码将在组件挂载和更新时执行。 }, [dependencies]); // depend…...
Hadoop大数据处理架构中ODB、DIM、DWD、DWS
在Hadoop的大数据处理架构中,ODS、DIM、DWD和DWS分别代表了数据仓库体系中不同的层次和功能。下面解释这几个概念: ODS (Operational Data Store) 想象你有一家超市,每天营业结束后,你会把当天所有的销售记录、顾客信息、商品库…...
【刷题汇总 -- 爱丽丝的人偶、集合、最长回文子序列】
C日常刷题积累 今日刷题汇总 - day0211、爱丽丝的人偶1.1、题目1.2、思路1.3、程序实现 2、集合2.1、题目2.2、思路2.3、程序实现 -- set 3、最长回文子序列3.1、题目3.2、思路3.3、程序实现 -- dp 4、题目链接 今日刷题汇总 - day021 1、爱丽丝的人偶 1.1、题目 1.2、思路 …...
基于vue3 + vite产生的 TypeError: Failed to fetch dynamically imported module
具体参考这篇衔接: Vue3报错:Failed to fetch dynamically imported module-CSDN博客 反正挺扯淡的,错误来源于基于ry-vue-plus来进行二次开发的时候遇到的问题。 错误起因 我创建了一个广告管理页面。然后发现访问一直在加载中。报的是这样…...
批量自动添加好友,高效拓展人脉圈.
随着微信使用数量的不断增加,手动添加好友成为了一项耗时且繁琐的任务。为了帮助大家解决这个问题,下面分享一款高效的微信管理系统,它能够帮助你实现批量自动添加好友,极大提升了人脉拓展的效率。 这款微信管理系统可以同时管理多…...
Web开发:一个可拖拽的模态框(HTML、CSS、JavaScript)
目录 一、需求描述 二、实现效果 三、完整代码 四、实现过程 1、HTML 页面结构 2、CSS 元素样式 3、JavaScript动态控制 (1)获取元素 (2)显示\隐藏遮罩层与模态框 (3)实现模态框拖动效果 一、需求…...
【深度学习】fooocusapi,docker,inpainting图像
基础镜像制作来源 fooocusapi接口官方写的: docker run -d --gpusall \-e NVIDIA_DRIVER_CAPABILITIEScompute,utility \-e NVIDIA_VISIBLE_DEVICESall \-p 8888:8888 konieshadow/fooocus-api会下载一些模型,下载完后推这个镜像 docker commit 4dfd1…...
算法017:二分查找
二分查找. - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-search/ 二分查找,其实是双指针的一种特殊情况,但是时间复杂度极低&#…...
谷粒商城实战笔记-37-前端基础-Vue-基本语法插件安装
文章目录 一,v-model1,双向绑定2,vue的双向绑定2.1 html元素上使用指令v-model2.2 model中声明对应属性2.3,验证view绑定modelmodel绑定view 完整代码 二,v-on1,指令简介2,在button按钮中添加v-…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法
使用 ROS1-Noetic 和 mavros v1.20.1, 携带经纬度海拔的话题主要有三个: /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码,来分析他们的发布过程。发现前两个话题都对应了同一…...
数据挖掘是什么?数据挖掘技术有哪些?
目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...
【SSM】SpringMVC学习笔记7:前后端数据传输协议和异常处理
这篇学习笔记是Spring系列笔记的第7篇,该笔记是笔者在学习黑马程序员SSM框架教程课程期间的笔记,供自己和他人参考。 Spring学习笔记目录 笔记1:【SSM】Spring基础: IoC配置学习笔记-CSDN博客 对应黑马课程P1~P20的内容。 笔记2…...
CMake系统学习笔记
CMake系统学习笔记 基础操作 最基本的案例 // code #include <iostream>int main() {std::cout << "hello world " << std::endl;return 0; }// CMakeLists.txt cmake_minimum_required(VERSION 3.0)# 定义当前工程名称 project(demo)add_execu…...
