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;
    }
  • 相关阅读:
    十进制转任意进制
    整型与字符串转换
    最长递增子序列(动态规划)
    睡眠理发师问题
    区间最值问题(RMQ)
    分解质因子
    数字统计
    After all, tomorrow is another day.
    【USB电平】电脑USB电平
    【有源滤波】滤波基础知识
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934517.html
Copyright © 2011-2022 走看看