2026牛客暑期多校训练营1部分题解, 补题
2026牛客暑期多校训练营1部分题解, 补题链接: 点这里通过: A, E, F, C, J补题目: G过题部分F: Permutation Generationtag: 打表, 数学赛时打表发现整体平移排列即可, 证明如下:#include bits/stdc.h using namespace std; mt19937 rnd(time(NULL)); // #pragma GCC optimize(3) // #pragma GCC optimize(inline) // #pragma GCC optimize(Ofast) // 快速读入整数模板 template typename T inline void Read(Tx) { char cugetchar(); x0; bool fla0; // 负数标志 while(!isdigit(cu)) { if(cu-)fla1; cugetchar(); } while(isdigit(cu))xx*10cu-0,cugetchar(); if(fla)x-x; } #define int long long const int inf LLONG_MAX; #define pii pairint, int #define LL long long #define endl \n #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define rep(n) for(int i 0; i n; i) const int mod 1e97; void solve(){ int n, k, x; cin n k x; vectorint arr(n 1); int pos -1; for(int i 1; i n; i) { cin arr[i]; if (arr[i] x) pos i; } vectorint brr; for (int i pos; i n; i) { brr.push_back(arr[i]); } for (int i 1; i pos; i) { brr.push_back(arr[i]); } // for (int i 0; i n; i) { // cout brr[i] ; // } // cout endl; k n - k; for (int i k; i n; i) { cout brr[i] ; } for (int i 0; i k; i) { cout brr[i] ; } cout endl; } signed main(){ ios::sync_with_stdio(0),cin.tie(0), cout.tie(0); int T 1; // cin T; while(T--){ solve(); } return 0; }C:tag: 带权并查集还是比较容易看出来是并查集的. 重要条件: 题目给出后加入的体积不小于之前的. 所以对于op1: 连通块的鱼都可以吃掉, 就是并查集的大小. 对于op2: 我们将并查集后插入的点总是作为根, 维护其余点吃掉根需要的最小额外代价.(根有最大的体积)#include bits/stdc.h using namespace std; mt19937 rnd(time(NULL)); // #pragma GCC optimize(3) // #pragma GCC optimize(inline) // #pragma GCC optimize(Ofast) // 快速读入整数模板 template typename T inline void Read(Tx) { char cugetchar(); x0; bool fla0; // 负数标志 while(!isdigit(cu)) { if(cu-)fla1; cugetchar(); } while(isdigit(cu))xx*10cu-0,cugetchar(); if(fla)x-x; } #define int long long const int inf LLONG_MAX; #define pii pairint, int #define LL long long #define endl \n #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define rep(n) for(int i 0; i n; i) const int mod 1e97; int n, m, q; int ans; int tot; const int N 5e519; int dx[] {0, 0, 1, -1}; int dy[] {1, -1, 0, 0}; mappii, int mp; struct union_find_set{ int fa[N]; int sz[N]; int sz_row[N]; int dis[N]; union_find_set() { for (int i 0; i N; i) fa[i] i; } int find(int x) { if (fa[x] x) return x; int f fa[x]; fa[x] find(fa[x]); dis[x] max(dis[x], dis[f]); return fa[x]; } void unionset(int x, int y) { int px find(x); int py find(y); if (px py) return; fa[py] px; sz[px] sz[py]; dis[py] max((int)0, -sz[py] sz_row[px] 1); } void merge(int x, int y, int v) { int id mp[{x, y}]; sz_row[id] v; sz[id] 1; for (int i 0; i 4; i) { int nx x dx[i]; int ny y dy[i]; if (mp.count({nx, ny})) { int nid mp[{nx, ny}]; unionset(id, nid); } } } int query1(int x, int y) { int id mp[{x, y}]; find(id); return sz[id] - 1; } int query2(int x, int y) { int id mp[{x, y}]; int f find(id); return max(0LL, dis[id] - sz_row[id]); } }ufs; void op1(int x, int y, int v) { mp[{x, y}] tot; ufs.merge(x, y, v); ans ufs.query1(x, y); cout ans endl; } void op2(int x, int y) { ans ufs.query2(x, y); cout ans endl; } void solve(){ cin n m q; for (int i 1; i q; i) { int op; cin op; int x, y, v; cin x y; x ^ ans; y ^ ans; if (op 1) { cin v; op1(x, y, v); }else{ op2(x, y); } } } signed main(){ ios::sync_with_stdio(0),cin.tie(0), cout.tie(0); int T 1; // cin T; while(T--){ solve(); } return 0; }J: Show Handtag: 极小化极大Minimax博弈算法, 暴力赌神选一个牌, 自己选一个牌, 暴力计算(50*50)关键优化: 预处理每个人拿到某张底牌后最终五张牌的牌型权值.赛时没有这个优化, t了, 让gpt写了一个.#include bits/stdc.h using namespace std; using ull unsigned long long; int myCards[5]; int enemyCards[5]; bool used[52]; const char* answer[] { WoYaoYanPai, PaiMeiYouWenTi, GeiWoCaPiXie }; // 花色编号不影响大小只用于判断同花 int getSuit(char c) { if (c C) return 0; if (c D) return 1; if (c H) return 2; return 3; // S } int getRank(char c) { if (c 2 c 9) return c - 0; if (c T) return 10; if (c J) return 11; if (c Q) return 12; if (c K) return 13; return 14; // A } // 将一张牌映射到 [0, 51] int getCardId(const string s) { int rank getRank(s[0]); int suit getSuit(s[1]); return suit * 13 rank - 2; } int cardRank(int id) { return id % 13 2; } int cardSuit(int id) { return id / 13; } /* 牌型编码。 按照以下顺序比较 第一个数牌型 后续数字同牌型下的比较关键字 使用十五进制编码后可以直接比较 ull 大小。 */ ull encode(initializer_listint values) { ull result 0; int count 0; for (int x : values) { result result * 15 x; count; } // 补齐到固定长度6保证编码具有一致的字典序 while (count 6) { result * 15; count; } return result; } // 计算五张牌的牌型权值 ull evaluate(const int cards[5]) { int ranks[5]; int suits[5]; int cnt[15] {}; for (int i 0; i 5; i) { ranks[i] cardRank(cards[i]); suits[i] cardSuit(cards[i]); cnt[ranks[i]]; } sort(ranks, ranks 5, greaterint()); bool flush true; for (int i 1; i 5; i) { if (suits[i] ! suits[0]) { flush false; break; } } bool straight false; int straightHigh 0; // A2345A在顺子中视为1 if (ranks[0] 14 ranks[1] 5 ranks[2] 4 ranks[3] 3 ranks[4] 2) { straight true; straightHigh 5; } else { bool ok true; for (int i 1; i 5; i) { if (ranks[i - 1] ! ranks[i] 1) { ok false; break; } } if (ok) { straight true; straightHigh ranks[0]; } } int four 0; int three 0; int pairs[2] {}; int pairCount 0; int singles[5] {}; int singleCount 0; // 从大到小收集牌组方便直接比较 for (int rank 14; rank 2; --rank) { if (cnt[rank] 4) { four rank; } else if (cnt[rank] 3) { three rank; } else if (cnt[rank] 2) { pairs[pairCount] rank; } else if (cnt[rank] 1) { singles[singleCount] rank; } } // Royal Flush if (flush straight straightHigh 14) { return encode({9, 14}); } // Straight Flush if (flush straight) { return encode({8, straightHigh}); } // Four of a Kind if (four ! 0) { return encode({ 7, four, singles[0] }); } // Full House if (three ! 0 pairCount 1) { return encode({ 6, three, pairs[0] }); } // Flush if (flush) { return encode({ 5, ranks[0], ranks[1], ranks[2], ranks[3], ranks[4] }); } // Straight if (straight) { return encode({ 4, straightHigh }); } // Three of a Kind if (three ! 0) { return encode({ 3, three, singles[0], singles[1] }); } // Two Pairs if (pairCount 2) { return encode({ 2, pairs[0], // 较大的对子 pairs[1], // 较小的对子 singles[0] }); } // One Pair if (pairCount 1) { return encode({ 1, pairs[0], singles[0], singles[1], singles[2] }); } // High Card return encode({ 0, ranks[0], ranks[1], ranks[2], ranks[3], ranks[4] }); } /* 返回值 0我赢 1平局 2赌神赢 */ int compareGame(ull myValue, ull enemyValue) { if (myValue enemyValue) return 0; if (myValue enemyValue) return 1; return 2; } void solve() { memset(used, false, sizeof(used)); string s; for (int i 0; i 4; i) { cin s; myCards[i] getCardId(s); used[myCards[i]] true; } for (int i 0; i 4; i) { cin s; enemyCards[i] getCardId(s); used[enemyCards[i]] true; } /* 对每一张可能作为底牌的牌预处理对应牌型。 初始桌面有8张牌因此剩余44张牌可供赌神先选。 赌神选完后我再从剩下43张中选择。 */ ull myValue[52] {}; ull enemyValue[52] {}; for (int card 0; card 52; card) { if (used[card]) continue; myCards[4] card; enemyCards[4] card; myValue[card] evaluate(myCards); enemyValue[card] evaluate(enemyCards); } /* 博弈顺序 赌神先选择 enemyCard 我知道他的选择后再选择 myCard。 对固定的 enemyCard 我会选择结果最小的回应 0最优1其次2最差。 赌神会选择让最终结果最大的 enemyCard。 */ int finalResult 0; for (int enemyCard 0; enemyCard 52; enemyCard) { if (used[enemyCard]) continue; int myBestResult 2; for (int myCard 0; myCard 52; myCard) { if (used[myCard] || myCard enemyCard) continue; int result compareGame( myValue[myCard], enemyValue[enemyCard] ); myBestResult min(myBestResult, result); // 已经找到获胜回应不需要继续枚举 if (myBestResult 0) break; } // 赌神从他的所有选择中选择对他最有利的结果 finalResult max(finalResult, myBestResult); // 赌神已经找到必胜选择可以直接结束 if (finalResult 2) break; } cout answer[finalResult] \n; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin T; while (T--) { solve(); } return 0; }补提部分G: Precision Error?!tag: 数学, 思维重要条件: ϵ 0.01, 是一个比较大的数?构造两个平行的平面, 距离为1, 每个平面n个点, 平面内的点距离比ϵ大一点点, 两个平面之间的点距离不小于1, 可以证明不大于1 ϵ.赛时看到ϵ想当然认为是浮点误差, 没想到还可以这样.#include bits/stdc.h using namespace std; mt19937 rnd(time(NULL)); // #pragma GCC optimize(3) // #pragma GCC optimize(inline) // #pragma GCC optimize(Ofast) // 快速读入整数模板 template typename T inline void Read(Tx) { char cugetchar(); x0; bool fla0; // 负数标志 while(!isdigit(cu)) { if(cu-)fla1; cugetchar(); } while(isdigit(cu))xx*10cu-0,cugetchar(); if(fla)x-x; } #define ld long double #define int long long const int inf LLONG_MAX; #define pii pairint, int #define LL long long #define endl \n #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define rep(n) for(int i 0; i n; i) const int mod 1e97; void solve(){ int n; cin n; ld step 0.0101L; vectorpairld, ld points; for (int i 0; i 10; i) { for (int j 0; j 10; j) { if (points.size() n) continue; points.push_back({i * step, j * step}); } } cout n * 2 endl; cout fixed setprecision(10); for(auto [a, b] : points) { cout a b 0.0L endl; } for(auto [a, b] : points) { cout a b 1.0L endl; } } signed main(){ ios::sync_with_stdio(0),cin.tie(0), cout.tie(0); int T 1; // cin T; while(T--){ solve(); } return 0; }H: Rock-Paper-Scissors Mastertag: 马尔可夫决策过程MDP没有学习过这个知识点, 也没有做过相关题目, 第一次见, 未来几天搞明白这个点.

