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

NOIP 模拟赛十五

range

将所有值以及除以二所能得到的所有值插入一个数据结构里,如果变为 \(0\) 就停止。
那么答案即为第 \(m+1\) 大的值减去第 \(m\) 大的值和前缀最小值取 \(\min\) 的差。
维护这个使用权值树状数组做到小常数 \(O(n\log^2 n)\)
注意查排名要跳到 \(< k\) ,然后再 \(+1\)

点击查看

#include <bits/stdc++.h>
#define lep(i, a, b) for (int i = a; i <= b; ++i)
#define rep(i, a, b) for (int i = a; i >= b; --i)
#define il inline
#define cmx(a, b) std::max(a, b)
#define cmn(a, b) std::min(a, b)
#define gmx(a, b) a = cmx(a, b)
#define gmn(a, b) a = cmn(a, b)
#define int long longtemplate <typename T>
void _debug(const T& t) { std::cerr << t << '\n'; }
template <typename T, typename... Args>
void _debug(const T& t, const Args&...res) { std::cerr << t << ' '; _debug(res...); }
#define debug(...) _debug(#__VA_ARGS__ " =", __VA_ARGS__)const int LN = 2e5 + 7;
const int LS = 3e7;
typedef long long ll;
typedef std::pair<int, int> PII;bool FIRPOS;
int n, m, a[LN], V, c[LS], mn, tot;
std::vector <int> op[LN], Ab;
bool ENDPOS;il int id(int x) { return std::lower_bound(Ab.begin(), Ab.end(), x) - Ab.begin() + 1; }
il void ins(int x) { ++tot, x = V - x + 1; while (x <= V) ++c[x], x += x & -x; }
il int kth(int k) {int s = 0; gmn(k, tot);rep(i, 25, 0) if (s + (1 << i) <= V and c[s + (1 << i)] < k) s += (1 << i), k -= c[s];return V - s;
}
il int qry() { return Ab[kth(m + 1) - 1] - cmn(Ab[kth(m) - 1] / 2, mn); }signed main() {std::ios::sync_with_stdio(false),std::cin.tie(nullptr), std::cout.tie(nullptr);int c1 = clock(); int x;std::cin >> n >> m;lep(i, 1, n) {std::cin >> a[i]; x = a[i];op[i].emplace_back(x);while (true) { op[i].emplace_back(x /= 2); if (!x) break; }for (int v : op[i]) Ab.emplace_back(v);}std::sort(Ab.begin(), Ab.end()), Ab.erase(std::unique(Ab.begin(), Ab.end()), Ab.end()); V = Ab.size();mn = INT_MAX;lep(i, 1, n) { gmn(mn, a[i]);for (int v : op[i]) ins(id(v));std::cout << qry() << ' ';}std::cout << '\n';#ifdef DEBUGstd::cerr << clock() - c1 << " ms " << fabs(&ENDPOS - &FIRPOS) / 1024 / 1024 << " MB\n";
#endifreturn 0;
}

sequence

