zoukankan      html  css  js  c++  java
  • poj1931

    题意:看两个给定对应点的多边形是否经过位移,旋转,缩放可重叠。

    分析:只需要判断每对应两点的距离是否成比例。注意:不只是相邻点,不相邻的也要判断。

    计算好计算过程中数值的大小,那些需要用long long。

    View Code
    #include <iostream>
    #include
    <cstdio>
    #include
    <cstdlib>
    #include
    <cstring>
    #include
    <cmath>
    usingnamespace std;

    #define maxn 305

    struct XPoint
    {
    int x, y;
    XPoint()
    {
    }
    XPoint(
    int xx, int yy) :
    x(xx), y(yy)
    {
    }
    } aa[maxn], bb[maxn];

    int n;

    int len(XPoint &a, XPoint &b)
    {
    return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
    }

    bool checkedge()
    {
    int a1 = len(aa[0], aa[1]);
    int b1 = len(bb[0], bb[1]);
    for (int i =0; i < n; i++)
    for (int j =0; j < n; j++)
    if ((longlong) a1 * len(bb[i], bb[j]) != (longlong) b1 * len(aa[i],aa[j]))
    returnfalse;
    returntrue;
    }

    int main()
    {
    //freopen("D:\\t.txt", "r", stdin);
    while (scanf("%d", &n) != EOF && n !=0)
    {
    bool flag =false;
    for (int i =0; i < n; i++)
    scanf(
    "%d%d", &aa[i].x, &aa[i].y);
    for (int i =0; i < n; i++)
    scanf(
    "%d%d", &bb[i].x, &bb[i].y);
    longlong d1 = (aa[1].x - aa[0].x) * (aa[2].y - aa[0].y) - (aa[1].y - aa[0].y) * (aa[2].x - aa[0].x);
    longlong d2 = (bb[1].x - bb[0].x) * (bb[2].y - bb[0].y) - (bb[1].y - bb[0].y) * (bb[2].x - bb[0].x);
    if (checkedge()&& d1 * d2 >=0)
    flag
    =true;
    if (flag)
    printf(
    "similar\n");
    else
    printf(
    "dissimilar\n");
    }
    return0;
    }
  • 相关阅读:
    Linux系统调用
    Kubernetes 中强化tab 功能
    Docker镜像构建之案例分享
    网络基础之名词介绍
    网络基础协议之UDP(下篇)
    网络基础协议之UDP(上篇)
    内核升级
    尼恩 Java高并发三部曲 [官方]
    CDN图解(秒懂
    DNS图解(秒懂
  • 原文地址:https://www.cnblogs.com/rainydays/p/1986391.html
Copyright © 2011-2022 走看看