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

模拟赛 R14

R14 - T1 序列

难度:黄 / 绿

题意

给定一个长为 \(n\) 的非负整数序列 \(a\),你可以进行任意次以下的操作:

选择一个区间 \([l,r]\),然后将 \(a_l,a_{l+1},\cdots,a_r\) 都减去 \(1\)

你希望用最小的操作次数将 \(a\) 中的所有数变成 \(0\)。在此基础上,定义一次操作 \([l,r]\) 能获得的分数为 \((r-l+1)^2\),你需要求出:在最小化操作次数的前提下,最终可能的分数的最大值与最小值分别是多少。

Solution

签到题,场上想了三个小时?我太fw了
这种区间加减的好像大部分都是差分后做。虽然我没有做差分也做出了一个更劣解。
\(c_i = a_i - a_{i - 1}\)\(a_0 = a_{n + 1} = 0\)。这样区间减 1 就变成了 \(c_i \gets c_i - 1\)\(c_{j + 1} \gets c_{j + 1} + 1\)。转换后实际上相当于一个配对问题,将 \(c_i > 0\) 的和 \(c_j < 0\) 进行配对(注意要保证 \(i < j\))。实际上这个问题不一定有解(就是括号序列不一定合法嘛),但是 \(a_i = \sum_{j < i} c_j \ge 0\) 所以这个一定能匹配上。那么最小操作次数就是两两配对,即为 \(\frac{1}{2} \sum_{i = 1}^{n + 1} |c_i|\)
想清楚了就基本做完了,最大化分数就总是让最前面的 \(i\) 和最后面的 \(j\) 匹配,最小化就正好反过来。这分别对应着栈和队列两种 DS。复杂度 \(O(N)\)
赛时思路就是直接考虑,当时很自然的想出了最大化,然后考虑在最大化的操作序列上重新匹配左端点和右端点,复杂度 \(O(N \log N)\)

赛时
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e6 + 5;
int pree[N], pre[N], l[N], r[N], nxte[N], n, a[N], st[N], tp, ansmn, ansmx;
void chmin(int &a, int b){ a = min(a, b); }
void chmax(int &a, int b){ a = max(a, b); }
signed main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n;for(int i = 1; i <= n; ++i) cin >> a[i];for(int i = 1; i <= n; ++i){l[i] = pree[i] = i;pre[i] = 0;while(tp  && a[st[tp]] >= a[i]){if(a[st[tp]] == a[i]) chmin(pree[i], pree[st[tp]]);// chmax(pre[i], a[st[tp]]);chmin(l[i], l[st[tp]]);--tp;}chmax(pre[i], a[st[tp]]);st[++tp] = i;}   for(int i = n; i >= 1; --i){r[i] = nxte[i] = i;while(tp && a[st[tp]] >= a[i]){if(a[st[tp]] == a[i]) chmax(nxte[i], nxte[st[tp]]);chmax(r[i], r[st[tp]]);--tp;}chmax(pre[i], a[st[tp]]);st[++tp] = i;}for(int i = 1; i <= n; ++i){// cout << i << ' ' << l[i] << ' ' << r[i] << ' ' << pree[i] << ' ' << nxte[i] << ' ';auto cal = [](int i, int l, int r){return i * (r - l + 1) * (r - l + 1);};if(nxte[i] == i){ansmx += cal(a[i] - pre[i], l[i], r[i]);}}cout << ansmn << ' ' << ansmx;return 0;
}
std
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
#define int long long
int a[N], c[N], n;
int cal(int x, int l, int r){return x * (r - l) * (r - l);
}
signed main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n;for(int i = 1; i <= n; ++i) cin >> a[i], c[i] = a[i] - a[i - 1];c[n + 1] = a[n + 1] - a[n];int ansmx = 0, ansmn = 0;stack<int> st;for(int i = 1; i <= n + 1; ++i){if(c[i] > 0) st.push(i);else if(c[i] < 0){while(c[i] + c[st.top()] < 0) ansmx += cal(c[st.top()], st.top(), i), c[i] += c[st.top()], st.pop();int minx = min(abs(c[i]), c[st.top()]);ansmx += cal(minx, st.top(), i);c[i] = 0, c[st.top()] -= minx;}}for(int i = 1; i <= n; ++i) c[i] = a[i] - a[i - 1];c[n + 1] = a[n + 1] - a[n];queue<int> q;for(int i = 1; i <= n + 1; ++i){if(c[i] > 0) q.push(i);else if(c[i] < 0){while(c[i] + c[q.front()] < 0)ansmn += cal(c[q.front()], q.front(), i), c[i] += c[q.front()], q.pop();int minx = min(abs(c[i]), c[q.front()]);ansmn += cal(minx, q.front(), i);c[i] = 0, c[q.front()] -= minx;}}cout << ansmn << ' ' << ansmx << '\n';return 0;
}

