トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

2003db1.c

// 2003 domestic B
// 作成 2004.6.23

#include <stdio.h>

#define XX 500
#define YY 500

void print(short map[XX][YY],int xx,int yy);

int main(void)
{
	int i, j, s, t, x, y, w, h;
	int kaki, max, sum;
	short map[XX][YY];
	
	while(1){
		scanf("%d", &kaki);
//		printf("kaki=%d\n",kaki);
		if(kaki==0){
			break;
		}
		
		// マップをクリア
		for(y=0; y<YY; y++){
			for(x=0; x<XX; x++){
				map[x][y]=0;
			}
		}
		
		// マップのサイズ
		scanf("%d %d", &w, &h);
//		printf("w=%d h=%d\n",w,h);
		
		// 柿の木の座標読み込み
		for(i=0; i<kaki; i++){
			scanf("%d %d", &x, &y);
			map[x-1][y-1]=1;
		}
//		print(map,w,h);
		
		// 囲む長方形のサイズ
		scanf("%d %d", &s, &t);
//		printf("s=%d t=%d\n",s,t);
		
		// しらみつぶしに調べる
		max=0;
		for(y=0; y<h; y++){
			for(x=0; x<w; x++){
				sum=0;
				for(j=0; j<t; j++){
					for(i=0; i<s; i++){
						sum+=map[x+i][y+j]; // 長方形の中の柿の木の数
					}
				}
				if(max<sum){
					max=sum; // 最大値を求める
				}
			}
		}
		printf("%d\n",max);
	}
	return 0;
}

void print(short map[XX][YY],int xx,int yy)
{
	int x,y;
	
	for(y=0; y<yy; y++){
		for(x=0; x<xx; x++){
			printf("%d",map[x][y]);
		}
		printf("\n");
	}
}