CSP202509B. 水印检查 满分题解
大家好今天我们来看CSP202509B. 水印检查这道题目题目要求在一幅 n×n 的灰度图像中找出所有可能的阈值 k0 到 L-1 之间的整数使得按这个阈值二值化后图像中存在一个 5×9 的子区域其黑白像素分布与给定的 CSP 水印模板完全一致。最后按从小到大的顺序输出所有符合条件的 k。80分题解我们遍历从0到L-1的所有整数k对每个整数k我们判断此时的矩阵是否存在一个5×9的子区域与模板匹配时间复杂度O(n²L)代码如下#include bits/stdc.h using namespace std; int match[5][9] { {0,0,0,0,0,0,0,0,0}, {0,1,1,0,1,1,0,1,0}, {0,1,1,0,0,0,0,0,1}, {0,1,1,1,1,0,0,1,1}, {0,0,0,0,0,0,0,1,1} }; int a[205][205]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, L; cin n L; for (int i 0; i n; i) { for (int j 0; j n; j) { cin a[i][j]; } } for (int k 0; k L; k) { bool found false; for (int i 0; i n - 5 !found; i) { for (int j 0; j n - 9 !found; j) { bool ok true; for (int x 0; x 5 ok; x) { for (int y 0; y 9 ok; y) { if (match[x][y] 1) { if (a[ix][jy] k) ok false; } else { if (a[ix][jy] k) ok false; } } } if (ok) found true; } } if (found) printf(%d\n, k); } return 0; }这段代码只能得到80分因为当L取65536时数量级达到了10¹¹考虑优化优化思路在刚才的代码中我们发现L是导致时间复杂度过大的重要因素考虑消除掉L的方法。我们发现对于每个5×9的子区域黑色位k白色位≥k所以对任意一个5×9的子区域来说只要k比最大的黑色位大同时小于等于最小的白色位k都是有效的令最大的黑色位对应值为mx,最小的白色位对应值为mn我们就得到了这样一段有效的答案区间mx,mn]这样问题就转换成了给定n²段区间从小到大输出区间内所有整数如果你在这段输出使用暴力遍历那么你又会得到80分因为暴力需要OL的枚举结合n²段区间时间复杂度再次来到On²L我们可以维护一段长为L差分数组diff对每段的起点diff[mx1],表示覆盖数1每段的终点diff[mn]--表示覆盖数-1处理完所有区间后我们从0到L-1遍历维护一个cnt表示被多少个区间覆盖每到一个k先执行cntdiff[k]如果cnt0说明有区间覆盖输出k这样只需要OL扫一遍输出diff0的位置即可总时间复杂度为On²L代码如下#include bits/stdc.h using namespace std; int match[5][9] { {0,0,0,0,0,0,0,0,0}, {0,1,1,0,1,1,0,1,0}, {0,1,1,0,0,0,0,0,1}, {0,1,1,1,1,0,0,1,1}, {0,0,0,0,0,0,0,1,1} }; int a[205][205]; int diff[70000]; // 差分数组 int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, L; cin n L; for (int i 0; i n; i) { for (int j 0; j n; j) { cin a[i][j]; } } for (int i 0; i n - 5; i) { for (int j 0; j n - 9; j) { int mx 0; // 黑色最大值 int mn INT_MAX; // 白色最小值 for (int x 0; x 5; x) { for (int y 0; y 9; y) { if (match[x][y] 1) { mx max(mx, a[ix][jy]); } else { mn min(mn, a[ix][jy]); } } } if (mx 1 mn) { diff[mx 1]; if (mn 1 L) { diff[mn 1]--; // 差分处理 } } } } int cnt 0; for (int k 0; k L; k) { cnt diff[k]; if (cnt 0) { printf(%d\n, k); } } return 0; }这道题的核心技巧在于把每个 k 去匹配窗口反转成每个窗口能匹配哪些 k然后用差分数组高效统计区间覆盖将 L 的因子从乘法降为加法从而把复杂度从 O(n²L) 降到 O(n²L)。这是一种典型的离线区间统计技巧在很多题目中都有应用。感谢阅读欢迎在评论区留言讨论转载请标明出处

相关新闻

AI论文工具如何提升继续教育学术写作效率

AI论文工具如何提升继续教育学术写作效率