R14 - T2 复制粘贴

难度:黄 / 绿

题意

Yoimiya 有一个文本编辑器,一开始这个文本编辑器里面有一个字符 Y

文本编辑器支持剪贴板,也就是复制粘贴操作。Yoimiya 可以进行两种操作:

  • 复制:该操作耗费 \(x\) 秒,进行该操作后,剪贴板中的字符串将被替换为当前文本编辑器中的字符串。
  • 粘贴:该操作耗费 \(y\) 秒,该操作会将剪贴板中的字符串拼接到文本编辑器中的字符串的末尾。

一开始,剪贴板中是空字符串。

给定正整数 \(N\),问最少需要多少秒,才能使文本编辑器中 Y 的个数 \(>N\)

Solution

发现操作序列被 Copy 分成若干段,假设总共进行了 \(k\) 次 Copy 操作,那么第 \(i\) 次 Copy 操作之后总是紧跟着 \(a_i\) 次 Paste。题目限制即为 \(\prod_{i = 1}^k (a_i + 1) > N\),要最小化 \(Cost = \sum_{i = 1}^k (a_i \times y) + k \times x\)
由于 \(a_i + 1\ge 2\),所以 \(k\) 有上界 \(O(\log N)\)。那么就可以枚举 \(k\),此时 \(Cost = \sum_{i = 1}^k (a_i \times y) + k \times x = k \times (x - y) + \sum_{i = 1}^k(a_i + 1)\)。发现可以均值,可是这里的变量是整数怎么办?一个小 trick:可以设有 \(p\)\(a_i + 1 = t\)\(k - p\)\(a_i + 1 = t + 1\),然后二分这个 \(t\) 就可以算出最小贡献。
枚举两维,二分一维,再加上单次验证求幂,复杂度 \(O(\log ^ 4 N)\)
千万小心不要爆 ll。

Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef __int128 i128;
ll n, x, y, ans = LLONG_MAX;
signed main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n >> x >> y;if(n == 1) return cout << x + y << '\n', 0;ll D = ceil(log2(n));for(ll i = 1; i <= D; ++i){for(ll p = 0; p <= i; ++p){ll l = 2, r = n + 1;while(l < r){i128 mid = (l + r) >> 1, ck = 1;for(int j = 1; j <= p; ++j){if(ck > n / mid){ck = n + 1; break;}ck *= mid;}for(int j = p + 1; j <= i; ++j){if(ck > n / mid){ck = n + 1; break;}ck *= (mid + 1);}assert(ck > 0);if(ck > n) r = mid;else l = mid + 1;}assert(l == r);i128 sum = (i128)l * p + i128(l + 1) * (i - p) - i;if(ans / y >= sum){ll tmp = (ll)sum * y + i * x;assert(sum * y > 0 && i * x > 0);ans = min(ans, tmp);}}}cout << ans;return 0;
}

R14 - T3 染色

难度 :蓝

题意

\(n\) 种颜料和一个长度为 \(m\) 的画板,颜色分别为 \(1,2,\cdots,n\)。第 \(i\) 个颜料有 \(c_i\) 桶。

现在你可以用一个笔刷在这个画板上画 \(n\) 段,具体来说,你可以选择任意一个 \(1\le p\le m\) 作为你一开始的位置,接下来依次对每个 \(i=1,2,\cdots,n\),你可以将笔刷从当前位置 \(p\) 向左或向右移动 \(c_i\) 格,即移动到 \(q=p-c_i+1\)\(q=p+c_i-1\) 处,并将 \(p,q\) 之间的位置(包括 \(p,q\))都染成第 \(i\) 种颜色。

这里要求新的位置 \(q\) 不能超出画板的边界,即 \(1\le q\le m\)

