Matrix 黑暗爆炸 - 2351
时间:2021-07-16
本文章向大家介绍Matrix 黑暗爆炸 - 2351,主要包括Matrix 黑暗爆炸 - 2351使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原题链接
考察:hash
思路:
二维hash模板题,先横着做一遍hash,再纵着坐一遍前缀和hash.获得\(a,b\)矩阵的hash值参考了前缀和公式:
\(sum[i,j] - sum[i,b]*p1[j-b]-sum[a,j]*p2[i-a]+sum[a,b]*p1[j-b]*p2[i-a]\)
Code
#include <iostream>
#include <cstring>
#include <set>
using namespace std;
typedef unsigned long long ULL;
const int N = 1010,P1 = 131,P2 = 13331,S = 110;
ULL x[N],y[N],p[2][N],s[N][N],temp[S][S];
char mp[N][N];
set<ULL> has;
int n,m,a,b,Q;
ULL query(int l,int r,int i,int j)
{
return s[i][j]-s[l][j]*p[0][i-l]-s[i][r]*p[1][j-r]+s[l][r]*p[0][i-l]*p[1][j-r];
}
void init()
{
p[0][0] = p[1][0] = 1;
for(int i=1;i<=m;i++)
p[0][i] = p[0][i-1]*P1;
for(int i=1;i<=n;i++)
p[1][i] = p[1][i-1]*P2;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
s[i][j] += s[i][j-1]*P2+mp[i][j];
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
s[i][j] += s[i-1][j]*P1;
if(i>=a&&j>=b)
{
ULL x = query(i-a,j-b,i,j);
has.insert(x);
}
}
}
int main()
{
scanf("%d%d%d%d",&m,&n,&a,&b);
for(int i=1;i<=m;i++)
scanf("%s",mp[i]+1);
init();
scanf("%d",&Q);
while(Q--)
{
for(int i=1;i<=a;i++) scanf("%s",mp[i]+1);
ULL tmp[S];
for(int i=1;i<=a;i++)
{
tmp[i] = 0;
for(int j=1;j<=b;j++)
tmp[i] = tmp[i]*P2+mp[i][j];
}
ULL sum = 0;
for(int i=1;i<=a;i++) sum = sum*P1+tmp[i];
if(has.count(sum)) puts("1");
else puts("0");
}
return 0;
}
原文地址:https://www.cnblogs.com/newblg/p/15021940.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 个性化调整坐标轴的颜色和位置
- matplotlib实现一页多图
- 用matplotlib实现画中画
- 为matplotlib设置不同的主题
- 模式利器 | MEIC污染源清单向WRF-Chem模式网格插值分配工具——meic2wrf
- Windows给力!可以扔掉Linux虚拟机了!
- 好慌,Redis这么多集群方案,要用哪种?
- 你真的了解MySQL 8.0 数据字典吗?
- 《调教命令行09》磁盘很廉价,放小电影最合适了
- 既保护隐私又快速训练,Facebook开源Opacus库,利用差分隐私训练PyTorch模型
- 为什么Java中1000==1000为false而100==100为true?
- Java自动化测试 (元素定位 23)
- Java自动化测试(webdriver常用API 24)
- Java自动化测试(特殊元素处理 25)
- 那些Vue开发遇到的坑---响应式系统