CDOJ 93 King's Sanctuary【判断四边形形状】

King‘s Sanctuary

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

Submit 
Status

The king found his adherents were building four sanctuaries for him. He is interested about the positions of the sanctuaries and wants to know whether they would form a parallelogram, rectangle, diamond, square
or anything else.

Input

The first line of the input is TT(1≤T≤10001≤T≤1000),
which stands for the number of test cases you need to solve. Each case contains four lines, and there are two integers in each line, which shows the position of the four sanctuaries. And it is guaranteed that the positions are given clockwise. And it is always
a convex polygon, if you connect the four points clockwise.

Output

For every test case, you should output Case
#t:
 first, where tt indicates
the case number and counts from 11,
then output the type of the quadrilateral.

Sample input and output

Sample Input Sample Output
5
0 0
1 1
2 1
1 0
0 0
0 1
2 1
2 0
0 0
2 1
4 0
2 -1
0 0
0 1
1 1
1 0
0 0
1 1
2 1
3 0
Case #1: Parallelogram
Case #2: Rectangle
Case #3: Diamond
Case #4: Square
Case #5: Others

Source

Sichuan State Programming Contest 2012

原题链接:http://acm.uestc.edu.cn/#/problem/show/93

题意:按顺时针(clockwise)方向给你四个点的坐标,判断它是否是平行四边形,矩形,菱形,正方形。

几何,肯定是用向量,具体判断四边形的形状,就看你初高中的几何了,具体判断,看下面这张图。

AC代码:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cmath>
using namespace std;
struct point
{
    int x,y;
} p[4];
int main()
{
    int T;
    int kase=0;
    cin>>T;
    while(T--)
    {
        for(int i=0; i<4; i++)
        {
            cin>>p[i].x>>p[i].y;
        }
        int px= (p[1].x-p[0].x);
        int py= (p[1].y-p[0].y);

        int qx= (p[2].x-p[3].x);
        int qy= (p[2].y-p[3].y);

        int rx= (p[2].x-p[1].x);
        int ry=(p[2].y-p[1].y);

        int tx=p[3].x-p[0].x;
        int ty=p[3].y-p[0].y;
        printf("Case #%d: ",++kase);
        if(px==qx&&py==qy&&rx==tx&&ry==ty)//两组对边分别相等-->平行四边形
        {
            if(px*rx+py*ry==0)//+邻边垂直-->矩形或正方形
            {
                if(px*px+py*py==rx*rx+ry*ry)//+邻边相等-->正方形
                {
                    cout<<"Square"<<endl;
                }
                else
                    cout<<"Rectangle"<<endl;
            }
            else if(px*px+py*py==rx*rx+ry*ry)//+邻边不垂直但相等-->菱形
            {
                cout<<"Diamond"<<endl;
            }
            else//平行四边形
                cout<<"Parallelogram"<<endl;
        }
        else
            cout<<"Others"<<endl;
    }
    return 0;
}

CDOJ 93 King's Sanctuary【判断四边形形状】

时间: 2024-10-11 03:18:46

CDOJ 93 King's Sanctuary【判断四边形形状】的相关文章

cdoj 93 King&#39;s Sanctuary 傻逼几何题

King's Sanctuary Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/93 Description The king found his adherents were building four sanctuaries for him. He is interested about the positions of the sanctuaries and want

判断三角形形状

