[bzoj2462] [BeiJing2011]矩阵模板
2016-03-21 14:13
393 查看
二维的hash。。
注意n的范围是1000........
真相似乎是全部输出1就行了233
View Code
注意n的范围是1000........
真相似乎是全部输出1就行了233
#include<cstdio> #include<iostream> #include<cstring> #define ull unsigned long long using namespace std; const int maxn=1013; const int modd=23333333; ull pre[maxn][maxn],v[maxn][maxn],jc[maxn]; int n,m,a,b,q; char s[maxn]; bool u[23333333]; int main(){ register int i,j,k; scanf("%d%d%d%d",&n,&m,&a,&b); for(i=jc[0]=1;i<=m;i++)jc[i]=jc[i-1]*233; for(i=1;i<=n;i++){ scanf("%s",s+1); for(j=1;j<=m;j++)pre[i][j]=pre[i][j-1]*233+s[j]; if(i==a) for(j=b;j<=m;j++) for(k=1;k<=i;k++)v[i][j]=v[i][j]*233+pre[k][j]-pre[k][j-b]*jc[b]; else if(i>a) for(j=b;j<=m;j++)v[i][j]=v[i-1][j]*233+pre[i][j]-pre[i][j-b]*jc[b]-(pre[i-a][j]-pre[i-a][j-b]*jc[b])*jc[a]; } for(i=1;i<=n;i++)for(j=1;j<=m;j++)u[v[i][j]%modd]=1; scanf("%d",&q); while(q--){ ull now=0,now1; for(i=1;i<=a;i++){ scanf("%s",s+1); for(now1=0,j=1;j<=b;j++)now1=now1*233+s[j]; now=now*233+now1; } bool flag=u[now%modd]; //for(i=a;i<=n&&!flag;i++)for(j=b;j<=m;j++)if(v[i][j]==now){flag=1;break;} puts(flag?"1":"0"); } return 0; }
View Code
相关文章推荐
- Android 圆角边框的实现方式汇总
- ios 获取屏幕的属性
- 《构建之法》第1.2.3章读后感和论伙伴重要性
- [bzoj3210] 花神的浇花集会
- apache + tomcat + mod_jk解决session会话共享的问题
- Hibernate 双向 多对一
- composer 安装,并安装yii2
- [better practice系列]Android中自定义全局变量、常量并采用高效的维护管理(一)
- oracle Plsql 执行update或者delete时卡死问题解决办法
- JDK源码研究之-----------HashMap AND HashCode
- 基础练习 杨辉三角形
- c#代码分析
- 闭关日记 Day08
- eclipse右键没有maven菜单
- empty()和isset()的区别
- 搭建IM服务 so easy
- 获取vendorid
- 数据结构4-堆栈
- 2016年第七届蓝桥杯C/C++程序设计本科B组省赛 抽签(代码填空)
- java查找算法(二)--二分递归查找