先是找规律
然后 贪心
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1e5+10;
int a[MAXN*2],b[MAXN*2];
int sum_a[MAXN*2],sum_b[MAXN*2];
int n,m,q;
int f(int x1,int y1,int x2,int y2)
{
if(x1<x2) swap(x1,x2);
if(y1<y2) swap(y1,y2);
return sum_a[x1]-sum_a[x2]+sum_b[y1]-sum_b[y2];
}
int main()
{
cin >> n >> m;
for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i+n]=a[i];
for(int i=1;i<=n*2;i++) sum_a[i]=a[i]==a[i-1]?sum_a[i-1]:sum_a[i-1]+1;
for(int i=1;i<=m;i++) scanf("%d",&b[i]),b[i+m]=b[i];
for(int i=1;i<=m*2;i++) sum_b[i]=b[i]==b[i-1]?sum_b[i-1]:sum_b[i-1]+1;
cin >> q;
for(int i=1;i<=q;i++)
{
int x1,x2,y1,y2;
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
if(x1<x2) swap(x1,x2);
if(y1<y2) swap(y1,y2);
int tmp=f(x1,y1,x2,y2);
// if(y2>y1) swap(y2,y1),swap(x2,x1);
tmp=min(tmp,f(x1,y1,x2,y2+m));
// if(x2>x1) swap(y2,y1),swap(x2,x1);
tmp=min(tmp,f(x1,y1,x2+n,y2));
// if(x2>x1) swap(y2,y1),swap(x2,x1);
tmp=min(tmp,f(x1,y1,x2+n,y2+m));
printf("%d\n",tmp);
}
/*
cout<<endl;
cout<<endl;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<(a[i]^b[j])<<' ';
cout<<endl;
}
*/
return 0;
}