笑死我了,居然一遍就过了。

题意:给你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\n",xx[1],yy[1]);
xx[2]=x[2];yy[2]=y[2];
printf("%lf %lf\n",xx[2],yy[2]);
xx[3]=x[4];yy[3]=y[4];
printf("%lf %lf\n",xx[3],yy[3]);
xx[4]=x[5];yy[4]=y[5];
printf("%lf %lf\n",xx[4],yy[4]);
xx[5]=x[3];yy[5]=y[3];
printf("%lf %lf\n",xx[5],yy[5]);
int ans=solve();
printf("%d\n",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\n");
else
printf("No\n");
}
return 0;
}

最新文章

  1. 连续赋值与求值顺序var a = {n:1};a.x = a = {n:2}; alert(a.x);
  2. 基础02 Java 跨平台原理
  3. [转]MySQL排序原理与案例分析
  4. busybox配置telnetd
  5. 局域网内sqldeveloper客户端连接oracle服务器
  6. extern int a[] VS extern int *a
  7. php字符串常见面试题
  8. Cocos Studio和Cocos2d-x版本对应关系
  9. Java泛型的定义以及对于&lt;? extends T&gt;和&lt;? super T&gt;
  10. 【干货】一篇文章学会Gulp(Getting started with Gulp)
  11. JavaScript 中的对象深度复制(Object Deep Clone)
  12. vue项目上传Github预览
  13. BZOJ2821 作诗(Poetize) 分块
  14. java框架之Hibernate(1)-简介及初使用
  15. MongoDB索引管理-索引的创建、查看、删除
  16. laravel5 项目上线后务必将开发环境更改为生产环境
  17. notification 是同步的
  18. JS中dataTransfer对象在拖曳操作中的妙用。
  19. js中var、let、const区别
  20. python 编码规范起源:PEP8 编码规范中文版

热门文章

  1. react map 遍历
  2. node 爬虫 --- 批量下载图片
  3. 《Java虚拟机原理图解》4.JVM机器指令集
  4. POJ 2378 Tree Cutting 子树统计
  5. vue 安装与起步
  6. AndroidCityPicker仿IOS选择效果
  7. 自己定义msi安装包的运行过程
  8. db_create_file_dest
  9. mysql数据库隔离级别及其原理、Spring的7种事物传播行为
  10. Fastreport生成WEB报表