第十一届中国大学生程序设计竞赛网络预选赛(CCPC Online 2025)

news/2025/9/21 16:09:04/文章来源:https://www.cnblogs.com/cjjsb/p/19103774

Preface

1

最近因为队友要准备预推免,很久没有一起训练过了;我个人也是把大部分精力都放在科研方面,算是挺久没写代码了

同时因为这场撞了本校预推免的原因,导致学校很多队伍被迫重组,但好在我们队没受影响堪堪凑齐了三个人

这场题还算符合我们队的口味吧,虽然因为大家都不会写代码了导致 dirt 很高而且写的很慢,最后压哨 8 题,没够到 9 题的及格线

但总体来说对很多题目想法都有,剩下没过的 B,H 都有思路;最后反正学校的 CCPC 名额也是打满了,只能说不粘锅了

PS:赛时代码后续待补……


A. 整点正方形计数2

队友开局写的,好像是个什么差分计数之类的东西,我题目都没看就过了



C. 造桥与砍树

为什么都知道用类普利姆的做法,我只会用公式克鲁斯卡尔

将所有数模 \(k\) 后排序,很容易对每个数 \(i\) 找到它的最优匹配数 \(mt_i\);而一旦我们选择了 \((i,mt_i)\) 这条边后 \(i\) 的最优匹配数就会右移

考虑把每个数对应的匹配权值扔到堆里模拟克鲁斯卡尔的过程,并用并查集维护当前的联通关系,每次连边后把下一个最优匹配加入堆中即可

但这样做复杂度显然会爆炸,因为存在大量已经在一个集合内的匹配会导致端点的移动数量打到 \(O(n^2)\) 级别