如果一个位置被染色多次,我们认为这个位置的颜色是它最后一次染上的颜色;如果一个位置没有被染色,我们认为这个位置的颜色为 \(0\)。现在你需要求出染色完成后可以得到多少种不同的画板,答案对 \(998244353\) 取模。

这里两个最终画板是不同的,当且仅当存在至少一个位置 \(i\) 满足这两个画板在第 \(i\) 个位置上的颜色不同。

Solution

这种后面覆盖前面的都可以倒过来做。然后就可以上人类智慧了,\(f_{i, j, 0 / 1}\) 表示倒着做到第 \(i\) 个,目前有颜色区间长度为 \(j\),现在刷子在左 / 右端点。总是枚举最后一段笔刷在区间范围里来回动(这是不会造成任何影响的),然后到 \(k\) 的时候跳出了原有范围来进行转移。发现这个转移还需要一个 dp 来判断合法性。也就是 \(g_{i, j, len, end, 0 / 1}\) 表示从 \(i\) 画到第 \(j\) 段,都没有超出 \(len\) 的长度,最后到达 \(len\) 区间中的第 \(end\) 个位置,起点是最左边还是最右边,转移就是简单背包。
复杂度 \(O(N^2M^2)\)
注意一开始 \(f_{n, c[n], 0}\)\(f_{n, c[n], 1}\) 实际上是一种情况,特判掉。

std
#include <bits/stdc++.h>
using namespace std;
const int N = 155, mod = 998244353;
#define int long long
int c[N], n, m, f[2][N][N];
bitset<N> g[2][N][N][N]; // 长度限制为 len, 从第 i 个的左 / 右端点开始走,走到第 j 个, 能不能走到 k
void add(int &x, int y){ (x += y) %= mod; }
int mul(int x, int y){ return (x * y) % mod; }
signed main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n >> m;for(int i = 1; i <= n; ++i) cin >> c[i];for(int i = n; i >= 1; --i){for(int t : {0, 1}){for(int len = 1; len <= m; ++len){int st = (t == 0 ? 1 : len);g[t][len][i][i][st] = 1;for(int j = i - 1; j >= 1; --j){for(int k = 1; k <= len; ++k){if(k + c[j] - 1 <= len) g[t][len][i][j][k] = g[t][len][i][j][k] | g[t][len][i][j + 1][k + c[j] - 1];if(k - c[j] + 1 >= 1) g[t][len][i][j][k] = g[t][len][i][j][k] | g[t][len][i][j + 1][k - c[j] + 1];}}}}}f[0][n][c[n]] = f[1][n][c[n]] = 1;for(int i = n; i >= 2; --i){for(int ti : {0, 1}){for(int len = 1; len <= m; ++len){for(int j = i - 1; j >= 1; --j){for(int k = len + 1; k <= len + c[j] - 1; ++k){if(k - c[j] + 1 >= 1){if(g[ti][len][i][j + 1][k - c[j] + 1])add(f[1][j][k], f[ti][i][len]);if(i == n) f[1][j][k] = (f[1][j][k] >= 1 ? 1 : f[1][j][k]);}if(1 + c[j] - 1 >= k - len + 1){if(g[ti][len][i][j + 1][c[j] - (k - len + 1) + 1])add(f[0][j][k], f[ti][i][len]);if(i == n) f[0][j][k] = (f[0][j][k] >= 1 ? 1 : f[0][j][k]);}}}}}}int ans = 0;for(int i = n; i >= 1; --i){for(int len = 1; len <= m; ++len){for(int t : {0, 1}){if(!g[t][len][i][1].count()) continue;add(ans, mul(f[t][i][len], m - len + 1));if(i == n) break;}}}cout << ans;return 0;
}

R14 - T4 树

难度:紫

题意

给定一棵 \(n\) 个点的树,以及树上的 \(m\) 条路径。

现在你需要将这些路径划分为尽可能少的若干个集合,使得每个集合内部的路径两两不交。

Solution

