codeforces 334B
1379 ワード
http://codeforces.com/problemset/problem/334/B
縦に三刀、横に三刀を切ることができるかどうか、8つの点をあげます.言い換えれば、3つのxi、3つのyiがあり、任意の(xi.yi)を構成することができるのは(x 2,y 2)を除く.
構想:1つの構造体で格納します.すべての点を並べ替え、xが小さい場合は前に、同じyが小さい場合は前に並べ替えます.s[0]からs[2]までxが同じかどうかを判断し、yが異なる.さらに列を変えて、まず異なるxにあるかどうかを見て、s[3]からs[4]まで、xが同じかどうかを判断し、yが以前に対応していた点のyと同じかどうかを判断し、例えばs[3]がs[0]に対応しているかどうかを判断し、最後の行もそうである.
コード:
縦に三刀、横に三刀を切ることができるかどうか、8つの点をあげます.言い換えれば、3つのxi、3つのyiがあり、任意の(xi.yi)を構成することができるのは(x 2,y 2)を除く.
構想:1つの構造体で格納します.すべての点を並べ替え、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
");
else
printf("ugly
");
return 0;
}