Codeforces Good Bye 2023 A~E
A.2023(思维)
题意:
有一个序列 A = a 1 , a 2 , . . . , a n + k A = a_1, a_2, ..., a_{n + k} A=a1,a2,...,an+k,且这个序列满足 ∏ i = 1 n + k a i = 2023 \prod\limits_{i = 1}^{n + k}a_i = 2023 i=1∏n+kai=2023,而这个序列中的 k k k个数字被删除了,我们只知道剩下的数字序列 B = b 1 , b 2 , . . . , b n B = b_1, b_2, ..., b_{n} B=b1,b2,...,bn。
请你求出被删除的数字序列。
分析:
可以计算给出序列 B B B的乘积 v a l val val,如果 v a l val val是 2023 2023 2023的因子,那么只需要打印 2023 v a l , 1 , . . . , 1 ( k − 1 个 1 ) \frac{2023}{val}, 1, ..., 1(k - 1\text{个}1) val2023,1,...,1(k−1个1)。
如果 v a l val val不是 2023 2023 2023的因子,则无解。
代码:
#include<bits/stdc++.h>
using namespace std;int n, k, b[15];void solve() {cin >> n >> k;for (int i = 1; i <= n; i++) cin >> b[i];int ans = 2023;for (int i = 1; i <= n; i++) {if (ans % b[i] != 0) {cout << "No" << endl;return;}ans /= b[i];}cout << "Yes" << endl;cout << ans;for (int i = 2; i <= k; i++) {cout << " 1";}cout << endl;
}int main(){int Case;cin >> Case;while (Case--) {solve();}return 0;
}
B.Two Divisors(思维)
题意:
给出数字 x x x的最大和次大因子 a , b a,b a,b,请你求出数字 x x x。
- 规定 ( 1 ≤ a < b < x ) (1 \le a < b < x) (1≤a<b<x)
分析:
首先考虑 a , b a, b a,b的最小公倍数,如果最小公倍数与 b b b不相同,那么要求的数字 x x x就是 a , b a, b a,b的最小公倍数。
如果两数的最小公倍数就是 b b b,那么此时 b = a × p b = a \times p b=a×p,而 p p p必然为 x x x的最小素因子,因此, x = b × p = b × b a x = b \times p = b \times \frac{b}{a} x=b×p=b×ab
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;void solve() {LL a, b;cin >> a >> b;LL gcd = __gcd(a, b);LL ans = a * b / gcd;if (ans == b) ans = ans / a * b;cout << ans << endl;
}int main(){int Case;cin >> Case;while (Case--) {solve();}return 0;
}
C.Training Before the Olympiad(思维)
题意:
给出一个包含 n n n个数字的序列 A = a 1 , a 2 , . . . , a n A = a_1, a_2, ..., a_n A=a1,a2,...,an。每位玩家在自己的回合可以进行以下操作:
-
如果数组中只剩下一个数字,游戏结束
-
否则,选择数组中两个元素 a i , a j ( i ≠ j ) a_i, a_j(i \ne j) ai,aj(i=j),删除这两个元素并将 ⌊ a i + a j 2 ⌋ \lfloor \frac{a_i + a_j}{2} \rfloor ⌊2ai+aj⌋放回数组中。
先手希望最后的数字尽可能大,后手希望最后的数字尽可能小,假设两人都极为聪明, 问:对于序列 A A A的所有前缀,进行游戏最后得到的数字是多少?
分析:
由于放回数组的元素为 ⌊ a i + a j 2 ⌋ \lfloor \frac{a_i + a_j}{2} \rfloor ⌊2ai+aj⌋,那么,只有被删除的两个数字恰好为一个奇数和一个偶数时才会导致最后的结果变小。
那么,先手为了使结果尽可能大,每次操作会优先将两个奇数删除,后手则会选择一奇一偶进行删除,以先后手均进行一次操作为一轮,那么每轮会删除 3 3 3个奇数,且答案会减少 1 1 1,即答案总共会减少 ⌊ 奇数个数 3 ⌋ \lfloor \frac{\text{奇数个数}}{3}\rfloor ⌊3奇数个数⌋。
那么最后,剩下的奇数个数就分为三种情况:
-
0个,已经没有奇数了,不影响答案
-
1个,此时只能将该奇数与偶数一起删除,会使答案再减少一
-
2个,先手可以将这两个奇数一起删除,因此不会再影响后续答案
对于 1 ∼ i 1 \sim i 1∼i的前缀的答案即为前 i i i个数字的前缀和减去减少的数量即可。
hint: 当只有一个数字时,直接输出该数字即可。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;LL a[100005];void solve() {int n;cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];LL sum = a[1];int odd = 0, even = 0;if (a[1] % 2 == 0) even++;else odd++;cout << sum;for (int i = 2; i <= n; i++) {sum += a[i];if (a[i] % 2 == 0) even++;else odd++;if (odd % 3 == 1) cout << ' ' << sum - odd / 3 - 1;else cout << ' ' << sum - odd / 3;}cout << endl;
}int main(){int Case;cin >> Case;while (Case--) {solve();}return 0;
}
D.Mathematical Problem(找规律)
题意:
给出一个奇数 n n n,请你输出满足以下条件的 n n n个完全平方数:
-
这些完全平方数的十进制位数均为 n n n
-
所有完全平方数均可由其中一个完全平方数通过重排数字得到
分析:
对于 n = 1 n = 1 n=1,此时的答案选择 1 1 1即可。
对于 n = 3 n = 3 n=3,由样例可知答案可选: 169 , 196 , 961 169, 196, 961 169,196,961。
对于 n = i + 2 n = i + 2 n=i+2,不难发现,对于所有的 n = i n = i n=i的答案,均可通过乘上 100 100 100直接得到 i i i个满足要求的完全平方数。
证明: 若 b = c 2 ,则 b × 100 = ( c × 10 ) 2 \text{若}b = c^{2},\text{则}b \times 100 = (c \times 10)^{2} 若b=c2,则b×100=(c×10)2
但是这样只能获得 i i i个答案,还需要获得两个完全平方数,观察题目样例可以发现 169 = 1 3 2 , 961 = 3 1 2 169 = 13^{2}, 961 = 31^{2} 169=132,961=312。由于通过将 n = i n = i n=i的答案乘上 100 100 100得到 i i i个 n = i + 2 n = i + 2 n=i+2的答案,那么多出的两个数字均为 0 0 0,尝试将这两个 0 0 0加入 169 169 169和 961 961 961中,发现: 10609 = 10 3 2 , 90601 = 30 1 2 10609 = 103^{2}, 90601 = 301^{2} 10609=1032,90601=3012。继续尝试: 1006009 = 100 3 2 , 9006001 = 300 1 2 , . . . 1006009 = 1003^{2}, 9006001 = 3001^{2}, ... 1006009=10032,9006001=30012,...。
即:还差的两个完全平方数可以通过 169 , 961 169,961 169,961在百位和十位,十位和个位之间各添加 n − 3 2 \frac{n - 3}{2} 2n−3个 0 0 0得到。
预处理所有答案,对于每个询问输出预处理的答案即可。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;vector<string> ans[105];void init() {ans[1].push_back("1");ans[3].push_back("169");ans[3].push_back("196");ans[3].push_back("961");for (int i = 5; i <= 99; i += 2) {for (auto j : ans[i - 2]) {ans[i].push_back(j + "00");}string s1 = "1", s2 = "9";int len = (i - 3) / 2;for (int j = 0; j < len; j++) {s1 += '0', s2 += '0';}s1 += '6', s2 += '6';for (int j = 0; j < len; j++) {s1 += '0', s2 += '0';}s1 += '9', s2 += '1';ans[i].push_back(s1);ans[i].push_back(s2);}
}void solve() {int n;cin >> n;for (auto i : ans[n]) {cout << i << endl;}
}int main(){init();int Case;cin >> Case;while (Case--) {solve();}return 0;
}
E.Happy Life in University(DFS序,线段树)
题意:
有一棵根节点为 1 1 1的树,且树上每个节点均被涂上了一种颜色,你可以任取树上两点 u , v ( u ≠ v ) u, v(u \ne v) u,v(u=v),求最大的 d i f f ( u , l c a ( u , v ) ) × d i f f ( v , l c a ( u , v ) ) diff(u, lca(u, v)) \times diff(v, lca(u, v)) diff(u,lca(u,v))×diff(v,lca(u,v))。
其中:
-
d i f f ( u , v ) diff(u, v) diff(u,v)为点 u u u到点 v v v的路径上不同颜色的种类
-
l c a ( u , v ) lca(u, v) lca(u,v)为点 u u u和点 v v v的最近公共祖先
分析:
对于以节点 i i i为根节点的子树,若想以节点 i i i为最近公共祖先来计算答案,那么只能在不同的子树中取两个节点(由于路径越长颜色越多,实际被选中的一定为叶节点)。
那么当 l c a ( u , v ) = i lca(u, v) = i lca(u,v)=i时,实际上就会选择所有子树中路径包含颜色最多的前两棵子树,此时答案为这两棵子树的最大颜色数量的乘积。
因此,需要有一个数据结构来维护区间上的最大值,此时可以想到使用线段树进行维护。
想要使用线段树进行维护,那么就需要将树结构转化成线性的结构,这里可以使用 D f s Dfs Dfs序进行转化,优点是任意子树转化后在数组中均是连续的。
注意:转化过程中,需要计算根节点到该节点的路径上包含的不同颜色种类,并使用线段树进行单点更新。转化完整棵子树后,还需记录该子树最后遍历的节点所在的序号(记录该子树的存储范围)。
然后考虑查询每个节点为最近公共祖先时的最大价值,此时需要消除所有该子树的祖先节点带来的影响,可以通过线段树区间减法来进行,每次计算完一个节点后,对整棵子树通过 − 1 -1 −1的方式来消除该节点的影响,但考虑子树中可能还包含该颜色的节点,因此需要对该节点到达叶节点的所有不同路径上最近的颜色相同的节点再通过区间加法将该颜色加回来。
遍历完树后,就得到了最大的价值。
注意:多组输入,需要初始化(记录答案的变量要初始化为 1 1 1)。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 3e5 + 5e2;int n, cnt, tot, num[N][2], pre[N], col[N];
LL ans, lazy[N << 2], T[N << 2];
vector<int> G[N], nxt[N];void init() {ans = 1;cnt = tot = 0;for (int i = 0; i <= n; i++) {G[i].clear();nxt[i].clear();pre[i] = 0;}
}void pushup(int x) {T[x] = max(T[x << 1], T[x << 1 | 1]);
}void build(int l, int r, int x) {if (l == r) {lazy[x] = T[x] = 0;return;}lazy[x] = 0;int mid = l + r >> 1;build(l, mid, x << 1);build(mid + 1, r, x << 1 | 1);pushup(x);
}void pushdown(int x) {if (lazy[x]) {lazy[x << 1] += lazy[x];lazy[x << 1 | 1] += lazy[x];T[x << 1] += lazy[x];T[x << 1 | 1] += lazy[x];lazy[x] = 0;}
}void update (int l, int r, int UL, int UR, int x, int val) {if (l >= UL && r <= UR) {lazy[x] += val;T[x] += val;return;}pushdown(x);int mid = l + r >> 1;if (UL <= mid) update(l, mid, UL, UR, x << 1, val);if (UR > mid) update(mid + 1, r, UL, UR, x << 1 | 1, val);pushup(x);
}int query(int l, int r, int QL, int QR, int x) {if (l >= QL && r <= QR) {return T[x];}pushdown(x);int mid = l + r >> 1;int ans = 0;if (QL <= mid) ans = max(ans, query(l, mid, QL, QR, x << 1));if (QR > mid) ans = max(ans, query(mid + 1, r, QL, QR, x << 1 | 1));return ans;
}void dfs1(int root) {num[root][0] = ++tot;//节点root新的编号int p = pre[col[root]];//查看上一个该颜色的节点编号if (p == 0) cnt++;//第一次出现,颜色种类增加else nxt[p].push_back(root);//不是第一次出现,记录上个节点的一个后继为当前节点pre[col[root]] = root;update(1, n, tot, tot, 1, cnt);//更新for (auto i : G[root]) {dfs1(i);}/*回溯*/num[root][1] = tot;//节点root子树最后一个节点所在的编号if (p == 0) cnt--;pre[col[root]] = p;
}void dfs2(int root) {LL maxn = 1;for (auto i : G[root]) {LL val = query(1, n, num[i][0], num[i][1], 1);ans = max(ans, maxn * val);maxn = max(maxn, val);}update(1, n, num[root][0], num[root][1], 1, -1);//减去该颜色for (auto i : nxt[root]) {//拥有该颜色的子树加回来update(1, n, num[i][0], num[i][1], 1, 1);}for (auto i : G[root]) {dfs2(i);}
}void solve() {cin >> n;init();for (int i = 2; i <= n; i++) {int p;cin >> p;G[p].push_back(i);}for (int i = 1; i <= n; i++) {cin >> col[i];}build(1, n, 1);dfs1(1);dfs2(1);cout << ans << endl;
}int main(){ios::sync_with_stdio(false);int Case;cin >> Case;while (Case--) {solve();}return 0;
}
学习交流
以下为学习交流QQ群,群号: 546235402,每周题解完成后都会转发到群中,大家可以加群一起交流做题思路,分享做题技巧,欢迎大家的加入。