区间图的树升级版?
如果将相交的路径两两连边,发现这个图是一个弦图。题目要求的是最小染色数。
最小染色数就是最大团啊,最大团就是被最多路径经过的那个点的路径数 \(k\)
那方案呢,如果直接跑 MCS 是 \(O(M^2)\) 的。
我们找到被经过路径数最大的中深度最小的那个点,这个点一定有一条路径以它为 lca,然后把这条路径删掉,继续找。直到最大的被经过路径数减少了 1 算一轮,这一轮中被删掉的路径就染同一种颜色。可以验证这个构造是合法的。
咋想出来的我也不知道,云浅说很套路
树剖维护是两个 log 的,卡常。当然我也不可能写 LCT。

std
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
#define ls(p) p << 1
#define rs(p) p << 1 | 1
#define Tp template<typename T>
#define Ts template<typename T,typename... _T>
char buf[1<<20],*p1=buf,*p2=buf;
#define getchar() (p1==p2&&(p2=buf+fread(p1=buf,1,1<<20,stdin),p1==p2)?EOF:*p1++)
Tp inline void read(T& x){x=0;char c=getchar();bool f=0;for(;!isdigit(c);c=getchar())if(c=='-')f=1;for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);f&&(x=-x);
}
Ts inline void read(T& x,_T&... y){read(x),read(y...);}
template<typename T>void qw(T x){if(x<0)x=-x,putchar('-');if(x/10)qw(x/10);putchar(x%10+48); 
}	
int ans[N], val[N * 4], idx[N * 4], tag[N * 4], son[N], siz[N], tp[N], f[N], dfn[N], _dfn[N], tsp, dep[N], n;
struct edge{int u, v, pre;
};
struct myvec{int head[N], cnt;edge e[N * 2];inline void push_back(int u, int v){e[++cnt] = {u, v, head[u]};head[u] = cnt;}inline int back(int u){return e[head[u]].v;}inline void pop_back(int u){head[u] = e[head[u]].pre;}
}e, rge;
struct node{int u, v;
}Que[N];
inline void addtag(int p, int k){ val[p] += k, tag[p] += k; }
inline void pushdown(int p){if(tag[p]){addtag(ls(p), tag[p]);addtag(rs(p), tag[p]);tag[p] = 0;}
}
inline void pushup(int p){val[p] = max(val[ls(p)], val[rs(p)]);idx[p] = (val[ls(p)] >= val[rs(p)] ? idx[ls(p)] : idx[rs(p)]);
}
inline void build(int p, int pl, int pr){val[p] = tag[p] = 0;if(pl == pr) return idx[p] = pl, e.head[pl] = rge.head[pl] = 0, void();int mid = (pl + pr) >> 1;build(ls(p), pl, mid);build(rs(p), mid + 1, pr);pushup(p);
}
inline void update(int p, int pl, int pr, int L, int R, int k){if(L <= pl && R >= pr) return addtag(p, k), void();int mid = (pl + pr) >> 1;pushdown(p);if(L <= mid) update(ls(p), pl, mid, L, R, k);if(R > mid) update(rs(p), mid + 1, pr, L, R, k);pushup(p);
}
inline void dfs(int u, int fa){siz[u] = 1;son[u] = 0;f[u] = fa;dep[u] = dep[fa] + 1;for(int k = e.head[u]; k; k = e.e[k].pre){int v = e.e[k].v;if(v != fa){dfs(v, u);if(siz[son[u]] < siz[v]) son[u] = v;siz[u] += siz[v];}}
}
inline void devide(int u, int top){_dfn[dfn[u] = ++tsp] = u, tp[u] = top;if(son[u]) devide(son[u], top);for(int k = e.head[u]; k; k = e.e[k].pre){int v = e.e[k].v;if(v != f[u] && v != son[u])devide(v, v);}
}
inline void ins(int id){int u = Que[id].u, v = Que[id].v;while(tp[u] != tp[v]){if(dep[tp[u]] < dep[tp[v]]) swap(u, v);update(1, 1, n, dfn[tp[u]], dfn[u], 1);u = f[tp[u]];}if(dfn[u] > dfn[v]) swap(u, v);int Lca = u;update(1, 1, n, dfn[u], dfn[v], 1);rge.push_back(Lca, id);
}
inline void del(int id){int u = Que[id].u, v = Que[id].v;while(tp[u] != tp[v]){if(dep[tp[u]] < dep[tp[v]]) swap(u, v);update(1, 1, n, dfn[tp[u]], dfn[u], -1);u = f[tp[u]];}if(dfn[u] > dfn[v]) swap(u, v);update(1, 1, n, dfn[u], dfn[v], -1);// rge[Lca].emplace_back(id);
}
inline void solve(){int m;read(n, m);build(1, 1, n);e.cnt = rge.cnt = tsp = 0;for(int i = 1; i < n; ++i){int u, v;read(u, v);e.push_back(u, v);e.push_back(v, u);}dfs(1, 0);devide(1, 1);for(int i = 1; i <= m; ++i){int u, v;read(u, v);Que[i] = {u, v};ins(i);}int k = val[1];qw(k), putchar('\n');for(int i = k; i >= 1; --i){int u = _dfn[idx[1]], nw = val[1];while(nw == i){int id = rge.back(u); rge.pop_back(u);del(id);ans[id] = i;u = _dfn[idx[1]], nw = val[1];}}for(int i = 1; i <= m; ++i) qw(ans[i]), putchar(' ');putchar('\n');
}
signed main(){int c, T; read(c, T);while(T--) solve();return 0;
}

