尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【水印检查】字符串处理和矩阵的存入

【水印检查】字符串处理和矩阵的存入
📅 发布时间:2026/6/20 4:13:34

暴力求解方法:
逐块检查;

关键:字符串处理;矩阵的存入和读取;

字符串处理:

基于< string >:

  1. (append)string cur = "";如果在字符串后面拼接上什么>东西:cur+="[str]";或者cur.append("[str]");
  2. (length)cur.size();/cur.length();
  3. (substr)cur.substr(pos,len);从pos开始,取len个字符;
  4. (find)cur.find("abc");//从前往后 cur.rfind("abc");从后往前;
  5. (replace)cur.replace(pos,len,"new");
  6. (insert/erase)cur.insert(pos,"new");// cur.erase(pos,len);
  7. 大小写转换:使用; std::transform(s.begin(),s.end(),::tolower);//或者::toupper;
  8. 字符访问:s[i]/s.at(i)
  9. 转c字符串:s.c_str();在printf的时候使用

基于< cstring >:
多出拷贝,比较等;

矩阵的存入和读取

vector<vector> a(n,vector(n));//初始化全是0
vector<vector> a(n,vector(n,5));//初始化全是5
vector<vector> a;
a.resize(n, vector(n));//先初始化再resize

暴力求解时间复杂度为\(O(L\times n^2)\)
代码如下:

#include<iostream>
#include<vector>
#include<string>using namespace std;
int n,L;vector<string> transform(vector<vector<int>> mat,int k,int n){vector<string>res(n);for(int i = 0;i < n;i++){string cur = "";for(int j = 0;j < n;j++){if(mat[i][j] >= k)cur+="1";else cur+="0";}res[i] = cur;// cout << cur<<endl;}return res;
}
//在x到x+4行之间逐行进行模式匹配,9个字符串为一组作为匹配单位
bool compare(vector<string> str,vector<string> target,int x){int num = str[x].size();for(int i = 0;i <= num-9;i++){bool ans = true;for(int j = 0; j <= 4;j++){string sub = str[x+j].substr(i,9);//截取该段从i开始往后9个位置if(target[j] != sub){ans = false;break;}}if(ans)return true;}return false;
}int main(){cin >> n >> L;vector<string> target = {"111111111","100100101","100111110","100001100","111111100"};//输入图片vector<vector<int>> mat(n,vector<int>(n));//nxn矩阵for(int i = 0; i<n;i++){for(int j = 0;j < n;j++){cin >> mat[i][j];}}//暴力遍历对比,k属于0-L-1for(int k = 0; k < L; k++){vector<string> strmat = transform(mat,k,n);for(int x = 0; x <= n-5;x++){bool cur = compare(strmat,target,x);if(cur){cout << k <<endl;break;}}}
}

非暴力,寻找可行解:
我们可以知道,对于每一个5x9矩阵,由于具有mat[i][j] >=k才为1,mat[i][j]<=k才为0的特性,因此我们实际上可以得到一个线性规划问题,有5x9个方程,我们把在上下界中的全部解都存入答案中即可找到所有k;
这样就把暴力遍历转为求解问题,时间复杂度变为\(O(n^2)\);
代码:

#include<iostream>
#include<vector>
#include<string>
#include<set>using namespace std;
int n,L;
set<int> res;int main(){cin >> n >> L;vector<vector<int>> target = {{1,1,1,1,1,1,1,1,1},{1,0,0,1,0,0,1,0,1},{1,0,0,1,1,1,1,1,0},{1,0,0,0,0,1,1,0,0},{1,1,1,1,1,1,1,0,0}};//输入图片vector<vector<int>> mat(n,vector<int>(n));//nxn矩阵for(int i = 0; i<n;i++){for(int j = 0;j < n;j++){cin >> mat[i][j];}}//[i,j]是这个矩阵的第一个元素所在的地块,不需要进行二值化了for(int i = 0;i <= n-5;i++){for(int j = 0; j <= n-9;j++){int k_up = L;int k_low = 0;for(int x = 0; x <= 4;x++){for(int y = 0; y <= 8;y++){if(target[x][y] == 1){k_up = min(k_up,mat[i+x][j+y]);}else{k_low = max(k_low,mat[i+x][j+y]);}}}for(int s = k_low+1;s <= k_up;s++){res.insert(s);}}}for(auto e : res){cout << e << endl;}
}

这是我自己仿照写的,会导致TLE一个数据点

差分的思路:
差分做法关键:
diff[L] += 1
diff[R+1] -= 1
表示:从L开始可以,到R+1这里停止;因此加 1 的区间是[L,R];
需要还原的时候,比如说s[i]就等于:\(num(系数)*\sum_{i=0}^{i}diff[i]\)
因此关键改动在:

    vector<int> diff(L+3);//[i,j]是这个矩阵的第一个元素所在的地块,不需要进行二值化了for(int i = 0;i <= n-5;i++){for(int j = 0; j <= n-9;j++){int k_up = L;int k_low = 0;for(int x = 0; x <= 4;x++){for(int y = 0; y <= 8;y++){if(target[x][y] == 1){k_up = min(k_up,mat[i+x][j+y]);}else{k_low = max(k_low,mat[i+x][j+y]);}}}if(k_up >= k_low+1){diff[k_low+1]+=1;//从diff[k_up+1]-=1;}}}for(int i = 0; i <= L; i++){diff[i] += diff[i-1];   // 恢复真实次数,是否此处被允许要考虑到前面是否存在区间包含它,如果存在那么就允许if(diff[i] > 0){cout << i << endl;}}

相关新闻

  • 从零部署网站客服系统:我踩过的域名和服务器坑,帮你省下几千块!
  • 微波烘干设备厂家技术实力与行业应用解析
  • 2025 年最新推荐激光切管机厂家排行榜:聚焦高效高精度设备,助力企业提升金属管材加工品质高速 / 高精度 / 零尾料 / 免画图 / 全自动 / 三卡盘激光切管机公司推荐

最新新闻

  • 2026市面上专业的废弃输送pp防静电管生产商排行 - 品牌排行榜
  • 豆包AI不是智能助手,而是对话式信息接口
  • GLM-5.1深度解析:国产大模型的中文长文本结构化语义建模突破
  • 如何解决3D渲染中球形全景图到立方体贴图转换的技术挑战
  • Python国密SM2签名验签实战:gmssl v3.2.1避坑指南与ID参数详解
  • 2026年评价高的激光切管加工/激光切管厂家精选合集 - 行业平台推荐

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号