T1 外星人

2017 济南综合班 Day 4

二维前缀和

#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;
    }
}
View Code

相关文章: