题意:给你一个零一矩阵,q次询问,每次给你两个长宽相同的子矩阵,问你它们是恰好有一位不同,还是完全相同,还是有多于一位不同。

对每行分别哈希,先一行一行地尝试匹配,如果恰好发现有一行无法对应,再对那一行内部进行暴力找出那一行内部有几位不同即可。

#include<cstdio>
using namespace std;
typedef unsigned long long ull;
int n,m,q;
char a[1005][1005];
ull b[1005][1005],pw[1005];
int sum[1005][1005];
//int Abs(int x){
// return x<0 ? (-x) : x;
//}
int calc(int x1,int y1,int x2,int y2){
return sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];
}
int main(){
//freopen("d.in","r",stdin);
pw[0]=1;
for(int i=1;i<=1001;++i){
pw[i]=pw[i-1]*(ull)233;
}
int l[5],r[5];
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%s",a[i]+1);
}
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
sum[i][j]=sum[i-1][j]+a[i][j]-'0';
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
sum[i][j]+=sum[i][j-1];
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
b[i][j]=b[i][j-1]*(ull)233+(ull)(a[i][j]-'0');
}
}
scanf("%d",&q);
for(;q;--q){
for(int j=1;j<=4;++j){
scanf("%d%d",&l[j],&r[j]);
++l[j];
++r[j];
}
// int t1=calc(l[1],r[1],l[2],r[2]);
// int t2=calc(l[3],r[3],l[4],r[4]);
// if(Abs(t1-t2)>1){
// puts("Wrong");
// continue;
// }
int kuan=r[2]-r[1]+1,cnt=0,I,J;
for(int i=l[1],j=l[3];i<=l[2];++i,++j){
ull hs11=b[i][r[2]]-(b[i][r[1]-1]*pw[kuan]);
ull hs21=b[j][r[4]]-(b[j][r[3]-1]*pw[kuan]);
if(!(hs11==hs21)){
++cnt;
I=i;
J=j;
if(cnt>1){
break;
}
}
}
if(cnt>1){
puts("Wrong");
continue;
}
else if(cnt==0){
puts("Perfect");
continue;
}
cnt=0;
for(int k1=r[1],k2=r[3];k1<=r[2];++k1,++k2){
if(a[I][k1]!=a[J][k2]){
++cnt;
if(cnt>1){
break;
}
}
}
if(cnt>1){
puts("Wrong");
}
else{
puts("One difference");
}
}
return 0;
}

【字符串哈希】The 16th UESTC Programming Contest Preliminary F - Zero One Problem的更多相关文章

  1. 【set】【可持久化Trie】The 16th UESTC Programming Contest Preliminary K - Will the circle be broken

    题意:You are given an array A of N non-negative integers and an integer M. Find the number of pair(i,j ...

  2. 【推导】The 16th UESTC Programming Contest Preliminary L - Foxtrot

    题意:有n瓶药剂,其中只有一瓶药剂有毒.让你用最少的小白鼠试出哪瓶有毒.你只有一次给任意只小白鼠各喂食任意种类药剂的机会. m只老鼠就能对应2^m种“生死状态”的组合,给每种状态分配一个种类的药剂,然 ...

  3. The 15th UESTC Programming Contest Preliminary J - Jermutat1on cdoj1567

    地址:http://acm.uestc.edu.cn/#/problem/show/1567 题目: Jermutat1on Time Limit: 3000/1000MS (Java/Others) ...

  4. The 15th UESTC Programming Contest Preliminary C - C0ins cdoj1554

    地址:http://acm.uestc.edu.cn/#/problem/show/1554 题目: C0ins Time Limit: 3000/1000MS (Java/Others)     M ...

  5. The 15th UESTC Programming Contest Preliminary B - B0n0 Path cdoj1559

    地址:http://acm.uestc.edu.cn/#/problem/show/1559 题目: B0n0 Path Time Limit: 1500/500MS (Java/Others)    ...

  6. The 15th UESTC Programming Contest Preliminary K - Kidd1ng Me? cdoj1565

    地址:http://acm.uestc.edu.cn/#/problem/show/1565 题目: Kidd1ng Me? Time Limit: 3000/1000MS (Java/Others) ...

  7. The 15th UESTC Programming Contest Preliminary M - Minimum C0st cdoj1557

    地址:http://acm.uestc.edu.cn/#/problem/show/1557 题目: Minimum C0st Time Limit: 3000/1000MS (Java/Others ...

  8. The 16th UESTC Programming Contest Final 游记

    心情不好来写博客. 为了满足ykk想要气球的愿望,NicoDafaGood.Achen和我成功去神大耍了一圈. 因为队名一开始是LargeDumpling应援会,然后队名被和谐,变成了学校的名字,顿时 ...

  9. The 15th UESTC Programming Contest Preliminary G - GC?(X,Y) cdoj1564

    地址:http://acm.uestc.edu.cn/#/problem/show/1564 题目: G - GC?(X,Y) Time Limit: 3000/1000MS (Java/Others ...

随机推荐

  1. 弗罗贝尼乌斯範数(Frobenius norm)

    弗罗贝尼乌斯範数 对 p = 2,这称为弗罗贝尼乌斯範数(Frobenius norm)或希尔伯特-施密特範数( Hilbert–Schmidt norm),不过后面这个术语通常只用于希尔伯特空间.这 ...

  2. [转]KMP 算法

    KMP 算法,俗称“看毛片”算法,是字符串匹配中的很强大的一个算法,不过,对于初学者来说,要弄懂它确实不易.整个寒假,因为家里没有网,为了理解这个算法,那可是花了九牛二虎之力!不过,现在我基本上对这个 ...

  3. 2016.6.19——Length of Last Word

    Length of Last Word 本题收获: 1.str.size()为负 2.size_t引发的死循环 3.题目思路,有时在写代码时很不清楚边界条件的输出值是什么,若为面试,一定要问清楚. 题 ...

  4. MIUI7,Android版本5.0.2,一个程序发送自定义广播,另一个程序没有接收到

    对照<第一行代码——Android>进行学习,第五章中说到广播包的相关知识,前面获取广播等程序例程都可以跑的通,但是在5.3.2节中,程序A发送自定义广播,并接收自定义广播,同时程序B也接 ...

  5. Intent 对象在 Android 开发中的应用

    转自(http://www.ibm.com/developerworks/cn/opensource/os-cn-android-intent/) Android 是一个开放性移动开发平台,运行在该平 ...

  6. Serv-U 的升级及数据备份和迁移【转】

    Serv-U 配置备份   在serv-u7.x及以上版本安装目录下,有一个文件Serv-U.Archive是serv-u的配置文件,有一个users文件夹是Serv-U的域和用户的信息,那么我们只需 ...

  7. MySQL分页存储过程

    CREATE PROCEDURE ProcPage(in tableName varchar(20),#表名  in showField varchar(100),#要显示的列名  in whereT ...

  8. 数据库-mysql数据类型

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...

  9. JQuery怎么实现页面左侧菜单刷新后保留鼠标点击addclass的样式?

    $('ul.main-menu li a').each(function(){ if($($(this))[0].href==String(window.location)) $(this).pare ...

  10. No.12 selenium for python 截屏

    一.selenium for python 提供的几种截图方法 从上至下,很容易理解 1.as_file 获取当前window的截图,参数filename则表示截图的路径以及名称 出现IOError时 ...