相关新闻

LangChain 与 LangGraph 实战:构建可编排的大模型智能应用

LangChain 与 LangGraph 实战:构建可编排的大模型智能应用

一、为什么需要 LangChain 和 LangGraph 直接调用大模型 API 很容易,但当应用变得复杂时,开发者很快会遇到以下问题: Prompt 散落在各个业务函数中;多轮对话上下文难以管理;工具调用逻辑与模型调用逻辑混杂&#xff1b…

2026/7/19 18:27:45阅读更多 →
Ansible for Kubernetes性能优化:如何加速Kubernetes集群的构建和部署过程

Ansible for Kubernetes性能优化:如何加速Kubernetes集群的构建和部署过程

Ansible for Kubernetes性能优化:如何加速Kubernetes集群的构建和部署过程 【免费下载链接】ansible-for-kubernetes Ansible and Kubernetes examples from Ansible for Kubernetes Book 项目地址: https://gitcode.com/gh_mirrors/an/ansible-for-kubernetes …

2026/7/19 18:25:44阅读更多 →
GitHub开源项目 odysseus 深度评测:自托管多智能体协作平台的架构与安全边界

GitHub开源项目 odysseus 深度评测:自托管多智能体协作平台的架构与安全边界

GitHub开源项目 odysseus 深度评测:自托管多智能体协作平台的架构与安全边界 本文摘要 本文针对开源项目 pewdiepie-archdaemon/odysseus 开展全量静态架构审计,从核心设计、调度能力、安全边界、工程成熟度四个维度完成量化评测,明确其在企业…