判断三角形形状 一.依据:主要是正.余弦定理的角的形式或者边的形式,其次还可能用到诱导公式,两角和与差的公式和二倍角公式等, 二.变形思路: ①角化边,转化为只有边的形式,解代数方程得到, ②边化角,转化为只有角的形式,解三角方程得到, 三.例题 \(\fbox{例1}\) 设\(\Delta ABC\)的内角\(A,B,C\)所对的边分别为\(a,b,c\),若\(bcosC+ccosB=asinA\),则\(\Delta ABC\)的形状为[] A.锐角三角形 \(\hspace{2cm}\

笔试算法题(21):将stack内外颠倒 &amp; 判断扑克牌顺子

出题:要求用递归将一个栈结构的元素内外颠倒: 分析: 本题再次说明系统栈是程序员最好的帮手,但递归度较高所以时间复杂度较大,可以使用空间换时间的方法(额外数组保存栈元素,然后逆向压入): 第一层递归(清空栈元素,并使用系统栈保存):[1,2,3,4,5],栈顶元素为1,将1弹出之后,递归处理[2,3,4,5]: 第二层递归(将栈顶元素插入到栈底,同样使用系统栈保存):当[2,3,4,5]已经逆序之后,需要将1插入到栈底,所以将1作为参数传递到递归调用中,之后递归处理2和[3,4,5]: 解题:

C# 正则表达式 判断各种字符串(如手机号)

1 using System; 2 using System.Text.RegularExpressions; 3 namespace MetarCommonSupport 4 { 5 /// <summary> 6 /// 通过Framwork类库中的Regex类实现了一些特殊功能数据检查 7 /// </summary> 8 public class MetarnetRegex 9 { 10 11 private static MetarnetRegex instance =

UVA 11800 Determine the Shape --凸包第一题

题意: 给四个点,判断四边形的形状.可能是正方形,矩形,菱形,平行四边形,梯形或普通四边形. 解法: 开始还在纠结怎么将四个点按序排好,如果直接处理的话,有点麻烦,原来凸包就可搞,直接求个凸包,然后点就自动按逆时针排好了,然后就判断就可以了,判断依据题目下面有,主要是用到点积和叉积,判断垂直用点积,判断平行用叉积. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cstd

猿辅导2017年春季初联训练营作业题解答-2: &quot;非负数&quot;

1. 对任意实数 $x$, 比较 $3x^2 + 2x - 1$ 与 $x^2 + 5x - 3$ 的大小. 解答: $$(3x^2 + 2x - 1)-(x^2 + 5x - 3) = 2x^2 - 3x + 2 = 2\left(x-\frac{3}{4}\right)^2 + \frac{7}{8} > 0$$ $$\Rightarrow 3x^2 + 2x - 1 > x^2 + 5x - 3.$$ 2. 四边形的四条边长分别为 $a, b, c, d$, 它们满足等式 $a^4 +

numpy模块(详解)

重点 索引和切片 级联 聚合操作 统计操作 矩阵 什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律 数据分析是用适当的方法对收集来的大量数据进行分析,帮助人们做出判断,以便采取适当的行动 商品采购量的多少 总部向各个地区代理的发货量 为什么学习数据分析 有岗位的需求 是Python数据科学的基础 是机器学习课程的基础 数据分析实现流程 提出问题 准备数据 分析数据 获得结论 成果可视化 数据分析三剑客 numpy pandas matplotlib

100个直接可以拿来用的JavaScript实用功能代码片段

把平时网站上常用的一些实用功能代码片段通通收集起来,方面网友们学习使用,利用好的话可以加快网友们的开发速度,提高工作效率. 目录如下: 1.原生JavaScript实现字符串长度截取2.原生JavaScript获取域名主机3.原生JavaScript清除空格4.原生JavaScript替换全部5.原生JavaScript转义html标签6.原生JavaScript还原html标签7.原生JavaScript时间日期格式转换8.原生JavaScript判断是否为数字类型9.原生JavaScript

Visual Studio 2015 的安装与使用

为什么要使用Visual Studio 2015? 它是中文的.界面友好.自动补全.实时语法错误提示(上图中波浪线部分).单步调试--最重要的社区版是免费的!所以你不必再昧着良心使用不合法.老旧的不兼容当代系统的VC++6.0,Come to VS2015 and enjoy it! 接下来我将告诉你如何安装以及使用它编写.运行C/C++程序! ? 获得Visual Studio 2015 进入Visual Studio 官方网站,点击"下载Visual Studio社区". 如果一切