一个显而易见的观察就是随着匹配点向右的移动,我们可以一次性跳过一段连续的位置,因此可以再用一个并查集来维护空位,即可保证总复杂度 \(O(n(\log n+\alpha(n))\)

PS:事实上这题利用类似的思路写类普利姆的做法很好写,只能说公式人是这样的



D. 通配符匹配

挺套路的 DP+KMP,但实现起来细节挺多,扔给队友写了



E. 看比赛回放

签到,因为败方赢了 \(l=m-\frac{n+1}{2}\) 局,因此最坏需要看 \(2k+1\) 局才能确定


F. 连线博弈

很公式的一个题,首先看到博弈就想到打表 SG 函数

(值得一提的是刚开始犯病了以为每个子问题是独立的线段模型,后面找了反例才发现是图连通块内部的模型)

不难发现状态只和连通块内的点数有关,因此转移为 \(SG(x)=\operatorname{mex}_{y=0}^{x-2} SG(y)\oplus SG(x-y)\)

然后这个 SG 函数的规律是在几百项之后有 \(34\) 的周期,这还是给队友打了值相同的下标差分值后才找到的规律,只能说是十分神秘

剩下的问题就是怎么划分连通块了,一个经典 trick 就是用 Hash

对于一条线段,给其两侧的点集分别异或上一个不同的随机数,最后值相同的点集即属于同一个连通块内

统计个数很容易用 map 离线处理



G. 序列与整数对

很套路的根号分治,对于询问 \((x,y)\),令 \(l_x,l_y\) 分别表示 \(x,y\) 出现的次数

  • \(\max(l_x,l_y)\le \sqrt n\),此时直接 two pointers 扫一遍即可得出答案;
  • \(l_x>\sqrt n\),此时对应的 \(x\) 种类不超过 \(\sqrt n\),在固定 \(x\) 的情况下可以对任意 \(y\) 正向 \(O(n)\)​ 扫一遍原序列得到答案;
  • \(l_y>\sqrt n\),此时对应的 \(y\) 种类不超过 \(\sqrt n\),在固定 \(y\) 的情况下可以对任意 \(x\) 反向 \(O(n)\) 扫一遍原序列得到答案;

总复杂度 \(O((n+q)\sqrt n)\)



H. 教师

考虑一个 trivial 的 DP,令 \(f_{i,mask}\) 表示花费总时间为 \(i\),已经确定最大值的课程状态为 \(mask\) 的最大收益

每次考虑一个新的老师时,我们只更新当前状态的补集的子集即可,因为这样一定会把最优解给算到

\(O(mT\times 3^n)\) 的复杂度无法通过,考虑利用 sosdp 的思路,每次直接枚举某个课是不是当前教师作为最大值,复杂度降为 \(O(mT\times n2^n)\)

#include<cstdio>
#include<iostream>
#include<cstring>
#define int long long
#define RI register int
#define CI const int&
using namespace std;
const int N=55;
int n,m,k,T,V[N][10005],f[N][1<<14],val[14];
signed main()
{scanf("%lld%lld%lld%lld",&n,&m,&k,&T);for (RI i=0;i<n;++i)for (RI j=0;j<=k;++j)scanf("%lld",&V[i][j]);for (RI mask=0;mask<(1<<n);++mask){int res=0;for (RI i=0;i<n;++i)if ((mask>>i)&1) res+=V[i][0];for (RI i=0;i<=T;++i)f[i][mask]=res;}while (m--){int h,t; scanf("%lld%lld",&h,&t);for (RI i=0;i<n;++i) val[i]=V[i][0];while (h--){int x,y; scanf("%lld%lld",&x,&y); --x;val[x]=max(val[x],V[x][y]);}for (RI i=T-t;i>=0;--i){static int g[1<<14];memcpy(g,f[i],sizeof(g));for (RI j=0;j<n;++j)for (RI mask=0;mask<(1<<n);++mask)if (((mask>>j)&1)==0)g[mask|(1<<j)]=max(g[mask|(1<<j)],g[mask]+val[j]);for (RI mask=0;mask<(1<<n);++mask)f[i+t][mask]=max(f[i+t][mask],g[mask]);}}for (RI i=1;i<=T;++i)printf("%lld\n",f[i][(1<<n)-1]);return 0;
}

K. 置换环

直接逆序构造 \(n,n-1,\dots,1\) 即为最优解

考虑证明,因为 \(n\) 次移动过程中每个点都会作为不动点恰好一次,而上述构造方法在每个点不是不动点时,能保证剩下的点均构成若干二元环,这一定是最优的



M. 并行计算

队友都是分布式并行计算高手,我题意都没看就早早过了这个题,最躺赢的一集



Postscript

本来以为这个学期能有很多时间训练冲个好成绩,现在看来大家都很忙估计又要开始摆烂模式,比赛权当旅游了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908866.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:数据结构 栈和队列、树

完整教程:数据结构 栈和队列、树pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

深入解析:【ubuntu】ubuntu中找不到串口设备问题排查

深入解析:【ubuntu】ubuntu中找不到串口设备问题排查pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

酵母双杂交技术:高通量筛选的突破与不可忽视的三大局限性

在后基因组时代,解析蛋白质相互作用网络已成为理解生命活动机制、挖掘疾病靶点的核心任务。酵母双杂交技术通过不断革新,已从 “一对一” 的简单互作验证,升级为 “组学水平” 的高通量筛选工具 —— 不仅能覆盖全基…

ubuntu20.04测试cuda

import torch# 1. 检查 PyTorch 版本 print("PyTorch 版本:", torch.__version__) # 应为 2.4.0# 2. 检查 CUDA 是否可用 print("CUDA 可用:", torch.cuda.is_available()) # 应为 True# 3. 检查…

Python lambda

Python lambda 漫思

Android Studio 配置国内源

腾讯:https://mirrors.cloud.tencent.com/AndroidSDK/ 阿里:https://mirrors.aliyun.com/android.googlesource.com/

PyCharm项目上传GitHub仓库(笔记) - 教程

PyCharm项目上传GitHub仓库(笔记) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

从RAG出发

从RAG出发 1. RAG的概念和背景 1.1 什么是RAG RAG(Retrieval-Augmented Generation,检索增强生成)是一种将 信息检索 与 大语言模型生成 融合的技术架构。 其核心思想是:在模型生成前,通过检索外部知识库获取相关…

软件工程第二次作业——第一次个人编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience/homework/13468这个作业的目标 实…

【树状数组】codeforce 1288 E. Messenger Simulator

View Post【树状数组】codeforce 1288 E. Messenger Simulator题目 https://codeforces.com/problemset/problem/1288/E 题解 用以下测试用例进行讲解: 4 2 3 2上述测试用例的执行过程如图所示:初始状态下,第 \(i\)…

exsi 6.7 打补丁

exsi 6.7 打补丁exsi 6.7 打补丁esxi 6.7 打补丁WARNING:All commands run on the ESXi shell are logged and may be included insupport bundles. Do not provide passwords directly on the command line.Most tool…

Ubuntu 24.04 安装 DaVinci Resolve

Ubuntu 24.04 安装 DaVinci Resolve Step1: 下载并安装 chmod +x DaVinci_Resolve_Studio_19.0_Linux.run sudo ./DaVinci_Resolve_Studio_19.0_Linux.run -i可能会遇到依赖的问题, 需要先安装以下的几个库, 再以跳过检…

Promise中处理请求超时问题

1. 使用 Promise.race() 处理超时Promise<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="https://code.jquery.com/jquery-3.6.0.min.js">&l…

图解26:老生常谈的OSI网络模型

哈哈,之前画的不能在老的图了,重新拿出来让AI加个码看看效果,没有一点失真还不错,

【C++】指针

内存 程序中最重要的一件事,就是内存。当启动一个程序的时候,所有的代码都被载入到内存当中,内存中的所有的二进制指令都在告诉计算机你的代码需要做什么。 没有内存,计算机什么都做不了,而指针对于管理和操纵内存…

Quart

Quart📌 在软件/编程里 Quart 是一个 Python 异步 Web 框架,API 和 Flask 几乎完全兼容,但基于 asyncio,所以可以用 async/await 写异步代码。你可以把它理解为 “异步版 Flask”。典型用途:写高并发 Web 服务、…

AI驱动建筑行业数字化转型

AI驱动建筑行业数字化转型精细化管理为目标的数字化转型是建筑产业发展的必然趋势 建筑业当前面临着行业增速下降、劳动力成本上升、单个项目投标家数增加、资源环境约束加剧等挑战,且随着时代发展,建筑项目的规…

详细介绍:前端学习——CSS

详细介绍:前端学习——CSSpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

VSCode 把代码发送到激活状态下的终端

VSCode 把代码发送到激活状态下的终端 你有没有遇到过这样的情况:在VSCode里写Python代码时,经常需要打开好几个终端。但问题是,Shift+Enter快捷键只能把选中的代码发送到第一个终端。有时候,如果VSCode意外重启,…

java设计模式-工厂模式(文件上传) - 实践

java设计模式-工厂模式(文件上传) - 实践2025-09-21 15:33 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block…