1805: SC和ta的游泳池
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 148 Solved: 42
Submit Status Web Board
Description
SC打牌又赢钱了,所以SC想要在他家的别墅里新建一个游泳池。
SC决定自己设计游泳池,他在纸上画好了坐标轴后开始方了,所以决定把游泳池设计成矩形的。
思考了几个月后,SC在坐标上描了4个点,而且这4个点正好构成一个矩形,并且矩形的边和坐标轴平行。
SC喜出望外,终于设计好了游泳池,决定打电话给WT请他来参观一下自己设计的游泳池。
WT觉得SC这设计的特别丑,于是用橡皮随手擦了几个点后就走了。
悲痛欲绝的SC觉得自己的审美是没问题的,想要恢复之前画好的矩形,所以急切的想知道剩下的这些点能不能恢复出来原来的矩形。
Input
包含多组测试数据。
每组数据第一行为一个正整数N (1 <= N <= 4)。
接下来N行,每行包含两个整数Xi,Yi (-1000 <= Xi,Yi <= 1000).代表第i个点的坐标。
数据保证这些点是原矩形的顶点坐标,并且矩形的边平行于坐标轴。
Output
若可以还原出唯一的矩形,请输出还原出的矩形的面积。如果无法还原出矩形请输出 -1。
Sample Input
2 0 0 1 1 1 1 1
Sample Output
1 -1
本身挺简单一道题,硬是被我想难了……
还是要好好看题TAT,没有好好看四个点给的一定是顶点,结果想了很多种情况。
#include<stdio.h>
#include<algorithm>
using namespace std;
int x[10],y[10];
int main()
{
int n,i,s;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d%d",&x[i],&y[i]);
if(n<=1)
printf("-1\n");
if(n==2)
{
if(x[1]==x[0]||y[0]==y[1])
printf("-1\n");
else
{
s=(x[0]-x[1])*(y[0]-y[1]);
if(s<0)
s=-s;
printf("%d\n",s);
}
}
if(n==3)
{
sort(x,x+3);
sort(y,y+3);
s=(x[2]-x[0])*(y[2]-y[0]);
if(s==0)
printf("-1\n");
printf("%d\n",s);
}
if(n==4)
{
sort(x,x+4);
sort(y,y+4);
s=(x[3]-x[0])*(y[3]-y[0]);
if(s==0)
printf("-1\n");
printf("%d\n",s);
}
}
return 0;
}