hdoj5563(简单几何)
2016-05-27 14:42
267 查看
笑死我了,居然一遍就过了。
题意:给你5个点,让你判断能否组成一个五角星;
思路:
利用对称性,应该有很多种方法。弱打的很麻烦。但是那个两点式公式去判断另外一个点是否在一条直线上的那个判断,还是蛮喜欢的
double dd=(double)(xx[i]-onex)/(twox-onex)-(double)(yy[i]-oney)/(twoy-oney);
然后根据题目要求,去使用dd
题意:给你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; }
相关文章推荐
- CREATURE_TEMPLATE
- 【EasyUI-加载完Html内容样式渲染完成后显示】
- MySQL学习总结(四)数据的基本操作以及MySQL运算符和常用函数
- Android 解决在ListView历史复用中Edittext数据显示混乱
- UIWebView加载本地html
- 【Apache】安装时报错“Failed to open the WinNT service manager”
- 高并发-线程池介绍
- 副本限制修改-M端
- java定时器无法自动注入的问题解析
- Java学习笔记Object类
- 【结构型】Flyweight模式
- shell简单编程
- jquery.autocomplete 使用解析
- hdu 3579(中国剩余定理+考虑0)
- 魔兽世界任务制作教学
- 云豹直播:如何抓住手机直播、互动直播的风口?
- wap jquery消息提示小插件
- 关于Android中的屏幕适配问题
- 最新版SDWebImage的使用
- Android实战--短信发送器