zoukankan      html  css  js  c++  java
  • hdoj5563(简单几何)

    笑死我了,居然一遍就过了。
    题意:给你5个点,让你判断能否组成一个五角星;
    思路:
    利用对称性,应该有很多种方法。弱打的很麻烦。但是那个两点式公式去判断另外一个点是否在一条直线上的那个判断,还是蛮喜欢的
    double dd=(double)(xx[i]-onex)/(twox-onex)-(double)(yy[i]-oney)/(twoy-oney);
    然后根据题目要求,去使用dd

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    #define MAX 110
    #define ll __int64
    #define mod 9973
    #define N 1010
    
    double x[10];
    double y[10];
    
    double xx[10];
    double yy[10];
    bool vis[10];
    
    int solve()
    {
        double onex,oney;
        double twox,twoy;
        double k,b;
        for(int i=1;i<=5;i++)
        {
            if(i==1)
            {
                onex=(xx[2]+xx[5])*0.5;
                oney=(yy[2]+yy[5])*0.5;
    
                twox=(xx[3]+xx[4])*0.5;
                twoy=(yy[3]+yy[4])*0.5;
            }
            else if(i==2)
            {
                onex=(xx[1]+xx[3])*0.5;
                oney=(yy[1]+yy[3])*0.5;
    
                twox=(xx[5]+xx[4])*0.5;
                twoy=(yy[5]+yy[4])*0.5;
            }
            else if(i==3)
            {
                onex=(xx[2]+xx[4])*0.5;
                oney=(yy[2]+yy[4])*0.5;
    
                twox=(xx[5]+xx[1])*0.5;
                twoy=(yy[5]+yy[1])*0.5;
            }
            else if(i==4)
            {
                onex=(xx[3]+xx[5])*0.5;
                oney=(yy[3]+yy[5])*0.5;
    
                twox=(xx[1]+xx[2])*0.5;
                twoy=(yy[1]+yy[2])*0.5; 
            } 
            else if(i==5)
            {
                onex=(xx[2]+xx[3])*0.5;
                oney=(yy[2]+yy[3])*0.5;
    
                twox=(xx[1]+xx[4])*0.5;
                twoy=(yy[1]+yy[4])*0.5;
            }
            double dd=(double)(xx[i]-onex)/(twox-onex)-(double)(yy[i]-oney)/(twoy-oney);
            if(dd<0)
                dd=-dd;
            if(dd>0.00001)
            {
                return 0;
            }
        }
        return 1;
    }
    
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            for(int i=1;i<=5;i++)
            {
                scanf("%lf%lf",&x[i],&y[i]);
            }
            /*
            xx[1]=x[1];yy[1]=y[1];
            printf("%lf %lf
    ",xx[1],yy[1]);
            xx[2]=x[2];yy[2]=y[2];
            printf("%lf %lf
    ",xx[2],yy[2]);
            xx[3]=x[4];yy[3]=y[4];
            printf("%lf %lf
    ",xx[3],yy[3]);
            xx[4]=x[5];yy[4]=y[5];
            printf("%lf %lf
    ",xx[4],yy[4]);
            xx[5]=x[3];yy[5]=y[3];
            printf("%lf %lf
    ",xx[5],yy[5]);
            int ans=solve();
            printf("%d
    ",ans);
            */
    
            int flag=0;
            for(int i=1;i<=5;i++)
            {
                xx[1]=x[i];
                yy[1]=y[i];
    
                for(int j=1;j<=5;j++)
                {
                    if(i!=j)
                    {
                        xx[2]=x[j];
                        yy[2]=y[j];
                        for(int p=1;p<=5;p++)
                        {
                            if(p!=i&&p!=j)
                            {
                                xx[3]=x[p];
                                yy[3]=y[p];
                                for(int q=1;q<=5;q++)
                                {
                                    if(q!=i&&q!=j&&q!=p)
                                    {
                                        xx[4]=x[q];
                                        yy[4]=y[q];
                                        for(int k=1;k<=5;k++)
                                        {
                                            if(i!=k&&j!=k&&p!=k&&q!=k)
                                            {
                                                xx[5]=x[k];
                                                yy[5]=y[k];
                                                flag=solve();
                                            }
                                            if(flag) break;
                                        }
                                    } 
                                    if(flag) break;
                                }
                            }
                            if(flag) break; 
                        }
                    }
                    if(flag) break;
                }
                if(flag) break;
            }
            if(flag) 
                printf("Yes
    ");
            else
                printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    在SQLite中使用索引优化查询速度
    SQLite支持的SQL数据操作
    left (outer) join , right (outer) join, full (outer) join, (inner) join, cross join 区别
    深入理解Android内存管理原理(六)
    Merge Sorted Array
    Sort Colors
    Construct Binary Tree from Preorder and Inorder Traversal
    Binary Tree Postorder Traversal
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934517.html
Copyright © 2011-2022 走看看