相关文章:
Codeforces Good Bye 2023 A~E
A.2023(思维) 题意: 有一个序列 A a 1 , a 2 , . . . , a n k A a_1, a_2, ..., a_{n k} Aa1,a2,...,ank,且这个序列满足 ∏ i 1 n k a i 2023 \prod\limits_{i 1}^{n k}a_i 2023 i1∏nkai2023,而这个序列中的 k k k个…...
【蓝桥杯】比赛大纲整理
枚举[1-3] 排序 (1)冒泡排序[2] (2)选择排序[3] (3)插入排序[3] 搜索(bfs, dfs)[1-5] 贪心[1-5] 模拟[1-3] 二分[2-5] DP(普通一维问题)[3-5] 高精度[1-5] 数据结构 (1)栈[2-4]&…...
探索 CodeWave低代码技术的魅力与应用
目录 前言1 低代码平台2 CodeWave简介3 CodeWave 的独特之处3.1 高保真还原交互视觉需求3.2 擅长复杂应用开发3.3 支持应用导出&独立部署3.4 金融级安全要求3.5 可集成性高3.6 可拓展性强 4 平台架构和核心功能4.1 数据模型设计4.2 页面设计4.3 逻辑设计4.4 流程设计4.5 接…...
《2023我的编程之旅》
一、背景 自从踏入编程的世界,我就像乘坐了一辆无法停下的列车,穿行在数据的丛林中,寻找解决问题的答案。编程不仅是我的职业,更是我表达自我、解决问题的工具。在这篇文章中,我将分享一段令人印象深刻的实战经历&…...
C++ 二进制图片的读取和blob插入mysql_stmt_init—新年第一课
关于二进制图片的读取和BLOB插入一共包含五步 第一步:初始化 MYSQL_STMT* stmt mysql_stmt_init(&mysql); 第二步:预处理sql语句 mysql_stmt_prepare(stmt,sql,sqllen); 第三步:绑定字段 mysql_stmt_bind_param(stmt,bind); 第四…...
向爬虫而生---Redis 基石篇2 <拓展Hash>
前言: 延续上一篇向爬虫而生---Redis 基石篇 <拓展str>-CSDN博客 这个章节拓展一下hash的玩法,主要是要挖一挖 ,啥时候用它最合适;让他并不是一无是处.. 正文: 哈希(Hash)数据结构是Redis中的一种常用的数据类型。它是一个键值…...
【论文精读】A Survey on Large Language Model based Autonomous Agents
A Survey on Large Language Model based Autonomous Agents 前言Abstract1 Introduction2 LLM-based Autonomous Agent Construction2.1 Agent Architecture Design2.1.1 Profiling Module2.1.2 Memory ModuleMemory StructuresMemory FormatsMemory Operations 2.1.3 Plannin…...
23款奔驰GLC260L升级原厂540全景影像 高清环绕的视野
嗨 今天给大家介绍一台奔驰GLC260L升级原厂360全景影像 新款GLC升级原厂360全景影像 也只需要安装前面 左右三个摄像头 后面的那个还是正常用的,不过不一样的是 升级完成之后会有多了个功能 那就是新款透明底盘,星骏汇小许Xjh15863 左右两边只需要更换后…...
SQL 在已有表中修改列名的方法
文章目录 1. MySQL2. SQL Server3. Oracle / PostgreSQL Question: 假设有一张表 StudentInfo,表中有一个列名是 Student_Name ,想要把这个列名改成 StudentName 应该如何操作? 建表语句如下: --建表 if object_id(S…...
QT----Visual stdio翻金币案例,附源码
历经一个月,各种事情磕磕绊绊,终于结束了,自己还是太菜了 案例的文档写的教程已经很详细,这边主要是记录一些问题 github代码 gitee代码 1、图片无法加载 一开始加载首页图片和标题出不来,结果是paintEvent重写的字打…...
总结:浏览器解析html与执行JS之生命周期详解
总结:浏览器解析html与执行JS之生命周期详解 一浏览器解析html的生命周期:1.请求HTML文档:2接收响应:3构建DOM树:4加载外部资源:5DOMContentLoaded事件:6样式计算与布局:7绘制与渲染…...
aspose通过开始和结束位置关键词截取word另存为新文件
关键词匹配实体类: Data EqualsAndHashCode(callSuper false) public class TextConfig implements Serializable {private static final long serialVersionUID 1L;/*** 开始关键词,多个逗号分隔*/private String textStart ;/*** 结束关键词&#x…...
深入解析美颜SDK:绿幕抠图功能的算法原理
当下,美颜SDK绿幕抠图功能成为许多应用中不可或缺的一环。本文将深入解析美颜SDK中绿幕抠图功能的算法原理,揭示其背后的技术奥秘。 一、什么是美颜SDK绿幕抠图? 美颜SDK的绿幕抠图功能是一种通过计算机视觉技术,将视频或图像中…...
从有向带权图判断最短路径里各目标顶点顺序
对如下有向带权图,若采用迪杰斯特拉(Dijkstra)算法求从源点a到其他各顶点的最短路径,则得到的第一路径的目标顶点是b,第二条最短路径的目标顶点是c,后续得到的其余各最短路径的目标顶点依次是() A.d,e,f B.e,d,f C.f,d,e D.f,…...
鼠标驱动框架:模拟键盘按键
/* 参考: drivers\hid\usbhid\usbmouse.c */ #include <linux/kernel.h> #include <linux/slab.h> #include <linux/module.h> #include <linux/init.h> #include <linux/usb.h> #include <linux/input.h> #include <linux/hid.h>st…...
ES6之Promise的链式调用
✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…...
HTML----JavaScript操作对象BOM对象
文章目录 目录 文章目录 本章要求 一.BOM模型概述 二.BOM核心:window对象 常用属性 常用方法: confirm() 案例 open ()close()案例 setTimeout( ) 案例 setInterval( ) 案例 document对象 练习 本章要求 了解BOM模型掌握BOM模型实际应用 一.BOM模型…...
隆道数智大会回顾|第13期《如何构建绿色产业供应链新生态》(完)
本期演讲嘉宾: 史文月 采购与供应链专家 邢庆峰 品类管理和质量管理专家 刘婷婷 中兴通讯供应链规划总监 张燕华 正大生物CIO 吴树贵 隆道公司总裁 本期演讲主题: 如何构建绿色产业供应链新生态 本期内容要点: 1.供应链管理的核心问…...
粒子群优化pso结合bp神经网络优化对csv文件预测matlab(3)
1.csv数据为密西西比数据集,获取数据集可以管我要,数据集内容形式如下图: 2.代码 这里参考的是b站的一位博主。 数据集导入教程在我的另一篇文章bp写过,需要的话可以去看一下 psobp.m close all clc%读取数据 inputX; outputY;…...
软性演员-评论家算法 SAC
软性演员-评论家算法 SAC 软性演员-评论家算法 SAC优势原理软性选择模型结构目标函数重参数化熵正则化代码实现 软性演员-评论家算法 SAC 优势原理 DDPG 的问题在于,训练不稳定、收敛差、依赖超参数、不适应复杂环境。 软性演员-评论家算法 SAC,更稳定…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
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…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