Summary

T1 卡太久了啊。后面的部分分都没时间看。下次先 2h 写部分分试一下。

相关文章:

模拟赛 R14

R14 - T1 序列 难度:黄 / 绿 题意 给定一个长为 \(n\) 的非负整数序列 \(a\),你可以进行任意次以下的操作: 选择一个区间 \([l,r]\),然后将 \(a_l,a_{l+1},\cdots,a_r\) 都减去 \(1\)。 你希望用最小的操作次数将 \(a\) 中的所有数变成 \(0\)。在此基础上,定义一次操作 \(…...

Java并发编程(2)

ThreadLocal 1、ThreadLocal是什么ThreadLocal就是线程本地变量,若创建了一个ThreadLocal变量,那访问这个变量的每个线程都会有这个变量的本地拷贝,但多个线程操作这个变量时,实际是操作自己本地内存里的变量,可以起到线程隔离的作用,避免了线程安全问题。//创建一个Thre…...

完整教程:WebApp 的价值与实现:从浏览器架构到用户体验优化

完整教程:WebApp 的价值与实现:从浏览器架构到用户体验优化pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New"…...

Ubuntu 安装百度网盘

下载:https://pan.baidu.com/download#linux百度网盘就安装好了:...

八字喜用神起名大师 API 接口

八字喜用神起名大师 API 接口 AI/模型 基于八字命理和五行相生相克理论 十年模型积累 / 三才五格数理 姓名 / 八字命理 1. 产品功能基于传统八字命理学理论; 结合三才五格数理分析; 考虑五行相生相克关系; 提供多个候选姓名供选择; 包含详细的命理分析报告; 支持方言谐音检…...

在CentOS 7上集成cJSON库的方法

安装开发工具:使用yum包管理器安装开发工具组,以确保您拥有编译cJSON所需的所有工具,例如gcc、make、autoconf等。sudo yum groupinstall "Development Tools"获取cJSON源代码:从官方仓库克隆或下载cJSON的最新源代码。git clone https://github.com/DaveGamble/cJ…...

作业1

任务一:编码规范命名规范 变量、函数、类和文件名应该简明易懂,使用英文单词或单词缩写,并使用下划线或驼峰命名法。 变量名应该使用名词,函数名应该使用动词,类名应该使用名词或名词短语,文件名应该使用有意义的名称。 格式化规范 代码行长度应该不超过80个字符。 使用一…...

网站截图与 HTML 快照 API 接口

网站截图与 HTML 快照 API 接口 网站工具 通过网页 URL 获取站点截图与内容 网页截图 / 网页快照 网站工具 / 截图 1. 产品功能支持任意网页 URL 高质量截图,包括动态内容和 JavaScript 渲染页面; 支持全页面截图和可视区域截图两种模式; 可自定义截图尺寸、设备像素比等参数…...

深入解析:精确位置定位,AR交互助力高效作业流程​

深入解析:精确位置定位,AR交互助力高效作业流程​pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospa…...

sdjaivkdshwqeofhsoejbc dfb vnhgtbv

几餐这一块...

开篇自我介绍随笔

一、自我介绍 生活里的我,有很多让自己沉浸其中的小爱好。我喜欢练书法,看着墨汁在宣纸上晕开,一笔一划勾勒出汉字的风骨,烦躁的心总能瞬间平静;也爱绘画,无论是用水彩记录生活里的小美好,还是用素描刻画细节,都是我表达想法的方式。除此之外,追综艺、追星也是我放松的…...

第八周

Hadoop 集群的稳定运行离不开完善的监控体系,搭建涵盖集群负载监控与日志收集的监控系统,可实时掌握集群运行状态,及时发现潜在问题。在集群负载监控方面,Ganglia 是常用的分布式监控工具,能够收集并展示集群中各节点的 CPU 使用率、内存占用量、磁盘 IO 速率、网络流量等…...

Tita 项目一体化管理:驱动项目全周期高效运营的引擎

一、企业项目管理的常见痛点 (一)项目启动规划阶段 目标模糊不清:项目启动时缺乏明确可量化的目标,团队成员对项目核心价值和预期成果理解不一致,导致后续工作方向偏离。例如,某研发项目因 “提升产品竞争力” 这一模糊目标,在功能开发中反复调整方向,浪费大量资源。计…...

飞行 NED坐标系(北东地坐标系):

在NED坐标系(北东地坐标系)中,飞机的‌天向速度‌、‌东向速度‌、‌北向速度‌的关系如下: 速度定义‌北向速度‌(N):飞行器在北方向上的移动速度。 ‌东向速度‌(E):飞行器在东方向上的移动速度。 ‌天向速度‌(D):飞行器在垂直地面向上的移动速度(通常为正)。…...

windows与linux环境下网络编程

windows与linux环境进行网络编程,使用的库是不一样的, 下面主要说一下windows环境下的网络编程; 网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包…...

在飞牛系统中通过docker形式部署Nginx proxy manager

在飞牛系统中通过docker形式部署Nginx proxy manager本文仅用用于记录。 目标: 分别通过以飞牛的图形化界面和docker compose实现以docker的方式部署Nginx proxy manager。 首先,管理员应当新建2个文件夹用于持久化数据存储(就是你想要留着的数据找个地方放好) 1.data 存放…...

Es索引同步异步Canal解耦方案

Es索引同步异步Canal解耦方案 首先传统的Es索引同步耦合性太高需要使用业务逻辑来同步,一旦在同步的时候服务器出现异常就用可能同步失败导致影响到其他业务,这里使用的是Canal中间件来实现异步同步索引。 简述: ​ 这里以电商项目为例,当需要添加,修改或删除商品时为了电…...

在Ubuntu上配置phpMyAdmin和WordPress环境

在Ubuntu中配置phpMyAdmin和WordPress环境需要执行一系列的步骤,包含安装LAMP(Linux, Apache, MySQL, PHP)栈,配置数据库,然后安装phpMyAdmin和WordPress。 下面是具体的配置步骤分解: 安装LAMP环境更新系统首先更新你的Ubuntu系统: sudo apt update sudo apt upgrade安装…...

“四人过河”经典问题

一、什么是“四人过河”经典问题 最早版本见于 MBA/奥数/信息学趣题: N 个人(通常 N=4)要从左岸到右岸,只有一条小船,容量至多 2 人;船划行时间 = 船上所有人中最大的那一项; 船不能空驶,每次必须有人把船划回来; 问:让所有人到达对岸的最短总时间是多少?二、通用数…...

完整教程:C#语言入门详解(18)传值、输出、引用、数组、具名、可选参数、扩展方法

完整教程:C#语言入门详解(18)传值、输出、引用、数组、具名、可选参数、扩展方法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…...

DevOps On Kubernetes

OSChina在深圳举办的”源创会年终盛典”上,华为云容器服务技术总监发表了名为《DevOps On Kubernetes》的主题演讲,演讲就如何将DevOps理念与容器技术相结合,实现容器化场景下的快速交付进行介绍,并重点介绍了华为云容器服务提供的持续交付工具——容器交付流水线(Contain…...

深耕Linux系统的道与术

- [著名系统内核专家张银奎老师Boolan直播间开讲:《深耕Linux系统的道与器》\_哔哩哔哩\_bilibili](https://www.bilibili.com/video/BV1pK42187EY/?vd_source=589169a942bb977a9dbcdd5f0ea6318b) - [张银奎 | 2024全球C++及系统软件技术大会](https://www.cpp-summit.org/sp…...

Debugging via Intel DCI 小蓝盒

- [PowerPoint 演示文稿](http://advdbg.org/gdk/download/20200722-DCI_DBG_FullStack.pdf)- [使用DCI单步调试Intel CPU,调试运行在其上的UEFI代码 - 程序员大本营](https://www.pianshen.com/article/4402459283/)- [[讨论]使用Intel DCI调试12代笔记本CPU来解决安装黑苹果…...

我做了个 AI 文档阅读神器,免费开源!

为了帮助大家免受文档的折磨,我用 AI 开发了个 AI 文档助手网站,可以帮你快速读懂各种复杂的文档、还帮你管理文档。大家好,我是程序员鱼皮。开学季到了,想必很多朋友要开始收集和阅读论文,像我自己学习新技术知识也会去阅读文档,我深知阅读文档的痛苦。明明每个词拆开都…...

20250913 P11503 [NordicOI 2018] Nordic Camping

P11503 [NordicOI 2018] Nordic Camping 二分 + DS 妙题 思路 首先我们可以发现。若有一个点 \((x, y)\),则我们可以通过二分求出以 \((x, y)\) 为左上角的最大空正方形的边长(记为 \(b[i][j]\)),check 就是判断以 \((x, y)\) 为左上角的边长为 \(mid\) 的正方形是否为空,…...

Dify实战训练营(基础班)(全免费值得收藏)

Dify实战训练营(基础班)(全免费值得收藏) Dify全链路实战【图文】 【01】【2025年最新版】Dify1.5.0升级部署实战指南 【02】Dify 代码执行节点实战:手把手解锁自定义业务开发能力 【03】Dify全链路实战 :TTS 实操,三步搭建语音化工作流 【04】【2025 年最新版】Dify 实…...

C 语言的历史和版本

C 语言的历史 1972年,贝尔实验室的 Dennis Ritchie 在开发 UNIX 操作系统时设计了 C 语言。C 语言是在 B 语言的基础上设计的。 C 语言的版本 K&R C K&R C 也叫 经典 C,以《The C Programming Language》【Brain Kernighan,Dennis Ritchie】(1987)(第 1 版)作为…...

PostgreSQL 上的向量搜索实践

本文整理自 IvorySQL 2025 生态大会暨 PostgreSQL 高峰论坛的演讲分享,演讲嘉宾:高策,TensorChord CEO。引言 本文主要分享如何在 PostgreSQL 上进行向量的搜索。 PostgreSQL 有非常多的 Extension,我们可以通过 Extension 的方式去扩展 PostgreSQL 能够支持的数据类型。这…...

【数据结构——图与邻接矩阵】 - 实践

【数据结构——图与邻接矩阵】 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important…...

(读书笔记)平衡掌控者

这本书比较短,主要是国内某数值设计师的MMORpg的设计经验。 虽然大部分是mmo制作的细节,可以不用太深挖,但还是有不少“游戏共性”可以参考和学习的。 主要是第2章和第4章的内容。 下面记录一些关键点并做了一些拓展。 ---------------------------------------------------…...

带头结点的单链表删除指定位置结点

1. 功能概述 bool ListDelete(LinkList &L, int i, ElemType &e) 函数的功能是:在带头结点的单链表 L 中,删除第 i 个位置的结点,并将被删除结点的数据通过引用参数 e 带回给调用者。函数名: ListDelete,清晰表达了其功能。 返回值: bool 类型。true 表示删除成功,…...

《文字、语言与数字的奇妙联结》读后感,大公司内部编码规范,本学期编码遵守规范

《文字、语言与数字的奇妙联结》读后感 读到 “文字和语言与数学,从产生起原本就有相通性,虽一度分道扬镳,最终仍能走到一起” 时,我被这种跨领域的深层联结深深触动。 最初,文字、语言与数学或许本是 “同根生”—— 它们都发源于人类认知世界、传递经验的需求。远古时期…...

[HTTP/Spring] RestTemplate : Spring的HTTP网络请求框架

0 序java应用开发中,使用http连接,访问第三方HTTP接口,通常使用的HTTP连接请求工具为HttpClient和OKHttp。这两种HTTP连接请求工具,使用起来比较复杂,新手容易出问题。如果使用spring框架,可以使用restTemplate来进行http连接请求。restTemplate默认的连接方式是java中的…...

深入解析:Linux使用-MySQL的使用

深入解析:Linux使用-MySQL的使用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fo…...

博客园-我的博客-的皮肤更换

皮肤地址 GShang写的博客皮肤 最近用的这个博主写的 cnbook ,强力安利!...

Apache Commons Math3 使用指南:强大的Java数学库 - 教程

Apache Commons Math3 使用指南:强大的Java数学库 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", m…...

HarmonyOS图形处理:Canvas绘制与动画开发实战

本文将全面介绍HarmonyOS 5中Canvas组件的使用方法和动画开发技巧,通过详细的代码示例和最佳实践,帮助您掌握图形绘制和动态效果实现的核心技能。1. Canvas组件基础与核心API Canvas是HarmonyOS中用于2D图形绘制的重要组件,提供了丰富的绘图接口和灵活的动画支持。 1.1 Canv…...

应用的微服务化-容器化-CI/CD

第一阶段:需要对应用按照云原生架构进行应用的微服务化改造,容器化改造,以及对接CI/CD平台,使得应用具备云原生的特点 <1.> 微服务注册配置中心 业务系统在进行微服务化改造的过程中,会涉及微服务的注册,以便于被其他所依赖的上游服务发现,分别是Naco,Eureka和Zo…...

[转发和重定向] 的核心定义

重定向和转发 不废话: “转发” 的核心定义: 服务端内部主导跳转、客户端无感知(仅 1 次请求)、浏览器 URL 不改变,与传统 Web 开发中 “转发” 的本质逻辑完全一致,只是实现载体(Nginx 路由层 vs 上层业务框架)不同,不影响其 “转发” 的属性归属。 “重定向”核心定…...

script setup 在 Vue 3 中的核心作用及具体实现方式

​​一、核心作用​​ 1. ​​简化 Composition API 语法​​​​自动暴露顶层变量​​:无需手动通过 return 暴露属性或方法,直接声明即可被模板使用。 <script setup> const count = ref(0); // 自动暴露给模板 </script> <template><p>{{ count }…...

0voice-1.4.1-cmake

cmake介绍...

test test test

this test string...

容器化改造基本原理

虚拟化和容器化是项目云化不可避免的两个问题。虚拟化由于是纯平台操作,一个运行于linux操作系统的项目几乎不需要做任何改造就可以支持虚拟化。而项目如果要支持容器化则需要做许多细致的改造工作。容器化相对于虚拟化的优势也相当明显,运行于裸机性能高,秒级启停容器,更不…...

Blogroll 友链

Blogroll 友链愿我如星君如月,夜夜流光相皎洁。...

Java 字节码与 ASM 框架实战解析

Java 虚拟机(JVM)以字节码(Bytecode)为基础执行所有 Java 程序。对于希望深入理解 Java 底层运行机制,或开发自定义编译器、性能探测器、动态增强框架(如代理、AOP)的开发者来说,掌握 Java 字节码结构与 ASM 等字节码操作工具极为重要。 本篇文章将深入解析 Java 字节码…...

计算机大数据毕业设计选题:基于Spark+hadoop的全球香水市场趋势分析系统 - 详解

计算机大数据毕业设计选题:基于Spark+hadoop的全球香水市场趋势分析系统 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…...

Dos的常用命令

常用的Dos命令 #盘符切换 #查看当前目录下的所有文件 dir #切换目录 cd change directory cd..返回上一级 #清理屏幕 cls(clear screen) #退出终端 exit #查看电脑的ip ipconfig #打开应用calc(计算器)mspaint(画图)notepad(笔记)#ping 命令 ping www.baidu.com#文件操作…...

持续集成自动化CI/CD

背景Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。持续集成(Continuous integration)是一种软件开发实践,即团队开…...

Lightroom Classic 2025(LRC 2025)安装教程(附直接安装包下载)+入门操作指南

一、LRC 2025下载及软件介绍 Lightroom Classic 2025 v14.0.1 是 Adobe 旗下专业图片后期处理软件,主打RAW 格式图片编辑,专为摄影师、摄影爱好者及数码摄影 / 图形设计从业者设计,提供从照片导入、整理到编辑、打印的全套服务。支持各类相机 RAW 文件解析,能高效完成照片调…...

2025/09/14 【二叉树11】完全二叉树的节点个数

222. 完全二叉树的节点个数 - 力扣(LeetCode)...