codeforces 334B

http://codeforces.com/problemset/problem/334/B

题目大意:给你8个点,看是否能够竖着切三刀,横着切三刀。换句话说就是有3个xi,3个yi,可以组成任意的(xi.yi)除了(x2,y2)。

思路:用一个结构体存储。将所有点进行一个排序,x小的在前面,如果相同y小的在前面。判断s[0]到s[2] 是否x都是一样的,且y都是不一样的。再换一列,先看是否在不同的x了,从s[3]到s[4],判断x是否一样,并且判断y是否与之前对应的点的y相同,比如s[3]对应s[0],最后一行也是这样。。

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define M 100;
struct node
{
    int x,y;
}s[100];  //写做s[M]报错
int cmp(node a,node b)
{
    if(a.x!=b.x)
        return a.x<b.x;
    else
        return a.y<b.y;
}
int main()
{
    for(int i = 0;i < 8;i++)
    {
        scanf("%d %d",&s[i].x,&s[i].y);
    }
    sort(s,s+8,cmp);
    bool ok = true;
    for(int i = 1;i < 3;i++)
    {
        if(s[i].x!=s[i-1].x) ok = false;
        if(s[i].y==s[i-1].y) ok = false;   //要小心重复的点。。。如果重复直接是ugly
    }
    if(s[3].x==s[0].x || s[3].y!=s[0].y) ok = false;
    if(s[4].x!=s[3].x || s[4].y!=s[2].y) ok = false;
    if(s[5].x==s[0].x || s[5].y!=s[0].y) ok = false;
    if(s[6].x!=s[5].x || s[6].y!=s[1].y) ok = false;
    if(s[7].x!=s[5].x || s[7].y!=s[2].y) ok = false;
    if(ok)
        printf("respectable\n");
    else
        printf("ugly\n");
    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值