hdu 2108 Shape of HDU
2015-08-14 10:38
330 查看
hdu 2108 Shape of HDU
题目大意很好懂就是判断是凹变形还是凸变形
判断方法:
向量a=(x1,y1),b=(x2,y2);
向量的叉积a×b=x1*y2-x2*y1; 当a×b>0时,b在a的逆时针方向,当a×b=0时,b与a共线,当a×b<0时,b在a的顺时针方向。
对于连续输入的三点A(x1,y1),B(x2,y2),C(x3,y3);
根据凸多边形的性质:向量AC(x3-x1,y3-y1)必定在向量AB(x2-x1,y2-y1)的逆时针方向,或者共线。
所以AB×AC>=0,即ans=(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)>=0。 当出现ans<0时,即为凹多边形。
该题要判断所有点吗,如果只要有个点不成立,那么该多边形就是凹变形。如果该多边形要是凸变形,那所有的点都要成立。
题目大意很好懂就是判断是凹变形还是凸变形
判断方法:
向量a=(x1,y1),b=(x2,y2);
向量的叉积a×b=x1*y2-x2*y1; 当a×b>0时,b在a的逆时针方向,当a×b=0时,b与a共线,当a×b<0时,b在a的顺时针方向。
对于连续输入的三点A(x1,y1),B(x2,y2),C(x3,y3);
根据凸多边形的性质:向量AC(x3-x1,y3-y1)必定在向量AB(x2-x1,y2-y1)的逆时针方向,或者共线。
所以AB×AC>=0,即ans=(x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)>=0。 当出现ans<0时,即为凹多边形。
该题要判断所有点吗,如果只要有个点不成立,那么该多边形就是凹变形。如果该多边形要是凸变形,那所有的点都要成立。
#include<iostream> #include<cstdio> using namespace std; struct node { int x,y; }p[11000]; bool judge(int x1,int y1,int x2,int y2,int x3,int y3) { return (x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)>=0; } int main() { int n,i,flage; while(scanf("%d",&n)!=EOF&&n!=0) { flage=0; for(i=0;i<n;i++) scanf("%d%d",&p[i].x,&p[i].y); if(!judge(p[n-1].x,p[n-1].y,p[0].x,p[0].y,p[1].x,p[1].y)) flage=1; if(!judge(p[n-2].x,p[n-2].y,p[n-1].x,p[n-1].y,p[0].x,p[0].y)) flage=1; for(i=0;i<n-2;i++) { if(flage) break; if(!judge(p[i].x,p[i].y,p[i+1].x,p[i+1].y,p[i+2].x,p[i+2].y)) flage=1; } if(flage) printf("concave\n"); else printf("convex\n"); } return 0; }第一道 计算几何 ,看了解题报告。
相关文章推荐
- enum 相对 接口、类定义常量的优势
- 数据结构与算法 代码整理:外排序法
- android.support.v4.app.Fragment-Activity
- API网络接口
- 快速排序示例
- springmvc+bootstrap 自动开发模式
- Spring与jdbc连接实现增删改查(二)
- java中两个整数相除得到小数点并保留两位小数的方法
- Android 判断 网络连接 Internet访问 工具类
- HDU 1305 Immediate Decodability(与1671类似)
- Linux编译+更换3.4版本内核教程 [复制链接]
- 初学者快速学习使用Logcat进行简单调试
- win2008,IP安全策略下配置一个IP段
- 【UVa 10815】Andy's First Dictionary
- Exchanger两个线程之间交换数据
- 合并merge into
- oracle表空间使用率统计查询
- Android自定义类似ProgressDialog效果的Dialog
- cocos2d-x《农场模拟经营养成》游戏完整源码
- android实现activity半透明色