习题5-6 对称轴(Symmetry, UVa1595)

//习题5-6 对称轴(Symmetry, ACM/ICPC Seoul 2004, UVa1595)
/*
定义 map<pair<int, int>, int> vis
插入时赋值为1 vis[pair(x, y)]++;
查询一个关键字是否存在:if(!vis[pair<int, int>(x, y)]) ... 如果不存在会新建立一个关键字,返回值为0
是否可以等同于if(!vis.count(pair<int, int>(x, y))) ...呢?
*/
struct A {
	int x, y;
	bool operator<(const A &rhs) {
		return x < rhs.x;
	}
}a[1005];
using PII = pair<int, int>;
PII p[1005];
map<PII, int> vis;

int main() {
	int T, n;
	//IN(); OUT();
	scanf("%d", &T);
	while (T--) {
		vis.clear();
		scanf("%d", &n);
		for (int i = 0; i < n; ++i) {
			scanf("%d%d", &a[i].x, &a[i].y);
			p[i] = make_pair(a[i].x, a[i].y);
			if (!vis.count(p[i])) vis[p[i]]++;
		}
		sort(a, a + n);
		int mid = n / 2, s;
		if (n % 2) s = 2 * a[mid].x;
		else s = (a[mid].x + a[mid - 1].x);
		//printf("s = %d\n", s);
		int x, y;
		bool flag = true;
		for (int i = 0; i < n; i++) {
			x = s - a[i].x;
			y = a[i].y;
			//printf("(%d, %d) -> (%d, %d)\n",a[i].x, a[i].y, x, y);
			if (!vis.count(PII(x, y))) {
				flag = false;
				break;
			}
		}
		if (flag) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值