【题解】洛谷 CF334B


题目

原题链接

描述

输入8个点的坐标,如果这八个点是由三个不同的横坐标和三个不同的纵坐标任意组合而成的9个点中的外围8个点,输出 “respectable”,否则输出"ugly"。

输入输出

输入1

0 0
0 1
0 2
1 0
1 2
2 0
2 1
2 2

输出1

respectable

输入2

0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0

输出2

ugly

输入3

1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2

输出3

ugly

提示


解题思路

分析

题目大意:很重要!

杰拉尔德对八分制非常挑剔。他认为,任何像样的八点集都必须由三条不同的整数垂直直线和三条不同整数水平直线的所有成对交集组成,除了这九点的平均值。换句话说必须有三个整数 x 1 , x 2 , x 3 x_{1},x_{2},x_{3} x1,x2,x3 和另外三个整数 y 1 , y 2 , y 3 y_{1},y_{2},y_{3} y1,y2,y3,使得 x 1 < x 2 < x 3 x_{1}<x_{2}<x_{3} x1<x2<x3 并且 y 1 < y 2 < y 3 y_{1}<y_{2}<y_{3} y1<y2<y3,并且八点集合由所有点 ( x i , y j ) (x_{i},y_{j}) (xi,yj) 除了 ( x 2 , y 2 ) (x_{2},y_{2}) (x2,y2)

你有一套八分。看看Gerald能不能用这套?

假设三个 x x x 分别为 2 , 4 , 7 2,4,7 2,4,7,三个 y y y 分别为 3 , 5 , 6 3,5,6 3,5,6,那么你会得到下图:

其中,红点是合法的,蓝点是不合法的。

而我们的问题就是求给出的 8 8 8 个点能否组成如图的红色点。

我们来分析一下 8 8 8 个点合法的条件:

  1. 8 8 8 个点不能有重复的(否则就没有 8 8 8 个不重复的点了)。

  2. 必须由三条不同的整数垂直直线和三条不同整数水平直线的所有成对交集组成。

    可以得出 8 8 8 个点组成了一个矩形。

    进一步得出 8 8 8 个点的坐标值必须满足以下条件: x x x y y y 的值是最小的 x x x y y y 的值是最大的。

  3. x x x y y y 值的不同的个数必须恰好有 3 3 3 个,这样才能满足上图。

了解完这些之后我们就可以打代码了。

Code

#include<bits/stdc++.h>
using namespace std;
int maxx=-1,minx=1e7,maxy=-1,miny=1e7,x[10],y[10];
set<int>countx,county;
set<pair<int,int>>countxy;//set能自动去重 
signed main()
{
	for(int i=1;i<=8;i++)
	{
		scanf("%d%d",&x[i],&y[i]);
		maxx=max(maxx,x[i]),maxy=max(maxy,y[i]);
		minx=min(minx,x[i]),miny=min(miny,y[i]);
		countx.insert(x[i]),county.insert(y[i]);
		countxy.insert(make_pair(x[i],y[i]));
	}
	if(countx.size()!=3||county.size()!=3||countxy.size()!=8)
	{
		puts("ugly");
		return 0;
	}
	for(int i=1;i<=8;i++)
		if(x[i]!=minx&&x[i]!=maxx&&y[i]!=miny&&y[i]!=maxy)
		{
			puts("ugly");
			return 0;
		}
	puts("respectable");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值