题目即为有多少种覆盖方案合法。
如果后 \(k\) 个那些覆盖到前 \(n-k\) 个是确定的,那么只存在一种对应方案使他们合法,于是我们只关心有哪些向前覆盖。
在值域考虑,只要覆盖就向其连边,最后会变成若干个环和若干个链。
每一条链的链尾就对应这 \(n-k\) 中哪些被覆盖,被覆盖的一定是值域的后缀,因为后面一定更大。
对于有 \(i\) 条链的情况,答案即为 \({k\choose i}\times (n-k)^{\underline{n-k-i}}\)
含义:确定哪些作为链尾的上一段,剩下的可以随便连(保证每个点的入度 \(\le 1\)

那么哪些 \(i\) 是能够造成贡献的呢?
发现一定是一个后缀,也就是 \([i', n-k]\) ,设 \(p_i=b_i^{-1}\)
\(i'=\min_{[p_i>p_{i+1}]} i\) ,即最长上升子序列的末尾值中可能的最小值。

使用堆搭配惰性删除动态维护 \(i'\) 即可。

点击查看代码

#include <bits/stdc++.h>
#define lep(i, a, b) for (int i = a; i <= b; ++i)
#define rep(i, a, b) for (int i = a; i >= b; --i)
#define il inline
#define cmx(a, b) std::max(a, b)
#define cmn(a, b) std::min(a, b)
#define gmx(a, b) a = cmx(a, b)
#define gmn(a, b) a = cmn(a, b)template <typename T>
void _debug(const T& t) { std::cerr << t << '\n'; }
template <typename T, typename... Args>
void _debug(const T& t, const Args&...res) { std::cerr << t << ' '; _debug(res...); }
#define debug(...) _debug(#__VA_ARGS__ " =", __VA_ARGS__)const int LN = 5e5 + 7;
const int mod = 998244353;
typedef long long ll;
typedef std::pair<int, int> PII;bool FIRPOS;int m, n, b[LN], k, fac[LN], inv[LN], pos[LN], p, sum[LN];
std::priority_queue <int, std::vector<int>, std::greater<int> > q; bool del[LN];bool ENDPOS;il int add(int u, int v) { return u + v >= mod ? u + v - mod : u + v; }
il void upa(int& u, int v) { u = add(u, v); }
il int mul(ll u, ll v) { return u * v >= mod ? u * v % mod : u * v; }
il void upm(int& u, int v) { u = mul(u, v); }
il int MyPow(int a, int b) { int ans = 1; for (; b; b >>= 1, upm(a, a)) if (b & 1) upm(ans, a); return ans; }
il int C(int n, int m) { if (n < 0 or m < 0 or n < m) return 0; return mul(mul(fac[n], inv[m]), inv[n - m]); }
il void lig(int u) { del[u] = false, q.push(u); }
il void ext(int u) { del[u] = true; }
il void ck(int x) {if (x < 1 or x > n - k) return;if (pos[x] > pos[x + 1]) lig(x);else ext(x);
}
il int qry() {while (del[q.top()]) q.pop();return n - k - q.top();
}int main() {std::ios::sync_with_stdio(false),std::cin.tie(nullptr), std::cout.tie(nullptr);int c1 = clock();int x, y;fac[0] = 1;lep(i, 1, LN - 1) fac[i] = mul(fac[i - 1], i);inv[LN - 1] = MyPow(fac[LN - 1], mod - 2);rep(i, LN - 1, 1) inv[i - 1] = mul(inv[i], i);std::cin >> n >> k >> m;lep(i, 1, n - k) std::cin >> b[i], pos[b[i]] = i, del[i] = true;lep(i, 1, n - k) ck(i);rep(i, n - k, 0) sum[i] = add(sum[i + 1], mul(C(k, i), mul(fac[k], inv[i])));std::cout << sum[qry()] << '\n';while (m--) {std::cin >> x >> y;std::swap(b[x], b[y]), pos[b[x]] = x, pos[b[y]] = y;ck(b[x] - 1), ck(b[x]), ck(b[y] - 1), ck(b[y]);std::cout << sum[qry()] << '\n';}
#ifdef DEBUGstd::cerr << clock() - c1 << " ms " << fabs(&ENDPOS - &FIRPOS) / 1024 / 1024 << " MB\n";
#endifreturn 0;
}

tour

首先考虑 type = 1 ,将关键点按照 \(x+y\) 排序,根据对角线顺序来 \(dp\)
\(f[a, b]\) 为第一人走到 \(a\) ,第二人走到 \(b\) 的方案数。
转移到 \(f[a, i]\)\(f[i, b]\) ,要求 \(i=a+1\)\(i=b+1\)

直接 \(dp\) 会有一个问题:

这条路径会被算到多次,原因在于我们在转移过程中无法保证不经过其他的关键点。
我们考虑容斥,对于两点之间的路径,我们钦定同时经过 \(S\) 中的关键点。
则一个其他关键点都不经过的方案即为 \(\sum_S (-1)^{\left|S\right|} f(S)\) ,我们直接将容斥系数融入 \(dp\) 过程。
每钦定一个关键点同时经过,它的所有转移同时乘上 \(-1\) 即可。
初值应设为 \(-1\) ,因为钦定了初始点重合。

对于 type = 2 ,我们将 \(A=(1, 2), B=(2, 1), C=(n-1, m), D=(n, m - 1)\) 加入关键点。
然后 f[A][B] = 1 ,按照如上 \(dp\)\(ans=2\times(f[C][D] - f[D][C])\)

下面来叙述这样为什么是对的,可以发现这是 \(LGV\) 引理 \(n=2\) 的特殊情况。
每一对 (\(A\rightarrow C ,B\rightarrow D)\) 中途如果有交点,取第一个交点交换路径,一定与一对 \((A\rightarrow D,B\rightarrow C )\) 构成双射。

点击查看

#include <bits/stdc++.h>
#define lep(i, a, b) for (int i = a; i <= b; ++i)
#define rep(i, a, b) for (int i = a; i >= b; --i)
#define il inline
#define cmx(a, b) std::max(a, b)
#define cmn(a, b) std::min(a, b)
#define gmx(a, b) a = cmx(a, b)
#define gmn(a, b) a = cmn(a, b)template <typename T>
void _debug(const T& t) { std::cerr << t << '\n'; }
template <typename T, typename... Args>
void _debug(const T& t, const Args&...res) { std::cerr << t << ' '; _debug(res...); }
#define debug(...) _debug(#__VA_ARGS__ " =", __VA_ARGS__)const int LN = 2e6 + 7;
const int LK = 5000 + 7;
const int mod = 998244353;
typedef long long ll;
typedef std::pair<int, int> PII;bool FIRPOS;int type, m, n, k, fac[LN], inv[LN];
PII a[LK]; int f[LK][LK], to[LK][LK];bool ENDPOS;il int add(int u, int v) { return u + v >= mod ? u + v - mod : u + v; }
il void upa(int& u, int v) { u = add(u, v); }
il int mul(ll u, ll v) { return u * v >= mod ? u * v % mod : u * v; }
il void upm(int& u, int v) { u = mul(u, v); }
il int MyPow(int a, int b) { int ans = 1; for (; b; b >>= 1, upm(a, a)) if (b & 1) upm(ans, a); return ans; }
il int C(int n, int m) { if (n < 0 or m < 0 or n < m) return 0; return mul(mul(fac[n], inv[m]), inv[n - m]); }
il int trn(int xa, int ya, int xb, int yb) { return C(xb - xa + yb - ya, xb - xa); }
void solve1() {std::memset(f, 0, sizeof(f));f[1][1] = mod - 1;lep(i, 2, k) {lep(j, 1, i - 2) {upa(f[i][i - 1], mul(f[j][i - 1], to[j][i])), upa(f[i - 1][i], mul(f[i - 1][j], to[j][i]));upa(f[j][i], mul(f[j][i - 1], to[i - 1][i])), upa(f[i][j], mul(f[i - 1][j], to[i - 1][i]));upa(f[i][i], mod - mul(add(f[i - 1][j], f[j][i - 1]), mul(to[i - 1][i], to[j][i])));}upa(f[i][i - 1], mul(f[i - 1][i - 1], to[i - 1][i])), upa(f[i - 1][i], mul(f[i - 1][i - 1], to[i - 1][i]));upa(f[i][i], mod - mul(f[i - 1][i - 1], mul(to[i - 1][i], to[i - 1][i])));}
}
void solve2() {std::memset(f, 0, sizeof(f));f[1][2] = 1;lep(i, 3, k) lep(j, 1, i - 1) {upa(f[i][i - 1], mul(f[j][i - 1], to[j][i])), upa(f[i - 1][i], mul(f[i - 1][j], to[j][i]));upa(f[j][i], mul(f[j][i - 1], to[i - 1][i])), upa(f[i][j], mul(f[i - 1][j], to[i - 1][i]));}
}int main() {std::ios::sync_with_stdio(false),std::cin.tie(nullptr), std::cout.tie(nullptr);int c1 = clock();fac[0] = 1;lep(i, 1, LN - 1) fac[i] = mul(fac[i - 1], i);inv[LN - 1] = MyPow(fac[LN - 1], mod - 2);rep(i, LN - 1, 1) inv[i - 1] = mul(inv[i], i);std::cin >> type >> n >> m >> k; ++k;lep(i, 2, k) {std::cin >> a[i].first >> a[i].second;if (a[i].first == 1 and a[i].second == 1) --i, --k;if (a[i].first == n and a[i].second == m) --i, --k;}int ans1, ans2;a[1] = { 1, 1 }, a[++k] = { n, m };lep(i, 1, k) lep(j, i + 1, k) to[i][j] = trn(a[i].first, a[i].second, a[j].first, a[j].second);solve1(), ans1 = f[k][k];a[1] = { 1, 2 }, a[k] = { 2, 1 }, a[++k] = { n, m - 1 }, a[++k] = { n - 1, m };std::sort(a + 1, a + 1 + k), k = std::unique(a + 1, a + 1 + k) - a - 1;std::sort(a + 1, a + 1 + k, [](const PII& x, const PII& y){ return x.first + x.second != y.first + y.second ? x.first + x.second < y.first + y.second : x.second < y.second; });lep(i, 1, k) lep(j, i + 1, k) to[i][j] = trn(a[i].first, a[i].second, a[j].first, a[j].second);solve2(), ans2 = add(f[k - 1][k], mod - f[k][k - 1]);upm(ans2, 2);if (type != 2) std::cout << ans1 << '\n';if (type != 1) std::cout << ans2 << '\n';#ifdef DEBUGstd::cerr << clock() - c1 << " ms " << fabs(&ENDPOS - &FIRPOS) / 1024 / 1024 << " MB\n";
#endifreturn 0;
}

query

\(\sqrt n\) 个操作为一组,对于一组内的操作,按顺序维护块。
翻转即将某些块裂开,然后给一些块打标记,询问同理,打上询问标记。

然后我们就维护了 \(O(\sqrt n)\) 个块,每个块存储了其贡献给了哪些询问。
枚举答案,对于那些目前没有答案且贡献给其的块内都没有当前答案值时,更新其答案为当前枚举量。

使用 bitset 维护上述过程。

具体的细节上,我们使用链表维护块的分类和打标记,枚举答案时我们提前存下每个值出现在哪些块里即可。
每处理完一组都重构当前序列。

复杂度 \(O(q\sqrt n + \frac{n^2}{w})\)

点击查看

#include <bits/stdc++.h>
#define lep(i, a, b) for (int i = a; i <= b; ++i)
#define rep(i, a, b) for (int i = a; i >= b; --i)
#define il inline
#define cmx(a, b) std::max(a, b)
#define cmn(a, b) std::min(a, b)
#define gmx(a, b) a = cmx(a, b)
#define gmn(a, b) a = cmn(a, b)template <typename T>
void _debug(const T& t) { std::cerr << t << '\n'; }
template <typename T, typename... Args>
void _debug(const T& t, const Args&...res) { std::cerr << t << ' '; _debug(res...); }
#define debug(...) _debug(#__VA_ARGS__ " =", __VA_ARGS__)const int LN = 2e5 + 7;
const int LQ = 484;
const int B = LQ - 1;
typedef long long ll;
typedef std::bitset <LQ> Bit;
typedef std::pair<int, int> PII;bool FIRPOS;struct list {int pre, suf, l, r; Bit qy;list() { qy.reset(), l = 0, pre = suf = r = -1; }
}lis[LN]; int st, ed = 1, liscnt = 1;
int op[LN], x[LN], y[LN], qry;
std::bitset <LN> vis;
std::vector <int> pos[LN];int n, m, a[LN], b[LN], ans[LN];bool ENDPOS;il int ABS(int x) { return x > 0 ? x : -x; }
il void ins(int x, int y) {lis[lis[x].suf].pre = y, lis[y].suf = lis[x].suf;lis[x].suf = y, lis[y].pre = x;
}
il int len(int x) { return ABS(lis[x].r - lis[x].l) + 1; }
il int rub() { int p = ++liscnt; lis[p] = list(); return p; }
void slk(int x, int k) {if (len(x) == k or !k) return;int y = rub(); lis[y].qy = lis[x].qy;if (lis[x].l <= lis[x].r)lis[y].r = lis[x].r, lis[y].l = lis[x].l + k, lis[x].r = lis[x].l + k - 1;else lis[y].r = lis[x].r, lis[y].l = lis[x].l - k, lis[x].r = lis[x].l - k + 1;ins(x, y);
}
il void init() {lep(i, 0, n) pos[i].clear();lep(i, 1, n) pos[a[i]].emplace_back(i);lis[st].suf = ed, lis[ed].pre = st, liscnt = 1;ins(st, rub()), lis[liscnt].l = 1, lis[liscnt].r = n;
}
void reform() { int x = lis[st].suf, len = 0;while (x != ed) {if (lis[x].l <= lis[x].r) lep(i, lis[x].l, lis[x].r) b[++len] = a[i];else rep(i, lis[x].l, lis[x].r) b[++len] = a[i]; x = lis[x].suf;}lep(i, 1, n) a[i] = b[i];init();
}
void rev(int l, int r) { int x = lis[st].suf, LEN = 0, L = st, R = ed; --l;while (x != ed) {if (LEN < l and l <= LEN + len(x)) slk(x, l - LEN), L = x;if (LEN < r and r <= LEN + len(x)) slk(x, r - LEN), R = lis[x].suf;LEN += len(x), x = lis[x].suf;} int fro = L, nxt;x = lis[R].pre;while (x != L) {nxt = lis[x].pre, lis[x].pre = fro, lis[fro].suf = x;std::swap(lis[x].l, lis[x].r), fro = x, x = nxt;}x = fro, lis[x].suf = R, lis[R].pre = x;
}
void cov(int l, int r, int k) { int x = lis[st].suf, LEN = 0, L = st, R = ed; --l;while (x != ed) {if (LEN < l and l <= LEN + len(x)) slk(x, l - LEN), L = x;if (LEN < r and r <= LEN + len(x)) slk(x, r - LEN), R = lis[x].suf;LEN += len(x), x = lis[x].suf;}x = lis[L].suf;while (x != R) lis[x].qy.set(k), x = lis[x].suf;
}
void solve() { int tot = 0;lep(i, 1, qry) {if (op[i] == 1) rev(x[i], y[i]);else cov(x[i], y[i], tot++);}int x = lis[st].suf;while (x != ed) {if (lis[x].l <= lis[x].r) lep(i, lis[x].l, lis[x].r) b[i] = x;else rep(i, lis[x].l, lis[x].r) b[i] = x; x = lis[x].suf;}Bit U, A, C; int cnt = 0;lep(i, 0, tot - 1) U.set(i);lep(i, 0, n + 1) { C = A;for (auto p : pos[i]) C |= lis[b[p]].qy;C = ~C & U, A |= C;while (C.any()) x = C._Find_first(), ans[x] = i, C.reset(x), ++cnt;if (cnt == tot) break;}lep(i, 0, tot - 1) std::cout << ans[i] << '\n'; qry = 0;reform();
}int main() {std::ios::sync_with_stdio(false),std::cin.tie(nullptr), std::cout.tie(nullptr);int c1 = clock();std::cin >> n >> m; int qk = 0;lep(i, 1, n) {std::cin >> a[i];if (!vis[a[i]]) vis.set(a[i]), ++qk;} init(); int tot = 0;qk = (qk > n / 2);lep(i, 1, m) { ++qry;std::cin >> op[qry] >> x[qry] >> y[qry]; tot += (op[qry] > qk);if (i == m or tot == B) solve(), tot = 0;}#ifdef DEBUGstd::cerr << clock() - c1 << " ms " << fabs(&ENDPOS - &FIRPOS) / 1024 / 1024 << " MB\n";
#endifreturn 0;
}

相关文章:

NOIP 模拟赛十五

Ds+计数DP+计数DP/容斥+根号重构range 将所有值以及除以二所能得到的所有值插入一个数据结构里,如果变为 \(0\) 就停止。 那么答案即为第 \(m+1\) 大的值减去第 \(m\) 大的值和前缀最小值取 \(\min\) 的差。 维护这个使用权值树状数组做到小常数 \(O(n\log^2 n)\) 。 注意查排…...

面试必备进程调度:fg,bg,jobs,ctrl+z,

面试必备进程调度:fg,bg,jobs,ctrl+z,& linux提供的fg和bg命令,可以让我们轻松调度正在运行的任务 假如你发现前天运行的一个程序需要很长的时间,但是需要干前天的事情,你就可以用ctrl-z挂起这个程序,然后可以看到系统的提示: [1]+ Stopped /root/bin/rsync.sh然后我们…...

完整教程:计算机毕设 java 多媒体教室管理系统 基于 Java+SSM 的多媒体教室运维平台 Java+MySQL 的教室预约与设备管理系统

完整教程:计算机毕设 java 多媒体教室管理系统 基于 Java+SSM 的多媒体教室运维平台 Java+MySQL 的教室预约与设备管理系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…...

笔记一

大家好!我是一名计算机相关专业的学生,平常做的最多的事情就是坐在电脑前敲代码解决各种 “小难题”。但写代码让我养成了 “遇到问题不逃避” 的思维,毕竟调试 BUG 时,多试一次可能就会有新突破。 说到值得分享的记忆,那就是我对于一些体育项目的热衷,比如打排球比赛,你…...

二十、指令流水线的基本实现

目录一、设计原则 (Design Principles)二、逻辑结构 (Logical Structure)三、时空图表示 (Space-Time Diagram Representation)总结一、设计原则 (Design Principles) 流水线的设计遵循几个核心原则,以确保其正确性和高效性。任务分解 (Decomposition)原则: 将指令的完整执行…...

物料模板匹配成功后,自动跟随的逻辑

问题简介 在对物料进行模板匹配时,往往是去匹配物料最突出的部分。然后在根据匹配到的位置。再去找我们需要测量或者检测部分。那么,这里就涉及到一个问题。该如何根据我们模板匹配到的特定位置,计算偏差值,并进行一些测量工具(卡尺,ROI)的跟随移动。 获取相对位置 此处…...

TCL t508n 关闭电话语音王提醒/改用4G

先吐槽一波( TCL的系统真的比原生还毛坯,到目前为止部分功能没有完善由于学业压力本文缺少部分图片说明,请见谅改用4g 打开拨号界面输入 ##4636## 设置首选网络类型 NR就是5G ,LTE是4G,WCDMA 3G 只用4g就选择LTE only 按照自己的需求选择 https://pic1.imgdb.cn/item/68c5…...

完整教程:Markdown 编辑器 语法

完整教程:Markdown 编辑器 语法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fon…...

天地图的带洞多边形操作

/** 往 polygon 中添加一个洞 */ function addHole(polygon: T.Polygon) {const handler = new T.PolygonTool(map)handler.open()handler.addEventListener(draw, ({ currentPolygon }) => {const oldLnglats = polygon.getLngLats()map.removeOverLay(currentPolygon)poly…...

k8s集群中一台etcd的pod异常

k8s集群中一台etcd的pod异常 记一次etcd报错2380bind already in use杀掉容器依然无效 起初通过命令:kubectl get pod -n kube-system 发现etcd容器异常在主节点通过kubectl logs查看pod日志发现很明显的报错端口被占用当时查看2380端口确实有在占用通过nerdctl stop指令试着停…...

深入解析:基于51单片机电子称称重压力检测阈值报警系统设计

深入解析:基于51单片机电子称称重压力检测阈值报警系统设计pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New",…...

手撕大模型|KVCache 原理及代码解析

在大型语言模型(LLM)的推理过程中,KV Cache 是一项关键技术,它通过缓存中间计算结果显著提升了模型的运行效率。本文将深入解析 KV Cache 的工作原理、实现方式,并通过代码示例展示其在实际应用中的效果。 一、为什么需要 KV Cache? 在 Transformer 进行自回归推理(如文…...

Kuby免疫学读书笔记01——造血干细胞

造血干细胞(HSC, Hematopoietic stem cell) 血细胞的起源造血干细胞位置骨髓(主要) 脾和肝(少量)分裂与分化正常状态多部份沉默 小部分分裂并分化 分裂得到的daughter cells部分依旧保持分裂分化潜力 另一部分分化为祖细胞,自我更新能力下降,并更倾向于分化为血细胞感染状态和…...

微信群机器人开发

使用微信云pad协议来开发微信机器人,可以开发的项目很多,例如一些娱乐机器人、云发单系统,私域流量的智能管理和营销拓客,还有一些自动采集和发朋友圈的云端系统等。每个行业都有需求这样的系统应用,在线教育、金融、电商已经一些个人微商应用。 可开发的功能包括但不限于…...

动态规划和马尔可夫决策对比

二、三大关键维度的效果对比 1. 问题适配性:动态规划适配 “简单线性流程”,MDP 适配 “复杂网状流程” 动态规划的优势在于 “处理线性、低维度的多阶段决策”,MDP 的优势在于 “处理多维、网状的动态决策”,二者在论文场景中的适配效果差异显著:动态规划在问题二中的适配…...

20250913 之所思 - 人生如梦

20250913 之所思这一周发生了太多的事,连续两晚彻夜失眠,咳嗽不止,但是工作又特别忙,没有时间和精力来复盘,今天身体稍微恢复了一点,好好整理一下9.9日晚上十点,软件刚刚发出来,同事们刚刚下班,结果某人说客户那边今天测试发现了两个严重的问题,一定要今天解决,并且…...

电视剧和综艺

综艺团建不能停电视机春色寄情人 爱情剧...

天地图编辑多边形和折线时,双击删除编辑点

天地图的编辑不支持删除编辑点的操作,于是研究写了一个。 // 使用 lodash 的防抖函数,防止双击时触发两次 const removeDotEventListener = debounce((e: T.MapEvent) => {// 获取被点击的目标// @ts-ignoreconst classList: DOMTokenList = e.originalEvent.target.class…...

Codeforces Round 1049 (Div. 2)

这场质量非常高。 A 我像区,我怎么卡 A 卡那么久。 睡眠不足会导致思路不清晰。这种题显然应该考虑所有位置不正确的字符。 对于一个在 \(0\) 位置上的 \(1\) 一定有一个与它未匹配的 \(0\),考虑能否通过一次操作将它们归位。 对于操作我们显然应该选择一个未归位的 \(0\) 和…...

POCamp 2023

P14011 [POCamp 2023] 珿求 / bootfall 神人题目。 令 \(A\) 为当前选择 \(a\) 的和,\(D\) 同理。我们要尽量让 \(\max(0, A - D) > \max(0, A - D)\)。 分类讨论,发现当 \(A - D \leq 0\) 且 \(A - D \leq 0\) 的时候一定平局,然后是两种特殊情况,若 \(A - D < 0 \w…...

美团AI面试

1、什么是正向代理和反向代理?两者有什么区别? 2、正向代理的作用时候,使用正向代理去访问被屏蔽的网站会怎样 3、JMM是什么,volintile的作用是什么 3、多线程中原子性的怎么实现的 4、数据库的事务分别是什么,他们解决了什么问题 5、可重复读是怎么实现的,他是怎么解决幻…...

技术面:Spring (bean的生命周期、创建方式、注入方式、作用域)

Spring Bean的生命周期是什么样的? 在Spring容器里一个Bean的从创建到销毁一般都是经历了以下几个阶段: 定义阶段(Bean元信息配置)=>实例化阶段(创建Bean对象)=>初始化阶段(执行初始化逻辑)=>使用阶段(Bean可用)=>销毁阶段(释放资源)定义阶段(BeanDef…...

马尔可夫决策

马尔可夫决策 马尔可夫决策:随机动态环境下序贯决策,其核心假设是 “马尔可夫性”—— 即 “未来状态的概率分布仅依赖于当前状态,与当前状态之前的历史无关”。MDP 的最终目标是找到一套最优策略 π(π: S→A,即 “在每个状态下选择哪个动作” 的规则) 马尔可夫决策可以…...

十九、指令流水线的基本概念

目录一、核心思想:类比工厂装配线二、一个经典的5级流水线模型(RISC)三、流水线的可视化:时空图四、流水线的优势五、流水线的挑战: hazards(冒险/冲突)总结指令流水线是一个计算机体系结构中的核心概念,旨在提高处理器的效率和吞吐率。 一、核心思想:类比工厂装配线 …...

本地布署Diffusers库 实现文生图 - yi

本地布署Diffusers库 实现文生图本地布署Diffusers库实现文生图 本次随笔,记录开源Python库Diffusers库的使用。 Diffusers库由Hugging Face维护,拥有活跃的社区和丰富的文档。Diffusers库是专注于扩散模型(Diffusion Models)的开源Python库。Diffusers库多任务支持​​:支…...

【光照】[光照模型]发展里程碑时间线

【从UnityURP开始探索游戏渲染】专栏-直达图形学光照模型发展史:技术演进与里程碑 section 基础奠基期(1960s-1970s)1967 : Lambert模型(漫反射) - Bui Tuong Phong提出 1971 : Gouraud着色 - Henri Gouraud发明顶点插值着色 1973 : Warnock算法 - 首次实现隐藏面消除 1975…...

算法设计作业-week1

任务一:企业内部编码规范参考 https://max.book118.com/html/2020/1120/8077006051003017.shtm任务二:《数学之美》阅读 读《数学之美》第二章:自然语言处理从规则到统计的启示 在阅读吴军博士《数学之美》第二章后,我对自然语言处理(NLP)的发展历程有了深刻的认识。这一…...

git merge

git merge :合并分支,从指定的分支名合并到当前所处的分支上。...

C语言学习

file:/D:/study/C语言/test1.c 现在开始学习c语言了,感觉跟java的大差不差,之后一段时间就学他吧。还有就是想吐槽一下devc的功能性有点差,连把代码文件拖拽到这里都不行。...

Ubuntu 的剪贴板

在 Ubuntu 上可以安装 copyq: sudo apt install copyq然后启动 copyq: copyqUbuntu 默认 Win+V 快捷键是打开通知,可以进行修改:为 copyq 添加快捷键,命令必须是 copyq toggle,名称可以随意。...

IDAPro--MCP详细配置教程

IDAPro--MCP详细配置教程 本文介绍如何配置idamcp实现ai自动化分析二进制文件,用于解决CTF竞赛中reverse与pwn类型的题目 IDA版本:9.1专业版 mcp:cherrystudio,lmstudio(本地部署ai) 一、项目简介 项目地址:https://github.com/mrexodia/ida-pro-mcp 功能:与IDApro实现联动…...

安全不是一个功能-而是一个地基

GitHub 主页 安全不是一个功能,而是一个地基 🔒🏗️ 我入行大概十年的时候,经历过一次让我至今心有余悸的安全事件。我们当时在为一个金融客户做一套在线交易系统。一个年轻的程序员,在写一个查询历史订单的接口时,为了图方便,直接用字符串拼接了 SQL 语句。是的,你没…...

你的测试又慢又不可靠-因为你测错了东西

GitHub 主页 你的测试又慢又不可靠?因为你测错了东西!🧪➡️✅ “我们应该写更多的测试。” 在每一个技术会议上,这句话都会被反复提起,就像一句神圣的咒语。人人都点头称是,人人都知道这是“正确”的。但一回到座位上,很多人脸上的表情就变得痛苦起来。😫 为什么?因…...

别再猜了-开始测量吧-一份实用的Web性能指南

GitHub 主页 别再猜了,开始测量吧:一份实用的 Web 性能指南 又是一年“黑五”,凌晨三点,我的手机像疯了一样尖叫起来。😱 不是闹钟,是监控警报。我们的主打电商服务,那个我们花了半年心血构建的系统,在流量洪峰面前,像纸糊的一样,彻底崩溃了。CPU 100%,内存溢出,日…...

你的中间件一团糟-是时候修复它了-️

GitHub 主页 中间件(Middleware)。这是 Web 开发中最强大的概念之一,也是最容易被滥用的概念之一。理论上,这是一个美妙的想法:一个由可复用组件构成的管道,可以检查、转换或终止请求。但在实践中,在我多年来使用过的许多框架中,它变成了一团乱麻,函数调用函数,控制流…...

文件不只是数据-一份稳健的文件处理指南

GitHub 主页 文件不只是数据:一份稳健的文件处理指南 📁💾 我永远忘不了那个下午。我们刚刚上线了一个允许用户上传个人头像的新功能。一切看起来都很完美。直到一个用户,出于无心或有意,尝试上传了一个他电脑上 2GB 大小的电影文件。🎬 服务器的内存监控瞬间飙红,CP…...

告别框架臃肿-我如何在不牺牲性能的情况下重新发现简单之美

GitHub 主页 我写了四十多年的代码。我刚开始编程的时候,打孔卡还是主流,互联网还只是大学实验室里一个遥不可及的梦想。我见证了无数语言和框架的兴衰起落,如同王朝更迭。我曾驾驭过技术的浪潮,也曾目睹它们在现实的海岸上撞得粉碎。如果说我从中学到了什么,那就是复杂性…...

超越-env-一份成熟的应用程序配置指南

GitHub 主页 超越.env:一份成熟的应用程序配置指南 🧐 让我给你讲个鬼故事。👻 几年前,我们团队的一个新来的小伙子,在一次紧急的线上热修复中,不小心把一个配置项搞错了。他本该把数据库地址指向生产环境的只读副本,结果,他忘了在生产服务器上更新那个小小的.env文件…...

20250913 NFLS 模拟赛 部分题目

简单倍增 #include <bits/stdc++.h> using namespace std; using ll = long long;int main() {freopen("fountain.in","r",stdin);freopen("fountain.out","w",stdout);ios::sync_with_stdio(false);cin.tie(nullptr);int n, q;…...

帐号内容定位

帐号定位原则和逻辑...

基于YOLOv8的茶叶病害识别项目|完整源码数据集+图形化界面+训练教程

本文介绍了一个基于 YOLOv8 的茶叶病害识别系统,从数据集构建、模型训练到 PyQt5 可视化界面实现,完整展示了茶叶病害检测的开发流程。该系统不仅能够识别 8类茶叶病虫害及健康状态,还具备 高精度、实时性强、操作简单 等特点,适用于科研、茶园管理以及智能农业应用场景。未…...

2025第三届“陇剑杯”网络安全大赛初赛-夺旗闯关赛wp

应急 应急响应siem百度网盘:通过网盘分享的文件:siem-加密.rar链接: https://pan.baidu.com/s/1wtfdSY2hThOAzVRGr9jwcg 提取码: e86t 解压密码:x2p1nsWFG4KfXp5BXegb题目描述:题目描述在比赛过程中变了一次,具体如下:初始:某企业内网被攻破了,请分析出问题并给出正确的…...

《Python数据结构与算法分析》第二弹《2.2.2 异序词检测示例》

2.2.2 异序词检测示例 要展示不同数量级的算法,一个好例子就是经典的异序词检测问题。如果一个字符串只是重排了另一个字符串的字符,那么这个字符串就是另一个的异序词,比如heart与earth,以及python与typhon。为了简化问题,假设要检查的两个字符串长度相同,并且都是由26个…...

深入解析:柱状图(Vue3)

深入解析:柱状图(Vue3)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size…...

计算机毕业设计springboot基于微信小程序的手机点餐软件 基于Spring Boot框架的微信小程序点餐体系设计与实现 微信小脚本点餐应用开发:Spring Boot技术的应用

计算机毕业设计springboot基于微信小程序的手机点餐软件 基于Spring Boot框架的微信小程序点餐体系设计与实现 微信小脚本点餐应用开发:Spring Boot技术的应用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block…...

二叉树的相关知识

二叉树的相关知识 问题一:知道二叉树的后序遍历和中序遍历,如何得到前序遍历 我的想法:遍历后序序列,找到根结点在前序序列中找到你刚刚找到的根结点根据找到的根结点,把前序列表中的序列分为两部分,一部分为根结点的左子树,另一部分为根结点的右子树分别遍历左子树和右…...

原假设的选择准则:总损失视角的假设检验

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 在假设检验中,原假设(𝐻0)与备择假设(𝐻1)的设定是统计推断的核心。原假设通常代表“无效应”或“现状维持”,提供可操作的基准,例如总体均值等于…...

dfs序基础+树上差分

dfs序基础1 给一棵有根树,这棵树由编号为 \(1\dots N\) 的 \(N\) 个结点组成。根结点的编号为 \(R\)。每个结点都有一个权值,结点 \(i\) 的权值为 \(v_i\)。 接下来有 \(M\) 组操作,操作分为两类:1 a x,表示将结点 \(a\) 的权值增加 \(x\); 2 a,表示求结点 \(a\) 的子树…...

Python中的if __name__ == __main__是什么?

引言 当初学习Python编程语言时,经常会遇到一段代码:if name == "main"。初学者可能会疑惑这段代码的作用和意义是什么,为什么要这样写。本文将对这段代码进行详细地解析,并提供代码示例,帮助初学者更好地理解这一概念。 if name == "main"的基本概念…...

钻石

目前抖音福袋扭蛋机的用户产出的DY钻石比较多,我们努力撮合商家和散户之间的交易,中间向商家收取一定的费用和少许保证金(为保证交易安全)。 收购价格为每100钻石7元,不封顶。比如100钻石/7元,1000钻石/70元,10000钻石/700元。打赏给我们指定的直播间即可。 需要出售和收…...