1. 项目概述:AI论文工具如何改变继续教育学习模式继续教育领域的学术写作正面临前所未有的效率革命。作为从业十年的教育科技研究者,我见证了AI工具从简单的语法检查发展到如今能够辅助完成文献检索、思路构建、格式规范等全流程论文写作支持。这次整理的…

2026/7/23 20:33:29 阅读更多 →
深入解析EMAC寄存器:从缓冲区管理到硬件流控与QoS实现

深入解析EMAC寄存器:从缓冲区管理到硬件流控与QoS实现

1. 项目概述与核心价值在嵌入式网络开发领域,尤其是工业控制、汽车电子或高性能通信设备中,网络通信的稳定性和实时性往往是决定系统成败的关键。很多工程师在驱动开发时,习惯于调用厂商提供的库函数或操作系统提供的标准网络接口&#xff0c…

2026/7/22 4:03:16 阅读更多 →
UE5专用服务器(DS)与客户端完整打包部署实战指南

UE5专用服务器(DS)与客户端完整打包部署实战指南

1. 项目概述:为什么UE5的DS打包是个技术活?如果你正在用UE5开发一个多人游戏,并且已经走到了“打包部署”这一步,那你大概率已经和蓝图、C、网络同步这些概念搏斗过一番了。但当你兴冲冲地点击“打包项目”,准备把劳动…

2026/7/22 4:03:16 阅读更多 →

最新新闻

搜狐新闻出现问题-----------开始的几篇文章全都是一样的

搜狐新闻出现问题-----------开始的几篇文章全都是一样的

一般来说;像今日头条这样的app,只要你刷新,开始文章永远都不一样,但是搜狐新闻经过实践观察发现--------------他的开头的文章似乎都是一样的,如果你只是点击开头位置,经过几十次后,文章可能就都…

2026/7/25 5:51:39 阅读更多 →
从Java到大模型:传统开发者转型AI的核心路径

从Java到大模型:传统开发者转型AI的核心路径

1. 从传统开发转向大模型赛道的职业跃迁路径去年一位从Java后端转型大模型算法的字节跳动工程师案例在技术圈引发热议——11万月薪的背后,是传统开发者抓住AI浪潮的典型成功路径。作为经历过这个转型过程的从业者,我想分享从基础设施开发转向大模型领域的…

2026/7/25 5:51:39 阅读更多 →
AI销冠系统:数字化销售转型的核心架构与落地实践

AI销冠系统:数字化销售转型的核心架构与落地实践

1. 项目背景与核心价值去年我在为一家SaaS企业做数字化销售转型咨询时,发现他们的销售团队每天要花费60%以上的时间在重复性工作上:客户资料录入、需求分析文档撰写、报价单制作、跟进记录整理...这些事务性工作严重挤占了真正的销售沟通时间。当时我们尝…

2026/7/25 5:51:39 阅读更多 →
开源视频生成模型的技术原理与应用实践

开源视频生成模型的技术原理与应用实践

1. 开源视频生成模型的行业背景与现状2026年4月即将开源的视频生成模型,标志着生成式AI技术发展到一个全新阶段。当前视频生成领域正经历从实验室研究到产业应用的转折点,各大科技公司和研究机构都在这个赛道加速布局。从技术演进路径来看,视…

2026/7/25 5:51:39 阅读更多 →
3大核心突破:ExifToolGui如何重新定义照片元数据管理体验

3大核心突破:ExifToolGui如何重新定义照片元数据管理体验

3大核心突破:ExifToolGui如何重新定义照片元数据管理体验 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 在数字摄影时代,照片元数据管理曾是一个专业而繁琐的任务。摄影师们面临三大…

2026/7/25 5:51:39 阅读更多 →
2026甄选:宁波8大英语小升初机构横评

2026甄选:宁波8大英语小升初机构横评

每年一到升学季,宁波家长的焦虑几乎写在脸上。无论是镇海、海曙还是鄞州,重点学校的竞争早已不是孩子一个人的战斗,而是一个家庭信息决策与资源规划的系统工程。在众多升学痛点中,英语小升初的衔接之所以牵动神经,是因…

2026/7/25 5:50:39 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

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

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

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

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

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

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

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

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

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

2026/7/24 18:52:18 阅读更多 →

月新闻