2026/7/19 18:25:44阅读更多 →
ngx_output_chain_get_buf

ngx_output_chain_get_buf

1 定义 ngx_output_chain_get_buf 函数 定义在 src/core/ngx_output_chain.cstatic ngx_int_t ngx_output_chain_get_buf(ngx_output_chain_ctx_t *ctx, off_t bsize) {size_t size;ngx_buf_t *b, *in;ngx_uint_t recycled;in ctx->in->buf;size ctx->buf…

2026/7/20 0:15:05阅读更多 →
互联网大厂常见Java面试题及答案汇总(2026持续更新)

互联网大厂常见Java面试题及答案汇总(2026持续更新)

金九银十即将来袭,又是一个跳槽的好季节,准备跳槽的同学都摩拳擦掌准备大面好几场,今天为大家准备了互联网面试必备的 1 到 5 年 Java 面试者都需要掌握的面试题,分别 JVM,并发编程,MySQL,Tomca…

2026/7/20 0:15:05阅读更多 →
python数据可视化技巧的100个练习 -- 31. 类别数据的点图

python数据可视化技巧的100个练习 -- 31. 类别数据的点图

重要性★★★☆☆ 难度★★☆☆☆ 你是一家零售公司的数据分析师。你的经理要求你可视化最近产品发布的客户满意度评级分布。评级是分类的,范围从“非常不满意”到“非常满意”。创建一个点图以显示每个评级类别的频率。使用 Python 进行数据处理和可视化。在代码中生成输入…

2026/7/20 0:13:05阅读更多 →
智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

智能体走进物理世界,千里科技携舱驾协同成果亮相WAIC 2026

在2026世界人工智能大会(WAIC 2026)举办期间,千里科技董事长、阶跃星辰董事长印奇作为特邀嘉宾出席大会开幕式并在大会主论坛(上午场)发表主题演讲《当智能体进入物理世界》。在印奇看来,"智能体"…

2026/7/20 0:13:05阅读更多 →
商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

商汤大装置发布“技术-生态-商业”闭环布局,共启“国产AI基础设施规模化商用元年”

7月18日,在WAIC 2026商汤科技 “基座大模型架构创新与生态合作论坛”上,商汤科技联合创始人、大装置事业群总裁杨帆发表《智变共生——加速AI基础设施持续升级》主题演讲,系统呈现了商汤大装置国产AI基础设施“技术-生态-商业”闭环布局&…

2026/7/20 0:13:05阅读更多 →
2026郑州美发学校避坑指南:拆解5种教学方式,谁在“流水线”谁在“真传技”?

2026郑州美发学校避坑指南:拆解5种教学方式,谁在“流水线”谁在“真传技”?

2026年想在郑州学美发,很多零基础学员最先搜索的问题就是:郑州美发学校哪家好?这个问题没有一个只看学校名字就能得出的答案。因为不同学校的课程方向、学习周期、教学方式和适合人群并不一样。有的更适合零基础,有的偏向发型师进修,还有的只做某一项短期技术培训。对于完全没…

2026/7/20 0:11:05阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/20 0:50:54阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/20 0:50:54阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/20 0:50:54阅读更多 →
2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

7月18日智东西消息,在2026 WAIC期间,努比亚联合字节豆包打造的二代“豆包手机”努比亚NaviX Ultra首次亮相,相比一代有诸多升级。智能体手机理念中兴通讯终端事业部总裁、努比亚总裁倪飞表示,智能体手机要从人操作手机变为手机帮人…

2026/7/20 0:01:04阅读更多 →
努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra:外观与功能双升级在2026 WAIC期间,首次亮相的努比亚NaviX Ultra吸引了众多目光。它是努比亚联合字节豆包打造的二代“豆包手机”,与一代努比亚M153相比,外观设计变化较大。其机身背部搭载横向排布的大尺寸影像模…

2026/7/20 0:01:04阅读更多 →
C# 将逗号分割的字符串转换为long,并添加到List<long>

C# 将逗号分割的字符串转换为long,并添加到List<long>

目录 方法1:使用Split和Convert.ToInt64 方法2:使用LINQ的Select和ToList 方法3:使用TryParse进行异常安全转换(推荐) 如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天…

2026/7/20 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/19 22:50:49阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/19 14:50:26阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/19 18:50:36阅读更多 →