csp 201912-2 回收站选址

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解答:

#include <stdio.h>

int up(int xi,int yi,int xj,int yj);
int down(int xi,int yi,int xj,int yj);
int left(int xi,int yi,int xj,int yj);
int right(int xi,int yi,int xj,int yj);
int ul(int xi,int yi,int xj,int yj);
int ur(int xi,int yi,int xj,int yj);
int dl(int xi,int yi,int xj,int yj);
int dr(int xi,int yi,int xj,int yj);

int main(){
	int n,i,x[1000],y[1000],a,b,c,d,e,j,cnt;
	a=b=c=d=e=0;
	scanf("%d",&n);
	for(i=0; i<n; i++){
		scanf("%d %d",&x[i],&y[i]);
	}
	for(i=0; i<n; i++){
		cnt = 0;
		for(j=0; j<n; j++){
			if(j==i) continue;
			if(cnt == 4){
				break;
			}
			else if(up(x[i],y[i],x[j],y[j])){
				cnt++;
			}
			else if(down(x[i],y[i],x[j],y[j])){
				cnt++;
			}
			else if(left(x[i],y[i],x[j],y[j])){
				cnt++;
			}
			else if(right(x[i],y[i],x[j],y[j])){
				cnt++;
			}
		}
		if(cnt == 4){
			cnt = 0;
			for(j=0; j<n; j++){
				if(i==j) continue;
				if(cnt == 4){
					break;
				}
				else if(ul(x[i],y[i],x[j],y[j])){
					cnt++;
				}
				else if(ur(x[i],y[i],x[j],y[j])){
					cnt++;
				}
				else if(dl(x[i],y[i],x[j],y[j])){
					cnt++;
				}
				else if(dr(x[i],y[i],x[j],y[j])){
					cnt++;
				}
			}
			switch(cnt){
				case 0:a++;break;
				case 1:b++;break;
				case 2:c++;break;
				case 3:d++;break;
				case 4:e++;break;
			}
		}
	}
	printf("%d\n%d\n%d\n%d\n%d",a,b,c,d,e);
	return 0;
}

int up(int xi,int yi,int xj,int yj){
	int flag = 0;
	if(xi == xj && yi+1 == yj){
		flag = 1;
	}
	return flag;
}
int down(int xi,int yi,int xj,int yj){
	int flag = 0;
	if(xi == xj && yi-1 == yj){
		flag = 1;
	}
	return flag;
}
int left(int xi,int yi,int xj,int yj){
	int flag = 0;
	if(xi-1 == xj && yi == yj){
		flag = 1;
	}
	return flag;
}
int right(int xi,int yi,int xj,int yj){
	int flag = 0;
	if(xi+1 == xj && yi == yj){
		flag = 1;
	}
	return flag;
}
int ul(int xi,int yi,int xj,int yj){
	int flag = 0;
	if(xi-1 == xj && yi+1 == yj){
		flag = 1;
	}
	return flag;
}
int ur(int xi,int yi,int xj,int yj){
	int flag = 0;
	if(xi+1 == xj && yi+1 == yj){
		flag = 1;
	}
	return flag;
}
int dl(int xi,int yi,int xj,int yj){
	int flag = 0;
	if(xi-1 == xj && yi-1 == yj){
		flag = 1;
	}
	return flag;
}
int dr(int xi,int yi,int xj,int yj){
	int flag = 0;
	if(xi+1 == xj && yi-1 == yj){
		flag = 1;
	}
	return flag;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值