T1 外星人
二维前缀和
#include<cstdio> #define N 1001 using namespace std; bool v[N][N]; int sum[N][N]; int main() { freopen("alien.in","r",stdin); freopen("alien.out","w",stdout); int r,c,p,q; scanf("%d%d%d%d",&r,&c,&p,&q); int x,y; for(int i=1;i<=p;i++) { scanf("%d%d",&x,&y); v[x][y]=true; } for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+v[i][j]; int ans=0; while(q--) { scanf("%d%d",&x,&y); for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) { if(i-x>=0 && j-y>=0 && sum[i][j]-sum[i-x][j]-sum[i][j-y]+sum[i-x][j-y]==0) ans++; if(x==y) continue; if(i-y>=0 && j-x>=0 && sum[i][j]-sum[i-y][j]-sum[i][j-x]+sum[i-y][j-x]==0) ans++; } printf("%d\n",ans); ans=0; } }